Sync problems on Windows 10 with Joplin Portable and remote Joplin Server

Am using:

Joplin 2.8.8 (prod, win32)

Client ID: fa0bd8a438024ca6a66939726cc4c130
Sync Version: 3
Profile Version: 41
Keychain Supported: No

Revision: c2a6a13

I'm syncing with: Joplin Server 2.6.14

  1. Syncing from Linux works fine
  2. Syncing form Android works fine
  3. Syncing from Win10 does not

The symptom is endless whirring like this:

image

That was after I tried to cancel because it was whirring endlessly.

ON the dev console the only message I see of note is:

DevTools failed to load source map: Could not parse content for file:///C:/Users/berndw/AppData/Local/Temp/1/29INlr22WVbjvTPaF97yQMMWANh/resources/app.asar/gui/note-viewer/pluginAssets/mermaid/mermaid.min.js.map: Unexpected end of JSON input

There's some mroe stuff like:


C:\Users\berndw\AppData\Local\Temp\1\29INlr22WVbjvTPaF97yQMMWANh\resources\app.asar\node_modules\@joplin\lib\Logger.js:190 12:40:17: RevisionService: maintenance: Service is enabled
C:\Users\berndw\AppData\Local\Temp\1\29INlr22WVbjvTPaF97yQMMWANh\resources\app.asar\node_modules\@joplin\lib\Logger.js:190 12:40:17: RevisionService: collectRevisions: Created revisions for 0 notes
C:\Users\berndw\AppData\Local\Temp\1\29INlr22WVbjvTPaF97yQMMWANh\resources\app.asar\node_modules\@joplin\lib\Logger.js:190 12:40:17: RevisionService: maintenance: Done in 479ms
2C:\Users\berndw\AppData\Local\Temp\1\29INlr22WVbjvTPaF97yQMMWANh\resources\app.asar\node_modules\@joplin\lib\versionInfo.js:31 Revision: c2a6a13
C:\Users\berndw\AppData\Local\Temp\1\29INlr22WVbjvTPaF97yQMMWANh\resources\app.asar\node_modules\@joplin\lib\Logger.js:190 12:50:17: RevisionService: maintenance: Starting...
C:\Users\berndw\AppData\Local\Temp\1\29INlr22WVbjvTPaF97yQMMWANh\resources\app.asar\node_modules\@joplin\lib\Logger.js:190 12:50:17: RevisionService: maintenance: Service is enabled
C:\Users\berndw\AppData\Local\Temp\1\29INlr22WVbjvTPaF97yQMMWANh\resources\app.asar\node_modules\@joplin\lib\Logger.js:190 12:50:17: RevisionService: collectRevisions: Created revisions for 0 notes
C:\Users\berndw\AppData\Local\Temp\1\29INlr22WVbjvTPaF97yQMMWANh\resources\app.asar\node_modules\@joplin\lib\Logger.js:190 12:50:17: RevisionService: maintenance: Done in 119ms

appearing after that but looks benign.

I can surf tot he server in Chrome fine and inspect its items and log. LOg shows no activity from my Win 10 box (though it would be easier to be sure of that if log included not just Type and TImestamp but also the client address, version and OS but that's an aside).

It could be that I should upgrade the server, and I hope to, but it would be nice to understand how to diagnose this one client failure as well (independent of that).

So in the debugger I pause execution while the Cancelling message whirs and it stops here:

image

I can break any time and always land there reliably, I can single step from there too and always come back to there after 14 steps.

(alas the video ends suddenly on return - wish youtube made it easy to leave the last frame visible).

Finally I checked the log file and these do look suspicious. Anonymized version here:

2022-09-12 12:30:25: JoplinServerApi: "curl -v -X DELETE -H "X-API-AUTH: ******" -H "X-API-MIN-VERSION: 2.6.0" 'https://joplin.my.server/api/locks/1_1_fa0bd8a438024ca6a66939726cc4c130'"
2022-09-12 12:30:25: JoplinServerApi: "Code:", "403"
2022-09-12 12:30:25: JoplinServerApi: "Error: Error 403 Forbidden: <!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=8; IE=EDGE">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <style type="text/css">
            body {
                height: 100%;
                font-family: Helvetica, Arial, sans-serif;
                color: #6a6a6a;
                margin: 0;
                display: flex;
                align-items: center;
                justify-content: center;
            }
            input[type=date], input[type=email], input[type=number], input[type=password], input[type=search], input[type=tel], input[type=text], input[type=time], input[type=url], select, textarea {
                color: #262626;
                vertical-align: baseline;
                margin: .2em;
                border-style: solid;
                border-width: 1px;
                border-color: #a9a9a9;
                background-color: #fff;
                box-sizing:
Code: 403
Error: Error 403 Forbidden: <!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=8; IE=EDGE">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <style type="text/css">
            body {
                height: 100%;
                font-family: Helvetica, Arial, sans-serif;
                color: #6a6a6a;
                margin: 0;
                display: flex;
                align-items: center;
                justify-content: center;
            }
            input[type=date], input[type=email], input[type=number], input[type=password], input[type=search], input[type=tel], input[type=text], input[type=time], input[type=url], select, textarea {
                color: #262626;
                vertical-align: baseline;
                margin: .2em;
                border-style: solid;
                border-width: 1px;
                border-color: #a9a9a9;
                background-color: #fff;
                box-sizing:
    at newError (C:\Users\me\AppData\Local\Temp\1\29INlr22WVbjvTPaF97yQMMWANh\resources\app.asar\node_modules\@joplin\lib\JoplinServerApi.js:192:28)
    at JoplinServerApi.<anonymous> (C:\Users\me\AppData\Local\Temp\1\29INlr22WVbjvTPaF97yQMMWANh\resources\app.asar\node_modules\@joplin\lib\JoplinServerApi.js:232:27)
    at Generator.throw (<anonymous>)
    at rejected (C:\Users\me\AppData\Local\Temp\1\29INlr22WVbjvTPaF97yQMMWANh\resources\app.asar\node_modules\@joplin\lib\JoplinServerApi.js:6:65)
    at processTicksAndRejections (internal/process/task_queues.js:95:5)"
2022-09-12 12:30:25: JoplinServerApi: "Session expired or invalid - trying to login again", "Error: Error 403 Forbidden: <!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=8; IE=EDGE">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <style type="text/css">
            body {
                height: 100%;
                font-family: Helvetica, Arial, sans-serif;
                color: #6a6a6a;
                margin: 0;
                display: flex;
                align-items: center;
                justify-content: center;
            }
            input[type=date], input[type=email], input[type=number], input[type=password], input[type=search], input[type=tel], input[type=text], input[type=time], input[type=url], select, textarea {
                color: #262626;
                vertical-align: baseline;
                margin: .2em;
                border-style: solid;
                border-width: 1px;
                border-color: #a9a9a9;
                background-color: #fff;
                box-sizing:
Code: 403
Error: Error 403 Forbidden: <!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=8; IE=EDGE">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <style type="text/css">
            body {
                height: 100%;
                font-family: Helvetica, Arial, sans-serif;
                color: #6a6a6a;
                margin: 0;
                display: flex;
                align-items: center;
                justify-content: center;
            }
            input[type=date], input[type=email], input[type=number], input[type=password], input[type=search], input[type=tel], input[type=text], input[type=time], input[type=url], select, textarea {
                color: #262626;
                vertical-align: baseline;
                margin: .2em;
                border-style: solid;
                border-width: 1px;
                border-color: #a9a9a9;
                background-color: #fff;
                box-sizing:
    at newError (C:\Users\me\AppData\Local\Temp\1\29INlr22WVbjvTPaF97yQMMWANh\resources\app.asar\node_modules\@joplin\lib\JoplinServerApi.js:192:28)
    at JoplinServerApi.<anonymous> (C:\Users\me\AppData\Local\Temp\1\29INlr22WVbjvTPaF97yQMMWANh\resources\app.asar\node_modules\@joplin\lib\JoplinServerApi.js:232:27)
    at Generator.throw (<anonymous>)
    at rejected (C:\Users\me\AppData\Local\Temp\1\29INlr22WVbjvTPaF97yQMMWANh\resources\app.asar\node_modules\@joplin\lib\JoplinServerApi.js:6:65)
    at processTicksAndRejections (internal/process/task_queues.js:95:5)"
2022-09-12 12:30:27: "SearchEngine: Updating FTS table..."
2022-09-12 12:30:27: JoplinServerApi: "curl -v -X DELETE -H "X-API-AUTH: ******" -H "X-API-MIN-VERSION: 2.6.0" 'https://joplin.my.server/api/locks/1_1_fa0bd8a438024ca6a66939726cc4c130'"
2022-09-12 12:30:27: JoplinServerApi: "Code:", "403"
2022-09-12 12:30:27: JoplinServerApi: "Error: Error 403 Forbidden: <!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=8; IE=EDGE">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <style type="text/css">
            body {
                height: 100%;
                font-family: Helvetica, Arial, sans-serif;
                color: #6a6a6a;
                margin: 0;
                display: flex;
                align-items: center;
                justify-content: center;
            }
            input[type=date], input[type=email], input[type=number], input[type=password], input[type=search], input[type=tel], input[type=text], input[type=time], input[type=url], select, textarea {
                color: #262626;
                vertical-align: baseline;
                margin: .2em;
                border-style: solid;
                border-width: 1px;
                border-color: #a9a9a9;
                background-color: #fff;
                box-sizing:
Code: 403
Error: Error 403 Forbidden: <!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=8; IE=EDGE">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <style type="text/css">
            body {
                height: 100%;
                font-family: Helvetica, Arial, sans-serif;
                color: #6a6a6a;
                margin: 0;
                display: flex;
                align-items: center;
                justify-content: center;
            }
            input[type=date], input[type=email], input[type=number], input[type=password], input[type=search], input[type=tel], input[type=text], input[type=time], input[type=url], select, textarea {
                color: #262626;
                vertical-align: baseline;
                margin: .2em;
                border-style: solid;
                border-width: 1px;
                border-color: #a9a9a9;
                background-color: #fff;
                box-sizing:
    at newError (C:\Users\me\AppData\Local\Temp\1\29INlr22WVbjvTPaF97yQMMWANh\resources\app.asar\node_modules\@joplin\lib\JoplinServerApi.js:192:28)
    at JoplinServerApi.<anonymous> (C:\Users\me\AppData\Local\Temp\1\29INlr22WVbjvTPaF97yQMMWANh\resources\app.asar\node_modules\@joplin\lib\JoplinServerApi.js:232:27)
    at Generator.throw (<anonymous>)
    at rejected (C:\Users\me\AppData\Local\Temp\1\29INlr22WVbjvTPaF97yQMMWANh\resources\app.asar\node_modules\@joplin\lib\JoplinServerApi.js:6:65)
    at processTicksAndRejections (internal/process/task_queues.js:95:5)"
2022-09-12 12:30:27: "Could not run background sync:"
2022-09-12 12:30:27: "Error: Error 403 Forbidden: <!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=8; IE=EDGE">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <style type="text/css">
            body {
                height: 100%;
                font-family: Helvetica, Arial, sans-serif;
                color: #6a6a6a;
                margin: 0;
                display: flex;
                align-items: center;
                justify-content: center;
            }
            input[type=date], input[type=email], input[type=number], input[type=password], input[type=search], input[type=tel], input[type=text], input[type=time], input[type=url], select, textarea {
                color: #262626;
                vertical-align: baseline;
                margin: .2em;
                border-style: solid;
                border-width: 1px;
                border-color: #a9a9a9;
                background-color: #fff;
                box-sizing:
Code: 403
Error: Error 403 Forbidden: <!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=8; IE=EDGE">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <style type="text/css">
            body {
                height: 100%;
                font-family: Helvetica, Arial, sans-serif;
                color: #6a6a6a;
                margin: 0;
                display: flex;
                align-items: center;
                justify-content: center;
            }
            input[type=date], input[type=email], input[type=number], input[type=password], input[type=search], input[type=tel], input[type=text], input[type=time], input[type=url], select, textarea {
                color: #262626;
                vertical-align: baseline;
                margin: .2em;
                border-style: solid;
                border-width: 1px;
                border-color: #a9a9a9;
                background-color: #fff;
                box-sizing:
    at newError (C:\Users\me\AppData\Local\Temp\1\29INlr22WVbjvTPaF97yQMMWANh\resources\app.asar\node_modules\@joplin\lib\JoplinServerApi.js:192:28)
    at JoplinServerApi.<anonymous> (C:\Users\me\AppData\Local\Temp\1\29INlr22WVbjvTPaF97yQMMWANh\resources\app.asar\node_modules\@joplin\lib\JoplinServerApi.js:232:27)
    at Generator.throw (<anonymous>)
    at rejected (C:\Users\me\AppData\Local\Temp\1\29INlr22WVbjvTPaF97yQMMWANh\resources\app.asar\node_modules\@joplin\lib\JoplinServerApi.js:6:65)
    at processTicksAndRejections (internal/process/task_queues.js:95:5)"

They start with a curl failure so I try that manually in a bash window (again anonymized):

$ curl -v -X DELETE -H "X-API-AUTH: ******" -H "X-API-MIN-VERSION: 2.6.0" 'https://joplin.my.server/api/locks/1_1_fa0bd8a438024ca6a66939726cc4c130'
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying my.ip:443...
* Connected to joplin.my.server (my.ip) port 443 (#0)
* ALPN: offers h2
* ALPN: offers http/1.1
*  CAfile: C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
*  CApath: none
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [88 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [187 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [15 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [5348 bytes data]
* TLSv1.3 (OUT), TLS alert, unknown CA (560):
} [2 bytes data]
* SSL certificate problem: unable to get local issuer certificate
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
* Closing connection 0
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.se/docs/sslcerts.html

curl failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.

And it looks like a cert issue. No surprise. It might align with a time when our local admins introduced cert rewrites on the firewall. The browser can get there fine, but curl not so.

So I use the -k option to ignore that and:

$ curl -kv -X DELETE -H "X-API-AUTH: ******" -H "X-API-MIN-VERSION: 2.6.0" 'https://joplin.my.server/api/locks/1_1_fa0bd8a438024ca6a66939726cc4c130'
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0*   Trying my.ip:443...
* Connected to joplin.my.server (my.ip) port 443 (#0)
* ALPN: offers h2
* ALPN: offers http/1.1
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [88 bytes data]
* TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1):
} [1 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello (2):
{ [187 bytes data]
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
{ [15 bytes data]
* TLSv1.3 (IN), TLS handshake, Certificate (11):
{ [5348 bytes data]
* TLSv1.3 (IN), TLS handshake, CERT verify (15):
{ [264 bytes data]
* TLSv1.3 (IN), TLS handshake, Finished (20):
{ [52 bytes data]
* TLSv1.3 (OUT), TLS handshake, Finished (20):
} [52 bytes data]
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN: server accepted h2
* Server certificate:
*  subject: CN=my.server; L=                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
*  start date: Aug  2 00:00:00 2022 GMT
*  expire date: Oct 31 23:59:59 2022 GMT
*  issuer: C=My Country; ST=My State; L=My Location; O=My Org; CN=fw-fortigate; emailAddress=helpdesk@where.I.work.com
*  SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway.
* Using HTTP2, server supports multiplexing
* Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
} [5 bytes data]
* h2h3 [:method: DELETE]
* h2h3 [:path: /api/locks/1_1_fa0bd8a438024ca6a66939726cc4c130]
* h2h3 [:scheme: https]
* h2h3 [:authority: joplin.my.server]
* h2h3 [user-agent: curl/7.84.0]
* h2h3 [accept: */*]
* h2h3 [x-api-auth: ******]
* h2h3 [x-api-min-version: 2.6.0]
* Using Stream ID: 1 (easy handle 0x1bde7131c10)
} [5 bytes data]
> DELETE /api/locks/1_1_fa0bd8a438024ca6a66939726cc4c130 HTTP/2
> Host: joplin.my.server
> user-agent: curl/7.84.0
> accept: */*
> x-api-auth: ******
> x-api-min-version: 2.6.0
>
{ [5 bytes data]
* Connection state changed (MAX_CONCURRENT_STREAMS == 0)!
< HTTP/2 403
< content-type: text/html; chars<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=8; IE=EDGE">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <style type="text/css">
            body {
                height: 100%;
                font-family: Helvetica, Arial, sans-serif;
                color: #6a6a6a;
                margin: 0;
                display: flex;
                align-items: center;
                justify-content: center;
            }
            input[type=date], input[type=email], input[type=number], input[type=password], input[type=search], input[type=tel], input[type=text], input[type=time], input[type=url], select, textarea {
                color: #262626;
                vertical-align: baseline;
                margin: .2em;
                border-style: solid;
                border-width: 1px;
                border-color: #a9a9a9;
                background-color: #fff;
                box-sizing: border-box;
                padding: 2px .5em;
                appearance: none;
                border-radius: 0;
            }
            input:focus {
                border-color: #646464;
                box-shadow: 0 0 1px 0 #a2a2a2;
                outline: 0;
            }
            button {
                padding: .5em 1em;
                border: 1px solid;
                border-radius: 3px;
                min-width: 6em;
                font-weight: 400;
                font-size: .8em;
                cursor: pointer;
            }
            button.primary {
                color: #fff;
                background-color: rgb(47, 113, 178);
                border-color: rgb(34, 103, 173);
            }
            .message-container {
                height: 500px;
                width: 600px;
                padding: 0;
                margin: 10px;
            }
            .logo {
                background: url(https://globalurl.fortinet.net:8015/XX/YY/ZZ/CI/MGPGHGPGPFGHDDPFGGHGFHBGCHEGPFBGAHAH) no-repeat left center;
                height: 267px;
                object-fit: contain;
            }
            table {
                background-color: #fff;
                border-spacing: 0;
                margin: 1em;
            }
            table > tbody > tr > td:first-of-type:not([colspan]) {
                white-space: nowrap;
                color: rgba(0,0,0,.5);
            }
            table > tbody > tr > td:first-of-type {
                vertical-align: top;
            }
            table > tbody > tr > td {
                padding: .3em .3em;
            }
            .field {
                display: table-row;
            }
            .field > :first-child {
                display: table-cell;
                width: 20%;
            }
            .field.single > :first-child {
                display: inline;
            }
            .field > :not(:first-child) {
                width: auto;
                max-width: 100%;
                display: inline-flex;
                align-items: baseline;
                virtical-align: top;
                box-sizing: border-box;
                margin: .3em;
            }
            .field > :not(:first-child) > input {
                width: 230px;
            }
            .form-footer {
                display: inline-flex;
                justify-content: flex-start;
            }
            .form-footer > * {
                margin: 1em;
            }
            .text-scrollable {
                overflow: auto;
                height: 150px;
                border: 1px solid rgb(200, 200, 200);
                padding: 5px;
                font-size: 1em;
            }
            .text-centered {
                text-align: center;
            }
            .text-container {
                margin: 1em 1.5em;
            }
            .flex-container {
                display: flex;
            }
            .flex-container.column {
                flex-direction: column;
            }
        </style>
        <tiet=UTF-8
< cache-control: no-cache
<
{ [4898 bytes data]
100  4898    0  4898    0     0  21061      0 --:--:-- --:--:-- --:--:-- 21112tle>Application Control Violation</title>
    </head>
    <body><div class="message-container">
    <div class="logo"></div>
    <h1>FortiGate Application Control</h1>
    <h3>Application Blocked</h3>
    <p>You have attempted to use an application that violates your Internet usage policy.</p>
    <table><tbody>
        <tr>
            <td>Application</td>
            <td>WebDAV</td>
        </tr>
        <tr>
            <td>Category</td>
            <td>Network.Service</td>
        </tr>
        <tr>
            <td>URL</td>
            <td>https://joplin.my.server/api/locks/1_1_fa0bd8a438024ca6a66939726cc4c130</td>
        </tr>
        <tr>
            <td>Policy</td>
            <td>5c526288-dd9a-51ec-ccb0-862eda6c2c59</td>
        </tr>
    </tbody></table>
</div></body>
</html>


* Closing connection 0
} [5 bytes data]
* TLSv1.3 (OUT), TLS alert, close notify (256):
} [2 bytes data]

Which suggests our firewall is blocking it because it blocks WebDav. Hmmm ... That seems to make no sense as it's not (I went from a NextCloud sync to my own server specifically because WebDav is blocked here and it was working I feel sure). It's a FortiGate firewall here and maybe the message is not accurate (or does the Joplin server use the WEBDAV protocol?)

Either way, I think the Joplin client could/should respond more lucidly if that is the case, i.e. not with a hang, but with feedback such as this curl provides. Though ideally it avoids WebDav when using a Joplin Server ... Hmmm, any thoughts?

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.