浏览代码

misc: delete both web github integration and encryption

Tienson Qin 3 年之前
父节点
当前提交
b3f67c69b1
共有 49 个文件被更改,包括 478 次插入2504 次删除
  1. 9 14
      public/index.html
  2. 0 5
      resources/electron.html
  3. 0 5
      resources/index.html
  4. 0 176
      resources/js/isomorphic-git/1.7.4/http-web-index.umd.js
  5. 0 0
      resources/js/isomorphic-git/1.7.4/index.umd.min.js
  6. 0 0
      resources/js/lightning-fs.min.js
  7. 0 1
      resources/js/react-force-graph.min.js
  8. 1 248
      resources/js/worker.js
  9. 307 0
      resources/js/worker.js.~ad40770e961c388ac0b7cb32886268c269cb72ec~
  10. 0 6
      shadow-cljs.edn
  11. 2 2
      src/electron/electron/core.cljs
  12. 2 1
      src/main/frontend/commands.cljs
  13. 18 28
      src/main/frontend/components/commit.cljs
  14. 3 211
      src/main/frontend/components/diff.cljs
  15. 0 6
      src/main/frontend/components/diff.css
  16. 0 176
      src/main/frontend/components/encryption.cljs
  17. 0 3
      src/main/frontend/components/header.cljs
  18. 2 108
      src/main/frontend/components/repo.cljs
  19. 2 43
      src/main/frontend/components/settings.cljs
  20. 0 28
      src/main/frontend/components/svg.cljs
  21. 0 16
      src/main/frontend/config.cljs
  22. 2 5
      src/main/frontend/db.cljs
  23. 0 5
      src/main/frontend/db_schema.cljs
  24. 0 80
      src/main/frontend/dicts.cljc
  25. 0 104
      src/main/frontend/encrypt.cljs
  26. 0 23
      src/main/frontend/extensions/age_encryption.cljs
  27. 19 27
      src/main/frontend/fs.cljs
  28. 3 11
      src/main/frontend/fs/capacitor_fs.cljs
  29. 3 11
      src/main/frontend/fs/nfs.cljs
  30. 3 11
      src/main/frontend/fs/node.cljs
  31. 1 4
      src/main/frontend/fs/watcher_handler.cljs
  32. 0 173
      src/main/frontend/git.cljs
  33. 0 31
      src/main/frontend/github.cljs
  34. 53 92
      src/main/frontend/handler.cljs
  35. 0 116
      src/main/frontend/handler/common.cljs
  36. 2 5
      src/main/frontend/handler/editor.cljs
  37. 1 18
      src/main/frontend/handler/events.cljs
  38. 0 2
      src/main/frontend/handler/external.cljs
  39. 0 51
      src/main/frontend/handler/file.cljs
  40. 0 63
      src/main/frontend/handler/git.cljs
  41. 1 61
      src/main/frontend/handler/metadata.cljs
  42. 3 14
      src/main/frontend/handler/page.cljs
  43. 35 329
      src/main/frontend/handler/repo.cljs
  44. 2 31
      src/main/frontend/handler/user.cljs
  45. 3 9
      src/main/frontend/handler/web/nfs.cljs
  46. 0 5
      src/main/frontend/routes.cljs
  47. 0 31
      src/main/frontend/spec.cljs
  48. 1 92
      src/main/frontend/state.cljs
  49. 0 23
      src/main/frontend/util.cljc

+ 9 - 14
public/index.html

@@ -34,26 +34,21 @@
 <script>window.__LSP__HOST__ = true</script>
 <script>window.__LSP__HOST__ = true</script>
 <script src="/static/js/magic_portal.js"></script>
 <script src="/static/js/magic_portal.js"></script>
 <script>let worker = new Worker('/static/js/worker.js')
 <script>let worker = new Worker('/static/js/worker.js')
-const portal = new MagicPortal(worker);
-(async () => {
-  const git = await portal.get('git')
-  window.git = git
-  const fs = await portal.get('fs')
-  window.fs = fs
-  const pfs = await portal.get('pfs')
-  window.pfs = pfs
-  const gitHttp = await portal.get('gitHttp')
-  window.gitHttp = gitHttp
-  const workerThread = await portal.get('workerThread')
-  window.workerThread = workerThread
-})()
+  const portal = new MagicPortal(worker);
+  (async () => {
+    const fs = await portal.get('fs')
+    window.fs = fs
+    const pfs = await portal.get('pfs')
+    window.pfs = pfs
+    const workerThread = await portal.get('workerThread')
+    window.workerThread = workerThread
+  })()
 </script>
 </script>
 <script defer src="/static/js/highlight.min.js"></script>
 <script defer src="/static/js/highlight.min.js"></script>
 <script defer src="/static/js/interact.min.js"></script>
 <script defer src="/static/js/interact.min.js"></script>
 <script defer src="/static/js/lsplugin.core.js"></script>
 <script defer src="/static/js/lsplugin.core.js"></script>
 <script defer src="/static/js/main.js"></script>
 <script defer src="/static/js/main.js"></script>
 <script defer src="/static/js/code-editor.js"></script>
 <script defer src="/static/js/code-editor.js"></script>
-<script defer src="/static/js/age-encryption.js"></script>
 <script defer src="/static/js/excalidraw.js"></script>
 <script defer src="/static/js/excalidraw.js"></script>
 <script>
 <script>
   /*!
   /*!

+ 0 - 5
resources/electron.html

@@ -40,14 +40,10 @@
 <script>let worker = new Worker('./js/worker.js')
 <script>let worker = new Worker('./js/worker.js')
 const portal = new MagicPortal(worker);
 const portal = new MagicPortal(worker);
 (async () => {
 (async () => {
-  const git = await portal.get('git')
-  window.git = git
   const fs = await portal.get('fs')
   const fs = await portal.get('fs')
   window.fs = fs
   window.fs = fs
   const pfs = await portal.get('pfs')
   const pfs = await portal.get('pfs')
   window.pfs = pfs
   window.pfs = pfs
-  const gitHttp = await portal.get('gitHttp')
-  window.gitHttp = gitHttp
   const workerThread = await portal.get('workerThread')
   const workerThread = await portal.get('workerThread')
   window.workerThread = workerThread
   window.workerThread = workerThread
 })()
 })()
@@ -57,7 +53,6 @@ const portal = new MagicPortal(worker);
 <script defer src="./js/lsplugin.core.js"></script>
 <script defer src="./js/lsplugin.core.js"></script>
 <script defer src="./js/main.js"></script>
 <script defer src="./js/main.js"></script>
 <script defer src="./js/code-editor.js"></script>
 <script defer src="./js/code-editor.js"></script>
-<script defer src="./js/age-encryption.js"></script>
 <script defer src="./js/excalidraw.js"></script>
 <script defer src="./js/excalidraw.js"></script>
 </body>
 </body>
 </html>
 </html>

+ 0 - 5
resources/index.html

@@ -39,14 +39,10 @@
 <script>let worker = new Worker('./js/worker.js')
 <script>let worker = new Worker('./js/worker.js')
 const portal = new MagicPortal(worker);
 const portal = new MagicPortal(worker);
 (async () => {
 (async () => {
-  const git = await portal.get('git')
-  window.git = git
   const fs = await portal.get('fs')
   const fs = await portal.get('fs')
   window.fs = fs
   window.fs = fs
   const pfs = await portal.get('pfs')
   const pfs = await portal.get('pfs')
   window.pfs = pfs
   window.pfs = pfs
-  const gitHttp = await portal.get('gitHttp')
-  window.gitHttp = gitHttp
   const workerThread = await portal.get('workerThread')
   const workerThread = await portal.get('workerThread')
   window.workerThread = workerThread
   window.workerThread = workerThread
 })()
 })()
@@ -56,7 +52,6 @@ const portal = new MagicPortal(worker);
 <script defer src="./js/lsplugin.core.js"></script>
 <script defer src="./js/lsplugin.core.js"></script>
 <script defer src="./js/main.js"></script>
 <script defer src="./js/main.js"></script>
 <script defer src="./js/code-editor.js"></script>
 <script defer src="./js/code-editor.js"></script>
-<script defer src="./js/age-encryption.js"></script>
 <script defer src="./js/excalidraw.js"></script>
 <script defer src="./js/excalidraw.js"></script>
 </body>
 </body>
 </html>
 </html>

+ 0 - 176
resources/js/isomorphic-git/1.7.4/http-web-index.umd.js

@@ -1,176 +0,0 @@
-(function (global, factory) {
-  typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
-  typeof define === 'function' && define.amd ? define(['exports'], factory) :
-  (global = global || self, factory(global.GitHttp = {}));
-}(this, (function (exports) { 'use strict';
-
-  /**
-   * @typedef {Object} GitProgressEvent
-   * @property {string} phase
-   * @property {number} loaded
-   * @property {number} total
-   */
-
-  /**
-   * @callback ProgressCallback
-   * @param {GitProgressEvent} progress
-   * @returns {void | Promise<void>}
-   */
-
-  /**
-   * @typedef {Object} GitHttpRequest
-   * @property {string} url - The URL to request
-   * @property {string} [method='GET'] - The HTTP method to use
-   * @property {Object<string, string>} [headers={}] - Headers to include in the HTTP request
-   * @property {AsyncIterableIterator<Uint8Array>} [body] - An async iterator of Uint8Arrays that make up the body of POST requests
-   * @property {ProgressCallback} [onProgress] - Reserved for future use (emitting `GitProgressEvent`s)
-   * @property {object} [signal] - Reserved for future use (canceling a request)
-   */
-
-  /**
-   * @typedef {Object} GitHttpResponse
-   * @property {string} url - The final URL that was fetched after any redirects
-   * @property {string} [method] - The HTTP method that was used
-   * @property {Object<string, string>} [headers] - HTTP response headers
-   * @property {AsyncIterableIterator<Uint8Array>} [body] - An async iterator of Uint8Arrays that make up the body of the response
-   * @property {number} statusCode - The HTTP status code
-   * @property {string} statusMessage - The HTTP status message
-   */
-
-  /**
-   * @callback HttpFetch
-   * @param {GitHttpRequest} request
-   * @returns {Promise<GitHttpResponse>}
-   */
-
-  /**
-   * @typedef {Object} HttpClient
-   * @property {HttpFetch} request
-   */
-
-  // Convert a value to an Async Iterator
-  // This will be easier with async generator functions.
-  function fromValue(value) {
-    let queue = [value];
-    return {
-      next() {
-        return Promise.resolve({ done: queue.length === 0, value: queue.pop() })
-      },
-      return() {
-        queue = [];
-        return {}
-      },
-      [Symbol.asyncIterator]() {
-        return this
-      },
-    }
-  }
-
-  function getIterator(iterable) {
-    if (iterable[Symbol.asyncIterator]) {
-      return iterable[Symbol.asyncIterator]()
-    }
-    if (iterable[Symbol.iterator]) {
-      return iterable[Symbol.iterator]()
-    }
-    if (iterable.next) {
-      return iterable
-    }
-    return fromValue(iterable)
-  }
-
-  // Currently 'for await' upsets my linters.
-  async function forAwait(iterable, cb) {
-    const iter = getIterator(iterable);
-    while (true) {
-      const { value, done } = await iter.next();
-      if (value) await cb(value);
-      if (done) break
-    }
-    if (iter.return) iter.return();
-  }
-
-  async function collect(iterable) {
-    let size = 0;
-    const buffers = [];
-    // This will be easier once `for await ... of` loops are available.
-    await forAwait(iterable, value => {
-      buffers.push(value);
-      size += value.byteLength;
-    });
-    const result = new Uint8Array(size);
-    let nextIndex = 0;
-    for (const buffer of buffers) {
-      result.set(buffer, nextIndex);
-      nextIndex += buffer.byteLength;
-    }
-    return result
-  }
-
-  // Convert a web ReadableStream (not Node stream!) to an Async Iterator
-  // adapted from https://jakearchibald.com/2017/async-iterators-and-generators/
-  function fromStream(stream) {
-    // Use native async iteration if it's available.
-    if (stream[Symbol.asyncIterator]) return stream
-    const reader = stream.getReader();
-    return {
-      next() {
-        return reader.read()
-      },
-      return() {
-        reader.releaseLock();
-        return {}
-      },
-      [Symbol.asyncIterator]() {
-        return this
-      },
-    }
-  }
-
-  /* eslint-env browser */
-
-  /**
-   * HttpClient
-   *
-   * @param {GitHttpRequest} request
-   * @returns {Promise<GitHttpResponse>}
-   */
-  async function request({
-    onProgress,
-    url,
-    method = 'GET',
-    headers = {},
-    body,
-  }) {
-    // streaming uploads aren't possible yet in the browser
-    if (body) {
-      body = await collect(body);
-    }
-    const res = await fetch(url, { method, headers, body });
-    const iter =
-      res.body && res.body.getReader
-        ? fromStream(res.body)
-        : [new Uint8Array(await res.arrayBuffer())];
-    // convert Header object to ordinary JSON
-    headers = {};
-    for (const [key, value] of res.headers.entries()) {
-      headers[key] = value;
-    }
-    return {
-      url: res.url,
-      method: res.method,
-      statusCode: res.status,
-      statusMessage: res.statusText,
-      body: iter,
-      headers: headers,
-    }
-  }
-
-  var index = { request };
-
-  exports.default = index;
-  exports.request = request;
-
-  Object.defineProperty(exports, '__esModule', { value: true });
-
-})));

文件差异内容过多而无法显示
+ 0 - 0
resources/js/isomorphic-git/1.7.4/index.umd.min.js


文件差异内容过多而无法显示
+ 0 - 0
resources/js/lightning-fs.min.js


文件差异内容过多而无法显示
+ 0 - 1
resources/js/react-force-graph.min.js


+ 1 - 248
resources/js/worker.js

@@ -1,8 +1,6 @@
 importScripts(
 importScripts(
   // Batched optimization
   // Batched optimization
   "./lightning-fs.min.js?v=0.0.2.3",
   "./lightning-fs.min.js?v=0.0.2.3",
-  "./isomorphic-git/1.7.4/index.umd.min.js",
-  "./isomorphic-git/1.7.4/http-web-index.umd.js",
   // Fixed a bug
   // Fixed a bug
   "./magic_portal.js"
   "./magic_portal.js"
 );
 );
@@ -17,10 +15,6 @@ const detect = () => {
   }
   }
 };
 };
 
 
-function basicAuth (username, token) {
-  return "Basic " + btoa(username + ":" + token);
-}
-
 const fsName = 'logseq';
 const fsName = 'logseq';
 const createFS = () => new LightningFS(fsName);
 const createFS = () => new LightningFS(fsName);
 let fs = createFS();
 let fs = createFS();
@@ -28,174 +22,10 @@ let pfs = fs.promises;
 
 
 if (detect() === 'Worker') {
 if (detect() === 'Worker') {
   const portal = new MagicPortal(self);
   const portal = new MagicPortal(self);
-  portal.set('git', git);
   portal.set('fs', fs);
   portal.set('fs', fs);
   portal.set('pfs', pfs);
   portal.set('pfs', pfs);
-  portal.set('gitHttp', GitHttp);
+
   portal.set('workerThread', {
   portal.set('workerThread', {
-    setConfig: function (dir, path, value) {
-      return git.setConfig ({
-        fs,
-        dir,
-        path,
-        value
-      });
-    },
-    clone: function (dir, url, corsProxy, depth, branch, username, token) {
-      return git.clone ({
-        fs,
-        dir,
-        http: GitHttp,
-        url,
-        corsProxy,
-        ref: branch,
-        singleBranch: true,
-        depth,
-        headers: {
-          "Authorization": basicAuth(username, token)
-        }
-      });
-    },
-    fetch: function (dir, url, corsProxy, depth, branch, username, token) {
-      return git.fetch ({
-        fs,
-        dir,
-        http: GitHttp,
-        url,
-        corsProxy,
-        ref: branch,
-        singleBranch: true,
-        depth,
-        headers: {
-          "Authorization": basicAuth(username, token)
-        }
-      });
-    },
-    pull: function (dir, corsProxy, branch, username, token) {
-      return git.pull ({
-        fs,
-        dir,
-        http: GitHttp,
-        corsProxy,
-        ref: branch,
-        singleBranch: true,
-        // fast: true,
-        headers: {
-          "Authorization": basicAuth(username, token)
-        }
-      });
-    },
-    push: function (dir, corsProxy, branch, force, username, token) {
-      return git.push ({
-        fs,
-        dir,
-        http: GitHttp,
-        ref: branch,
-        corsProxy,
-        remote: "origin",
-        force,
-        headers: {
-          "Authorization": basicAuth(username, token)
-        }
-      });
-    },
-    merge: function (dir, branch) {
-      return git.merge ({
-        fs,
-        dir,
-        ours: branch,
-        theirs: "remotes/origin/" + branch,
-        // fastForwardOnly: true
-      });
-    },
-    checkout: function (dir, branch) {
-      return git.checkout ({
-        fs,
-        dir,
-        ref: branch,
-      });
-    },
-    log: function (dir, branch, depth) {
-      return git.log ({
-        fs,
-        dir,
-        ref: branch,
-        depth,
-        singleBranch: true
-      })
-    },
-    add: function (dir, file) {
-      return git.add ({
-        fs,
-        dir,
-        filepath: file
-      });
-    },
-    remove: function (dir, file) {
-      return git.remove ({
-        fs,
-        dir,
-        filepath: file
-      });
-    },
-    commit: function (dir, message, name, email, parent) {
-      if (parent) {
-        return git.commit ({
-          fs,
-          dir,
-          message,
-          author: {name: name,
-                   email: email},
-          parent: parent
-        });
-      } else {
-        return git.commit ({
-          fs,
-          dir,
-          message,
-          author: {name: name,
-                   email: email}
-        });
-      }
-    },
-    readCommit: function (dir, oid) {
-      return git.readCommit ({
-        fs,
-        dir,
-        oid
-      });
-    },
-    readBlob: function (dir, oid, path) {
-      return git.readBlob ({
-        fs,
-        dir,
-        oid,
-        path
-      });
-    },
-    writeRef: function (dir, branch, oid) {
-      return git.writeRef ({
-        fs,
-        dir,
-        ref: "refs/heads/" + branch,
-        value: oid,
-        force: true
-      });
-    },
-    resolveRef: function (dir, ref) {
-      return git.resolveRef ({
-        fs,
-        dir,
-        ref
-      });
-    },
-    listFiles: function (dir, branch) {
-      return git.listFiles ({
-        fs,
-        dir,
-        ref: branch
-      });
-    },
     rimraf: async function (path) {
     rimraf: async function (path) {
       // try {
       // try {
       //   // First assume path is itself a file
       //   // First assume path is itself a file
@@ -225,83 +55,6 @@ if (detect() === 'Worker') {
       }
       }
       // Finally, delete the empty directory
       // Finally, delete the empty directory
       await pfs.rmdir(path)
       await pfs.rmdir(path)
-    },
-    getFileStateChanges: async function (commitHash1, commitHash2, dir) {
-      return git.walk({
-        fs,
-        dir,
-        trees: [git.TREE({ ref: commitHash1 }), git.TREE({ ref: commitHash2 })],
-        map: async function(filepath, [A, B]) {
-          var type = 'equal';
-          if (A === null) {
-            type = "add";
-          }
-
-          if (B === null) {
-            type = "remove";
-          }
-
-          // ignore directories
-          if (filepath === '.') {
-            return
-          }
-          if ((A !== null && (await A.type()) === 'tree')
-              ||
-              (B !== null && (await B.type()) === 'tree')) {
-            return
-          }
-
-          // generate ids
-          const Aoid = A !== null && await A.oid();
-          const Boid = B !== null && await B.oid();
-
-          if (type === "equal") {
-            // determine modification type
-            if (Aoid !== Boid) {
-              type = 'modify'
-            }
-            if (Aoid === undefined) {
-              type = 'add'
-            }
-            if (Boid === undefined) {
-              type = 'remove'
-            }
-          }
-
-          if (Aoid === undefined && Boid === undefined) {
-            console.log('Something weird happened:')
-            console.log(A)
-            console.log(B)
-          }
-
-          return {
-            path: `/${filepath}`,
-            type: type,
-          }
-        },
-      })
-    },
-    statusMatrix: async function (dir) {
-      return git.statusMatrix({ fs, dir });
-    },
-    statusMatrixChanged: async function (dir) {
-      return (await git.statusMatrix({ fs, dir }))
-        .filter(([_, head, workDir, stage]) => !(head == 1 && workDir == 1 && stage == 1));
-    },
-    getChangedFiles: async function (dir) {
-      try {
-        const FILE = 0, HEAD = 1, WORKDIR = 2;
-
-        let filenames = (await git.statusMatrix({ fs, dir }))
-            .filter(row => row[HEAD] !== row[WORKDIR])
-            .map(row => row[FILE]);
-
-        return filenames;
-      } catch (err) {
-        console.error(err);
-        return [];
-      }
     }
     }
   });
   });
-  // self.addEventListener("message", ({ data }) => console.log(data));
 }
 }

+ 307 - 0
resources/js/worker.js.~ad40770e961c388ac0b7cb32886268c269cb72ec~

@@ -0,0 +1,307 @@
+importScripts(
+  // Batched optimization
+  "./lightning-fs.min.js?v=0.0.2.3",
+  "./isomorphic-git/1.7.4/index.umd.min.js",
+  "./isomorphic-git/1.7.4/http-web-index.umd.js",
+  // Fixed a bug
+  "./magic_portal.js"
+);
+
+const detect = () => {
+  if (typeof window !== 'undefined' && !self.skipWaiting) {
+    return 'window'
+  } else if (typeof self !== 'undefined' && !self.skipWaiting) {
+    return 'Worker'
+  } else if (typeof self !== 'undefined' && self.skipWaiting) {
+    return 'ServiceWorker'
+  }
+};
+
+function basicAuth (username, token) {
+  return "Basic " + btoa(username + ":" + token);
+}
+
+const fsName = 'logseq';
+const createFS = () => new LightningFS(fsName);
+let fs = createFS();
+let pfs = fs.promises;
+
+if (detect() === 'Worker') {
+  const portal = new MagicPortal(self);
+  portal.set('git', git);
+  portal.set('fs', fs);
+  portal.set('pfs', pfs);
+  portal.set('gitHttp', GitHttp);
+  portal.set('workerThread', {
+    setConfig: function (dir, path, value) {
+      return git.setConfig ({
+        fs,
+        dir,
+        path,
+        value
+      });
+    },
+    clone: function (dir, url, corsProxy, depth, branch, username, token) {
+      return git.clone ({
+        fs,
+        dir,
+        http: GitHttp,
+        url,
+        corsProxy,
+        ref: branch,
+        singleBranch: true,
+        depth,
+        headers: {
+          "Authorization": basicAuth(username, token)
+        }
+      });
+    },
+    fetch: function (dir, url, corsProxy, depth, branch, username, token) {
+      return git.fetch ({
+        fs,
+        dir,
+        http: GitHttp,
+        url,
+        corsProxy,
+        ref: branch,
+        singleBranch: true,
+        depth,
+        headers: {
+          "Authorization": basicAuth(username, token)
+        }
+      });
+    },
+    pull: function (dir, corsProxy, branch, username, token) {
+      return git.pull ({
+        fs,
+        dir,
+        http: GitHttp,
+        corsProxy,
+        ref: branch,
+        singleBranch: true,
+        // fast: true,
+        headers: {
+          "Authorization": basicAuth(username, token)
+        }
+      });
+    },
+    push: function (dir, corsProxy, branch, force, username, token) {
+      return git.push ({
+        fs,
+        dir,
+        http: GitHttp,
+        ref: branch,
+        corsProxy,
+        remote: "origin",
+        force,
+        headers: {
+          "Authorization": basicAuth(username, token)
+        }
+      });
+    },
+    merge: function (dir, branch) {
+      return git.merge ({
+        fs,
+        dir,
+        ours: branch,
+        theirs: "remotes/origin/" + branch,
+        // fastForwardOnly: true
+      });
+    },
+    checkout: function (dir, branch) {
+      return git.checkout ({
+        fs,
+        dir,
+        ref: branch,
+      });
+    },
+    log: function (dir, branch, depth) {
+      return git.log ({
+        fs,
+        dir,
+        ref: branch,
+        depth,
+        singleBranch: true
+      })
+    },
+    add: function (dir, file) {
+      return git.add ({
+        fs,
+        dir,
+        filepath: file
+      });
+    },
+    remove: function (dir, file) {
+      return git.remove ({
+        fs,
+        dir,
+        filepath: file
+      });
+    },
+    commit: function (dir, message, name, email, parent) {
+      if (parent) {
+        return git.commit ({
+          fs,
+          dir,
+          message,
+          author: {name: name,
+                   email: email},
+          parent: parent
+        });
+      } else {
+        return git.commit ({
+          fs,
+          dir,
+          message,
+          author: {name: name,
+                   email: email}
+        });
+      }
+    },
+    readCommit: function (dir, oid) {
+      return git.readCommit ({
+        fs,
+        dir,
+        oid
+      });
+    },
+    readBlob: function (dir, oid, path) {
+      return git.readBlob ({
+        fs,
+        dir,
+        oid,
+        path
+      });
+    },
+    writeRef: function (dir, branch, oid) {
+      return git.writeRef ({
+        fs,
+        dir,
+        ref: "refs/heads/" + branch,
+        value: oid,
+        force: true
+      });
+    },
+    resolveRef: function (dir, ref) {
+      return git.resolveRef ({
+        fs,
+        dir,
+        ref
+      });
+    },
+    listFiles: function (dir, branch) {
+      return git.listFiles ({
+        fs,
+        dir,
+        ref: branch
+      });
+    },
+    rimraf: async function (path) {
+      // try {
+      //   // First assume path is itself a file
+      //   await pfs.unlink(path)
+      //   // if that worked we're done
+      //   return
+      // } catch (err) {
+      //   // Otherwise, path must be a directory
+      //   if (err.code !== 'EISDIR') throw err
+      // }
+      // Knowing path is a directory,
+      // first, assume everything inside path is a file.
+      let files = await pfs.readdir(path);
+      for (let file of files) {
+        let child = path + '/' + file
+        try {
+          await pfs.unlink(child)
+        } catch (err) {
+          if (err.code !== 'EISDIR') throw err
+        }
+      }
+      // Assume what's left are directories and recurse.
+      let dirs = await pfs.readdir(path)
+      for (let dir of dirs) {
+        let child = path + '/' + dir
+        await rimraf(child, pfs)
+      }
+      // Finally, delete the empty directory
+      await pfs.rmdir(path)
+    },
+    getFileStateChanges: async function (commitHash1, commitHash2, dir) {
+      return git.walk({
+        fs,
+        dir,
+        trees: [git.TREE({ ref: commitHash1 }), git.TREE({ ref: commitHash2 })],
+        map: async function(filepath, [A, B]) {
+          var type = 'equal';
+          if (A === null) {
+            type = "add";
+          }
+
+          if (B === null) {
+            type = "remove";
+          }
+
+          // ignore directories
+          if (filepath === '.') {
+            return
+          }
+          if ((A !== null && (await A.type()) === 'tree')
+              ||
+              (B !== null && (await B.type()) === 'tree')) {
+            return
+          }
+
+          // generate ids
+          const Aoid = A !== null && await A.oid();
+          const Boid = B !== null && await B.oid();
+
+          if (type === "equal") {
+            // determine modification type
+            if (Aoid !== Boid) {
+              type = 'modify'
+            }
+            if (Aoid === undefined) {
+              type = 'add'
+            }
+            if (Boid === undefined) {
+              type = 'remove'
+            }
+          }
+
+          if (Aoid === undefined && Boid === undefined) {
+            console.log('Something weird happened:')
+            console.log(A)
+            console.log(B)
+          }
+
+          return {
+            path: `/${filepath}`,
+            type: type,
+          }
+        },
+      })
+    },
+    statusMatrix: async function (dir) {
+      return git.statusMatrix({ fs, dir });
+    },
+    statusMatrixChanged: async function (dir) {
+      return (await git.statusMatrix({ fs, dir }))
+        .filter(([_, head, workDir, stage]) => !(head == 1 && workDir == 1 && stage == 1));
+    },
+    getChangedFiles: async function (dir) {
+      try {
+        const FILE = 0, HEAD = 1, WORKDIR = 2;
+
+        let filenames = (await git.statusMatrix({ fs, dir }))
+            .filter(row => row[HEAD] !== row[WORKDIR])
+            .map(row => row[FILE]);
+
+        return filenames;
+      } catch (err) {
+        console.error(err);
+        return [];
+      }
+    }
+  });
+  // self.addEventListener("message", ({ data }) => console.log(data));
+}

+ 0 - 6
shadow-cljs.edn

@@ -18,9 +18,6 @@
                         :code-editor
                         :code-editor
                         {:entries    [frontend.extensions.code]
                         {:entries    [frontend.extensions.code]
                          :depends-on #{:main}}
                          :depends-on #{:main}}
-                        :age-encryption
-                        {:entries    [frontend.extensions.age-encryption]
-                         :depends-on #{:main}}
                         :excalidraw
                         :excalidraw
                         {:entries    [frontend.extensions.excalidraw]
                         {:entries    [frontend.extensions.excalidraw]
                          :depends-on #{:main}}}
                          :depends-on #{:main}}}
@@ -79,9 +76,6 @@
                                :code-editor
                                :code-editor
                                {:entries    [frontend.extensions.code]
                                {:entries    [frontend.extensions.code]
                                 :depends-on #{:main}}
                                 :depends-on #{:main}}
-                               :age-encryption
-                               {:entries    [frontend.extensions.age-encryption]
-                                :depends-on #{:main}}
                                :excalidraw
                                :excalidraw
                                {:entries    [frontend.extensions.excalidraw]
                                {:entries    [frontend.extensions.excalidraw]
                                 :depends-on #{:main}}}
                                 :depends-on #{:main}}}

+ 2 - 2
src/electron/electron/core.cljs

@@ -127,7 +127,7 @@
                 ;; TODO: ugly, replace with ls-files and filter with ".map"
                 ;; TODO: ugly, replace with ls-files and filter with ".map"
                 _ (p/all (map (fn [file]
                 _ (p/all (map (fn [file]
                                 (. fs removeSync (path/join static-dir "js" (str file ".map"))))
                                 (. fs removeSync (path/join static-dir "js" (str file ".map"))))
-                           ["main.js" "code-editor.js" "excalidraw.js" "age-encryption.js"]))]
+                           ["main.js" "code-editor.js" "excalidraw.js"]))]
           (. dialog showMessageBox (clj->js {:message (str "Export public pages and publish assets to " root-dir " successfully")})))))))
           (. dialog showMessageBox (clj->js {:message (str "Export public pages and publish assets to " root-dir " successfully")})))))))
 
 
 (defn setup-app-manager!
 (defn setup-app-manager!
@@ -208,7 +208,7 @@
                               :privileges privileges}
                               :privileges privileges}
                              {:scheme     FILE_LSP_SCHEME
                              {:scheme     FILE_LSP_SCHEME
                               :privileges privileges}]))
                               :privileges privileges}]))
-      
+
       (setup-deeplink!)
       (setup-deeplink!)
 
 
       (.on app "second-instance"
       (.on app "second-instance"

+ 2 - 1
src/main/frontend/commands.cljs

@@ -248,7 +248,8 @@
        ["Upload an asset" [[:editor/click-hidden-file-input :id]] "Upload file types like image, pdf, docx, etc.)"]
        ["Upload an asset" [[:editor/click-hidden-file-input :id]] "Upload file types like image, pdf, docx, etc.)"]
 
 
        (state/deprecated-logged?)
        (state/deprecated-logged?)
-       ["Upload an image" [[:editor/click-hidden-file-input :id]]])]
+       ["Upload an image" [[:editor/click-hidden-file-input :id]]]
+       )]
 
 
     (markdown-headings)
     (markdown-headings)
 
 

+ 18 - 28
src/main/frontend/components/commit.cljs

@@ -1,26 +1,19 @@
 (ns frontend.components.commit
 (ns frontend.components.commit
-  (:require [clojure.string :as string]
-            [electron.ipc :as ipc]
-            [frontend.handler.notification :as notification]
-            [frontend.handler.repo :as repo-handler]
+  (:require [electron.ipc :as ipc]
             [frontend.mixins :as mixins]
             [frontend.mixins :as mixins]
             [frontend.state :as state]
             [frontend.state :as state]
             [frontend.util :as util]
             [frontend.util :as util]
             [frontend.util.cursor :as cursor]
             [frontend.util.cursor :as cursor]
             [goog.dom :as gdom]
             [goog.dom :as gdom]
             [goog.object :as gobj]
             [goog.object :as gobj]
-            [promesa.core :as p]
             [rum.core :as rum]))
             [rum.core :as rum]))
 
 
 (defn commit-and-push!
 (defn commit-and-push!
   []
   []
   (let [value (gobj/get (gdom/getElement "commit-message") "value")]
   (let [value (gobj/get (gdom/getElement "commit-message") "value")]
     (when (and value (>= (count value) 1))
     (when (and value (>= (count value) 1))
-      (if (util/electron?)
-        (ipc/ipc "gitCommitAll" value)
-        (-> (repo-handler/git-commit-and-push! value)
-           (p/catch (fn [error]
-                      (notification/show! error :error false)))))
+      (when (util/electron?)
+        (ipc/ipc "gitCommitAll" value))
       (state/close-modal!))))
       (state/close-modal!))))
 
 
 (rum/defcs add-commit-message <
 (rum/defcs add-commit-message <
@@ -36,29 +29,26 @@
                       :on-enter (fn []
                       :on-enter (fn []
                                   (commit-and-push!)))))
                                   (commit-and-push!)))))
   [state _close-fn]
   [state _close-fn]
-  (let [electron? (util/electron?)]
-    #_:clj-kondo/ignore
-    (when-let [repo (state/sub :git/current-repo)]
-      [:div.w-full.mx-auto.sm:max-w-lg.sm:w-96 {:style {:padding "48px 0"}}
-       [:div.sm:flex.sm:items-start
-        [:div.mt-3.text-center.sm:mt-0.sm:text-left.mb-2
-         [:h3#modal-headline.text-lg.leading-6.font-medium
-          "Your commit message:"]]]
+  [:div.w-full.mx-auto.sm:max-w-lg.sm:w-96 {:style {:padding "48px 0"}}
+   [:div.sm:flex.sm:items-start
+    [:div.mt-3.text-center.sm:mt-0.sm:text-left.mb-2
+     [:h3#modal-headline.text-lg.leading-6.font-medium
+      "Your commit message:"]]]
 
 
-       [:input#commit-message.form-input.block.w-full.sm:text-sm.sm:leading-5.my-2
-        {:auto-focus true
-         :default-value ""}]
+   [:input#commit-message.form-input.block.w-full.sm:text-sm.sm:leading-5.my-2
+    {:auto-focus true
+     :default-value ""}]
 
 
-       [:div.mt-5.sm:mt-4.flex
-        [:span.flex.w-full.rounded-md.shadow-sm
-         [:button.inline-flex.justify-center.w-full.rounded-md.border.border-transparent.px-4.py-2.bg-indigo-600.text-base.leading-6.font-medium.text-white.shadow-sm.hover:bg-indigo-500.focus:outline-none.focus:border-indigo-700.focus:shadow-outline-indigo.transition.ease-in-out.duration-150.sm:text-sm.sm:leading-5
-          {:type "button"
-           :on-click commit-and-push!}
-          (if electron? "Commit" "Commit and push!")]]]])))
+   [:div.mt-5.sm:mt-4.flex
+    [:span.flex.w-full.rounded-md.shadow-sm
+     [:button.inline-flex.justify-center.w-full.rounded-md.border.border-transparent.px-4.py-2.bg-indigo-600.text-base.leading-6.font-medium.text-white.shadow-sm.hover:bg-indigo-500.focus:outline-none.focus:border-indigo-700.focus:shadow-outline-indigo.transition.ease-in-out.duration-150.sm:text-sm.sm:leading-5
+      {:type "button"
+       :on-click commit-and-push!}
+      "Commit"]]]])
 
 
 (defn show-commit-modal! [e]
 (defn show-commit-modal! [e]
   (when (and
   (when (and
-         (or (string/starts-with? (state/get-current-repo) "https://") (util/electron?))
+         (util/electron?)
          (not (util/input? (gobj/get e "target")))
          (not (util/input? (gobj/get e "target")))
          (not (gobj/get e "shiftKey"))
          (not (gobj/get e "shiftKey"))
          (not (gobj/get e "ctrlKey"))
          (not (gobj/get e "ctrlKey"))

+ 3 - 211
src/main/frontend/components/diff.cljs

@@ -1,39 +1,15 @@
 (ns frontend.components.diff
 (ns frontend.components.diff
   (:require [clojure.string :as string]
   (:require [clojure.string :as string]
-            [frontend.components.svg :as svg]
-            [frontend.config :as config]
             [frontend.diff :as diff]
             [frontend.diff :as diff]
-            [frontend.encrypt :as encrypt]
-            [frontend.git :as git]
-            [frontend.github :as github]
-            [frontend.handler.common :as common-handler]
             [frontend.handler.file :as file]
             [frontend.handler.file :as file]
-            [frontend.handler.git :as git-handler]
-            [frontend.handler.notification :as notification]
             [frontend.state :as state]
             [frontend.state :as state]
             [frontend.ui :as ui]
             [frontend.ui :as ui]
             [frontend.util :as util]
             [frontend.util :as util]
-            [goog.object :as gobj]
             [medley.core :as medley]
             [medley.core :as medley]
-            [promesa.core :as p]
             [rum.core :as rum]))
             [rum.core :as rum]))
 
 
-(defonce remote-hash-id (atom nil))
-(defonce diff-state (atom {}))
-(defonce commit-message (atom ""))
-;; TODO: use db :git/status
-(defonce *pushing? (atom nil))
-(defonce *edit? (atom false))
-(defonce *edit-content (atom ""))
-
-(defn- toggle-collapse?
-  [path]
-  (swap! diff-state update-in [path :collapse?] not))
-
-(defn- mark-as-resolved
-  [path]
-  (swap! diff-state assoc-in [path :resolved?] true)
-  (swap! diff-state assoc-in [path :collapse?] true))
+(defonce disk-value (atom nil))
+(defonce db-value (atom nil))
 
 
 (rum/defc diff-cp
 (rum/defc diff-cp
   [diff]
   [diff]
@@ -48,190 +24,6 @@
                     :style {:background-color bg-color}}
                     :style {:background-color bg-color}}
         value]))])
         value]))])
 
 
-(rum/defcs file < rum/reactive
-  {:will-mount (fn [state]
-                 (let [*local-content (atom "")
-                       [repo _ path & _others] (:rum/args state)]
-                   (p/let [content (file/load-file repo path )]
-                     (reset! *local-content content))
-                   (assoc state ::local-content *local-content)))}
-  [state repo type path contents remote-oid]
-  (let [local-content (rum/react (get state ::local-content))
-        {:keys [collapse? resolved?]} (util/react (rum/cursor diff-state path))
-        edit? (util/react *edit?)
-        delete? (= type "remove")]
-    [:div.cp__diff-file
-     [:div.cp__diff-file-header
-      [:a.mr-2 {:on-click (fn [] (toggle-collapse? path))}
-       (if collapse?
-         (svg/arrow-right-2)
-         (svg/arrow-down))]
-      [:span.cp__diff-file-header-content {:style {:word-break "break-word"}}
-       path]
-      (when resolved?
-        [:span.text-green-600
-         {:dangerouslySetInnerHTML
-          {:__html "&#10003;"}}])]
-
-     (let [content (get contents path)]
-       (if (or (and delete? (nil? content))
-               content)
-         (when (not= content local-content)
-           (let [local-content (or local-content "")
-                 content (or content "")
-                 diff (medley/indexed (diff/diff local-content content))
-                 diff? (some (fn [[_idx {:keys [added removed]}]]
-                               (or added removed))
-                             diff)]
-             [:div.pre-line-white-space.p-2 {:class (when collapse? "hidden")
-                                             :style {:overflow "auto"}}
-              (if edit?
-                [:div.grid.grid-cols-2.gap-1
-                 (diff-cp diff)
-                 (ui/textarea
-                  {:default-value local-content
-                   :on-change (fn [e]
-                                (reset! *edit-content (util/evalue e)))})]
-                (diff-cp diff))
-
-              (cond
-                edit?
-                [:div.mt-2
-                 (ui/button "Save"
-                   :on-click
-                   (fn []
-                     (reset! *edit? false)
-                     (let [new-content @*edit-content]
-                       (file/alter-file repo path new-content
-                                        {:commit? false
-                                         :re-render-root? true})
-                       (swap! state/state
-                              assoc-in [:github/contents repo remote-oid path] new-content)
-                       (mark-as-resolved path))))]
-
-                diff?
-                [:div.mt-2
-                 (ui/button "Use remote"
-                   :on-click
-                   (fn []
-                     ;; overwrite the file
-                     (if delete?
-                       (file/remove-file! repo path)
-                       (file/alter-file repo path content
-                                        {:commit? false
-                                         :re-render-root? true}))
-                     (mark-as-resolved path))
-                   :background "green")
-
-                 [:span.pl-2.pr-2 "or"]
-
-                 (ui/button "Keep local"
-                   :on-click
-                   (fn []
-                     ;; overwrite the file
-                     (swap! state/state
-                            assoc-in [:github/contents repo remote-oid path] local-content)
-                     (mark-as-resolved path))
-                   :background "pink")
-
-                 [:span.pl-2.pr-2 "or"]
-
-                 (ui/button "Edit"
-                   :on-click
-                   (fn []
-                     (reset! *edit? true)))]
-
-                :else
-                nil)]))
-         [:div "loading..."]))]))
-
-;; TODO: `n` shortcut for next diff, `p` for previous diff
-
-
-(rum/defc diff <
-  rum/reactive
-  {:will-mount
-   (fn [state]
-     (when-let [repo (state/get-current-repo)]
-       (p/let [remote-latest-commit (common-handler/get-remote-ref repo)
-               local-latest-commit (common-handler/get-ref repo)
-               result (git/get-diffs repo local-latest-commit remote-latest-commit)
-               token (common-handler/get-github-token repo)]
-         (reset! state/diffs result)
-         (reset! remote-hash-id remote-latest-commit)
-         (doseq [{:keys [type path]} result]
-           (when (contains? #{"add" "modify"}
-                            type)
-             (github/get-content
-              token
-              repo
-              path
-              remote-latest-commit
-              (fn [{:keys [repo-url path content]}]
-                (p/let [content (encrypt/decrypt content)]
-                  (swap! state/state
-                         assoc-in [:github/contents repo-url remote-latest-commit path] content)))
-              (fn [response]
-                (when (= (gobj/get response "status") 401)
-                  (notification/show!
-                   [:span.mr-2
-                    (util/format
-                     "Please make sure that you've installed the logseq app for the repo %s on GitHub. "
-                     repo)
-                    (ui/button
-                      "Install Logseq on GitHub"
-                      :href (str "https://github.com/apps/" config/github-app-name "/installations/new"))]
-                   :error
-                   false))))))))
-     state)
-   :will-unmount
-   (fn [state]
-     (reset! state/diffs nil)
-     (reset! remote-hash-id nil)
-     (reset! diff-state {})
-     (reset! commit-message "")
-     (reset! *pushing? nil)
-     (reset! *edit? false)
-     (reset! *edit-content "")
-     state)}
-  []
-  (let [diffs (util/react state/diffs)
-        remote-oid (util/react remote-hash-id)
-        repo (state/get-current-repo)
-        contents (when remote-oid (state/sub [:github/contents repo remote-oid]))
-        pushing? (util/react *pushing?)]
-    [:div#diffs {:style {:margin-bottom 200}}
-     [:h1.title "Diff"]
-     (cond
-       (false? pushing?)
-       [:div "No diffs"]
-
-       (seq diffs)
-       [:div#diffs-body
-        (for [{:keys [type path]} diffs]
-          (rum/with-key (file repo type path contents remote-oid)
-            path))
-        [:div
-         (ui/textarea
-          {:placeholder "Commit message (optional)"
-           :on-change (fn [e]
-                        (reset! commit-message (util/evalue e)))})
-         (if pushing?
-           [:span (ui/loading "Pushing")]
-           (ui/button "Commit and push"
-             :on-click
-             (fn []
-               (let [commit-message (if (string/blank? @commit-message)
-                                      "Merge"
-                                      @commit-message)]
-                 (reset! *pushing? true)
-                 (git-handler/commit-and-force-push! commit-message *pushing?)))))]]
-
-       :else
-       [:div "No diffs"])]))
-
-(defonce disk-value (atom nil))
-(defonce db-value (atom nil))
 (rum/defcs local-file < rum/reactive
 (rum/defcs local-file < rum/reactive
   {:will-unmount (fn [state]
   {:will-unmount (fn [state]
                    (reset! disk-value nil)
                    (reset! disk-value nil)
@@ -264,7 +56,7 @@
         :title-trigger? true}))
         :title-trigger? true}))
 
 
     [:hr]
     [:hr]
-    
+
     [:div.flex.flex-col.mt-4.sm:flex-row
     [:div.flex.flex-col.mt-4.sm:flex-row
      [:div.flex-1
      [:div.flex-1
       [:div.mb-2 "On disk:"]
       [:div.mb-2 "On disk:"]

+ 0 - 6
src/main/frontend/components/diff.css

@@ -1,9 +1,3 @@
-#diffs-body {
-  textarea {
-    color: var(--ls-primary-text-color, #a4b5b6);
-  }
-}
-
 .cp__diff-file {
 .cp__diff-file {
     @apply mb-3;
     @apply mb-3;
 
 

+ 0 - 176
src/main/frontend/components/encryption.cljs

@@ -1,176 +0,0 @@
-(ns frontend.components.encryption
-  (:require [clojure.string :as string]
-            [frontend.context.i18n :refer [t]]
-            [frontend.encrypt :as e]
-            [frontend.handler.metadata :as metadata-handler]
-            [frontend.handler.notification :as notification]
-            [frontend.state :as state]
-            [frontend.ui :as ui]
-            [frontend.util :as util]
-            [promesa.core :as p]
-            [rum.core :as rum]))
-
-(rum/defcs encryption-dialog-inner <
-  (rum/local false ::reveal-secret-phrase?)
-  [state repo-url close-fn]
-  (let [reveal-secret-phrase? (get state ::reveal-secret-phrase?)
-        public-key (e/get-public-key repo-url)
-        private-key (e/get-secret-key repo-url)]
-    [:div
-     [:div.sm:flex.sm:items-start
-      [:div.mt-3.text-center.sm:mt-0.sm:text-left
-       [:h3#modal-headline.text-lg.leading-6.font-medium
-        "This graph is encrypted with " [:a {:href "https://age-encryption.org/" :target "_blank" :rel "noopener"} "age-encryption.org/v1"]]]]
-
-     [:div.mt-1
-      [:div.max-w-2xl.rounded-md.shadow-sm.sm:max-w-xl
-       [:div.cursor-pointer.block.w-full.rounded-sm.p-2
-        {:on-click (fn []
-                     (when (not @reveal-secret-phrase?)
-                       (reset! reveal-secret-phrase? true)))}
-        [:div.font-medium "Public Key:"]
-        [:div.font-mono.select-all.break-all public-key]
-        (if @reveal-secret-phrase?
-          [:div
-           [:div.mt-1.font-medium "Private Key:"]
-           [:div.font-mono.select-all.break-all private-key]]
-          [:div.underline "click to view the private key"])]]]
-
-     [:div.mt-5.sm:mt-4.sm:flex.sm:flex-row-reverse
-      [:span.mt-3.flex.w-full.rounded-md.shadow-sm.sm:mt-0.sm:w-auto
-       [:button.inline-flex.justify-center.w-full.rounded-md.border.border-gray-300.px-4.py-2.bg-white.text-base.leading-6.font-medium.text-gray-700.shadow-sm.hover:text-gray-500.focus:outline-none.focus:border-blue-300.focus:shadow-outline-blue.transition.ease-in-out.duration-150.sm:text-sm.sm:leading-5
-        {:type "button"
-         :on-click close-fn}
-        (t :close)]]]]))
-
-(defn encryption-dialog
-  [repo-url]
-  (fn [close-fn]
-    (encryption-dialog-inner repo-url close-fn)))
-
-(rum/defcs input-password-inner <
-  (rum/local "" ::password)
-  (rum/local "" ::password-confirm)
-  [state repo-url close-fn]
-  (let [password (get state ::password)
-        password-confirm (get state ::password-confirm)]
-    [:div
-     [:div.sm:flex.sm:items-start
-      [:div.mt-3.text-center.sm:mt-0.sm:text-left
-       [:h3#modal-headline.text-lg.leading-6.font-medium.font-bold
-        "Enter a password"]]]
-
-     (ui/admonition
-      :warning
-      [:div.opacity-70
-       "Choose a strong and hard to guess password.\nIf you lose your password, all the data can't be decrypted!! Please make sure you remember the password you have set, or you can keep a secure backup of the password."])
-     [:input.form-input.block.w-full.sm:text-sm.sm:leading-5.my-2
-      {:type "password"
-       :placeholder "Password"
-       :auto-focus true
-       :on-change (fn [e]
-                    (reset! password (util/evalue e)))}]
-     [:input.form-input.block.w-full.sm:text-sm.sm:leading-5.my-2
-      {:type "password"
-       :placeholder "Re-enter the password"
-       :on-change (fn [e]
-                    (reset! password-confirm (util/evalue e)))}]
-
-     [:div.mt-5.sm:mt-4.sm:flex.sm:flex-row-reverse
-      [:span.flex.w-full.rounded-md.shadow-sm.sm:ml-3.sm:w-auto
-       [:button.inline-flex.justify-center.w-full.rounded-md.border.border-transparent.px-4.py-2.bg-indigo-600.text-base.leading-6.font-medium.text-white.shadow-sm.hover:bg-indigo-500.focus:outline-none.focus:border-indigo-700.focus:shadow-outline-indigo.transition.ease-in-out.duration-150.sm:text-sm.sm:leading-5
-        {:type "button"
-         :on-click (fn []
-                     (let [value @password]
-                       (cond
-                         (string/blank? value)
-                         nil
-
-                         (not= @password @password-confirm)
-                         (notification/show! "The passwords are not matched." :error)
-
-                         :else
-                         (p/let [keys (e/generate-key-pair-and-save! repo-url)
-                                 db-encrypted-secret (e/encrypt-with-passphrase value keys)]
-                           (metadata-handler/set-db-encrypted-secret! db-encrypted-secret)
-                           (close-fn true)))))}
-        "Submit"]]]]))
-
-(defn input-password
-  [repo-url close-fn]
-  (fn [_close-fn]
-    (input-password-inner repo-url close-fn)))
-
-(rum/defcs encryption-setup-dialog-inner
-  [state repo-url close-fn]
-  [:div
-   [:div.sm:flex.sm:items-start
-    [:div.mt-3.text-center.sm:mt-0.sm:text-left
-     [:h3#modal-headline.text-lg.leading-6.font-medium
-      "Do you want to create an encrypted graph?"]]]
-
-   [:div.mt-5.sm:mt-4.sm:flex.sm:flex-row-reverse
-    [:span.flex.w-full.rounded-md.shadow-sm.sm:ml-3.sm:w-auto
-     [:button.inline-flex.justify-center.w-full.rounded-md.border.border-transparent.px-4.py-2.bg-indigo-600.text-base.leading-6.font-medium.text-white.shadow-sm.hover:bg-indigo-500.focus:outline-none.focus:border-indigo-700.focus:shadow-outline-indigo.transition.ease-in-out.duration-150.sm:text-sm.sm:leading-5
-      {:type "button"
-       :on-click (fn []
-                   (state/set-modal! (input-password repo-url close-fn)))}
-      (t :yes)]]
-    [:span.mt-3.flex.w-full.rounded-md.shadow-sm.sm:mt-0.sm:w-auto
-     [:button.inline-flex.justify-center.w-full.rounded-md.border.border-gray-300.px-4.py-2.bg-white.text-base.leading-6.font-medium.text-gray-700.shadow-sm.hover:text-gray-500.focus:outline-none.focus:border-blue-300.focus:shadow-outline-blue.transition.ease-in-out.duration-150.sm:text-sm.sm:leading-5
-      {:type "button"
-       :on-click (fn [] (close-fn false))}
-      (t :no)]]]])
-
-(defn encryption-setup-dialog
-  [repo-url close-fn]
-  (fn [close-modal-fn]
-    (let [close-fn (fn [encrypted?]
-                     (close-fn encrypted?)
-                     (close-modal-fn))]
-      (encryption-setup-dialog-inner repo-url close-fn))))
-
-(rum/defcs encryption-input-secret-inner <
-  (rum/local "" ::secret)
-  (rum/local false ::loading)
-  [state _repo-url db-encrypted-secret close-fn]
-  (let [secret (::secret state)
-        loading (::loading state)]
-    [:div
-     [:div.sm:flex.sm:items-start
-      [:div.mt-3.text-center.sm:mt-0.sm:text-left
-       [:h3#modal-headline.text-lg.leading-6.font-medium
-        "Enter your password"]]]
-
-     [:input.form-input.block.w-full.sm:text-sm.sm:leading-5.my-2
-      {:type "password"
-       :auto-focus true
-       :on-change (fn [e]
-                    (reset! secret (util/evalue e)))}]
-
-     [:div.mt-5.sm:mt-4.sm:flex.sm:flex-row-reverse
-      [:span.flex.w-full.rounded-md.shadow-sm.sm:ml-3.sm:w-auto
-       [:button.inline-flex.justify-center.w-full.rounded-md.border.border-transparent.px-4.py-2.bg-indigo-600.text-base.leading-6.font-medium.text-white.shadow-sm.hover:bg-indigo-500.focus:outline-none.focus:border-indigo-700.focus:shadow-outline-indigo.transition.ease-in-out.duration-150.sm:text-sm.sm:leading-5
-        {:type "button"
-         :on-click (fn []
-                     (reset! loading true)
-                     (let [value @secret]
-                       (when-not (string/blank? value) ; TODO: length or other checks
-                         (let [repo (state/get-current-repo)]
-                           (p/do!
-                            (-> (e/decrypt-with-passphrase value db-encrypted-secret)
-                                (p/then (fn [keys]
-                                          (e/save-key-pair! repo keys)
-                                          (close-fn true)
-                                          (state/set-state! :encryption/graph-parsing? false)))
-                                (p/catch #(notification/show! "The password is not matched." :warning true))
-                                (p/finally #(reset! loading false))))))))}
-        (if @loading (ui/loading "Decrypting") "Decrypt")]]]]))
-
-(defn encryption-input-secret-dialog
-  [repo-url db-encrypted-secret close-fn]
-  (fn [close-modal-fn]
-    (let [close-fn (fn [encrypted?]
-                     (close-fn encrypted?)
-                     (close-modal-fn))]
-      (encryption-input-secret-inner repo-url db-encrypted-secret close-fn))))

+ 0 - 3
src/main/frontend/components/header.cljs

@@ -4,7 +4,6 @@
             [frontend.components.export :as export]
             [frontend.components.export :as export]
             [frontend.components.page-menu :as page-menu]
             [frontend.components.page-menu :as page-menu]
             [frontend.components.plugins :as plugins]
             [frontend.components.plugins :as plugins]
-            [frontend.components.repo :as repo]
             [frontend.components.right-sidebar :as sidebar]
             [frontend.components.right-sidebar :as sidebar]
             [frontend.components.svg :as svg]
             [frontend.components.svg :as svg]
             [frontend.config :as config]
             [frontend.config :as config]
@@ -275,8 +274,6 @@
       (when-not (mobile-util/is-native-platform?)
       (when-not (mobile-util/is-native-platform?)
         (new-block-mode))
         (new-block-mode))
 
 
-      (repo/sync-status current-repo)
-
       (when show-open-folder?
       (when show-open-folder?
         [:a.text-sm.font-medium.button.add-graph-btn.flex.items-center
         [:a.text-sm.font-medium.button.add-graph-btn.flex.items-center
          {:on-click #(route-handler/redirect! {:to :repo-add})}
          {:on-click #(route-handler/redirect! {:to :repo-add})}

+ 2 - 108
src/main/frontend/components/repo.cljs

@@ -1,15 +1,9 @@
 (ns frontend.components.repo
 (ns frontend.components.repo
   (:require [clojure.string :as string]
   (:require [clojure.string :as string]
-            [frontend.components.commit :as commit]
-            [frontend.components.encryption :as encryption]
-            [frontend.components.svg :as svg]
             [frontend.components.widgets :as widgets]
             [frontend.components.widgets :as widgets]
             [frontend.config :as config]
             [frontend.config :as config]
             [frontend.context.i18n :refer [t]]
             [frontend.context.i18n :refer [t]]
             [frontend.db :as db]
             [frontend.db :as db]
-            [frontend.encrypt :as e]
-            [frontend.handler.common :as common-handler]
-            [frontend.handler.export :as export-handler]
             [frontend.handler.page :as page-handler]
             [frontend.handler.page :as page-handler]
             [frontend.handler.repo :as repo-handler]
             [frontend.handler.repo :as repo-handler]
             [frontend.handler.web.nfs :as nfs-handler]
             [frontend.handler.web.nfs :as nfs-handler]
@@ -17,7 +11,6 @@
             [frontend.state :as state]
             [frontend.state :as state]
             [frontend.ui :as ui]
             [frontend.ui :as ui]
             [frontend.util :as util]
             [frontend.util :as util]
-            [frontend.version :as version]
             [reitit.frontend.easy :as rfe]
             [reitit.frontend.easy :as rfe]
             [rum.core :as rum]
             [rum.core :as rum]
             [frontend.mobile.util :as mobile-util]
             [frontend.mobile.util :as mobile-util]
@@ -44,9 +37,7 @@
       [:div#graphs
       [:div#graphs
        [:h1.title "All Graphs"]
        [:h1.title "All Graphs"]
        [:p.ml-2.opacity-70
        [:p.ml-2.opacity-70
-        (if (state/github-authed?)
-          "A \"graph\" in Logseq could be either a local directory or a git repo."
-          "A \"graph\" in Logseq means a local directory.")]
+        "A \"graph\" in Logseq means a local directory."]
 
 
        [:div.pl-1.content.mt-3
        [:div.pl-1.content.mt-3
         [:div.flex.flex-row.my-4
         [:div.flex.flex-row.my-4
@@ -55,12 +46,7 @@
            [:div.mr-8
            [:div.mr-8
             (ui/button
             (ui/button
               (t :open-a-directory)
               (t :open-a-directory)
-              :on-click #(page-handler/ls-dir-files! shortcut/refresh!))])
-         (when (and (state/deprecated-logged?) (not (util/electron?)))
-           (ui/button
-             "Add another git repo"
-             :href (rfe/href :repo-add nil {:graph-types "github"})
-             :intent "logseq"))]
+              :on-click #(page-handler/ls-dir-files! shortcut/refresh!))])]
         (for [{:keys [id url] :as repo} repos]
         (for [{:keys [id url] :as repo} repos]
           (let [local? (config/local-db? url)]
           (let [local? (config/local-db? url)]
             [:div.flex.justify-between.mb-4 {:key id}
             [:div.flex.justify-between.mb-4 {:key id}
@@ -74,11 +60,6 @@
                     :href url}
                     :href url}
                 (db/get-repo-path url)])
                 (db/get-repo-path url)])
              [:div.controls
              [:div.controls
-              (when (e/encrypted-db? url)
-                [:a.control {:title "Show encryption information about this graph"
-                             :on-click (fn []
-                                         (state/set-modal! (encryption/encryption-dialog url)))}
-                 "🔐"])
               [:a.text-gray-400.ml-4.font-medium.text-sm
               [:a.text-gray-400.ml-4.font-medium.text-sm
                {:title "No worries, unlink this graph will clear its cache only, it does not remove your files on the disk."
                {:title "No worries, unlink this graph will clear its cache only, it does not remove your files on the disk."
                 :on-click (fn []
                 :on-click (fn []
@@ -90,93 +71,6 @@
   (page-handler/create-today-journal!)
   (page-handler/create-today-journal!)
   (shortcut/refresh!))
   (shortcut/refresh!))
 
 
-(rum/defc sync-status < rum/reactive
-  {:did-mount (fn [state]
-                (js/setTimeout common-handler/check-changed-files-status 1000)
-                state)}
-  [repo]
-  (when (and repo
-             (string/starts-with? repo "https://"))
-    (let [changed-files (state/sub [:repo/changed-files repo])
-          should-push? (seq changed-files)
-          git-status (state/sub [:git/status repo])
-          pushing? (= :pushing git-status)
-          pulling? (= :pulling git-status)
-          git-failed? (contains?
-                       #{:push-failed
-                         :clone-failed
-                         :checkout-failed
-                         :fetch-failed
-                         :merge-failed}
-                       git-status)
-          push-failed? (= :push-failed git-status)
-          last-pulled-at (db/sub-key-value repo :git/last-pulled-at)
-          ;; db-persisted? (state/sub [:db/persisted? repo])
-          editing? (seq (state/sub :editor/editing?))]
-      [:div.flex-row.flex.items-center.cp__repo-indicator
-       (when pushing? svg/loading)
-       (ui/dropdown
-        (fn [{:keys [toggle-fn]}]
-          [:div.cursor.w-2.h-2.sync-status.mr-2
-           {:class (cond
-                     git-failed?
-                     "bg-red-500"
-                     (or
-                      ;; (not db-persisted?)
-                      editing?
-                      should-push? pushing?)
-                     "bg-orange-400"
-                     :else
-                     "bg-green-600")
-            :style {:border-radius "50%"
-                    :margin-top 2}
-            :on-mouse-over
-            (fn [_e]
-              (toggle-fn)
-              (js/setTimeout common-handler/check-changed-files-status 0))}])
-        (fn [{:keys [toggle-fn]}]
-          [:div.p-2.rounded-md.shadow-xs.bg-base-3.flex.flex-col.sync-content
-           {:on-mouse-leave toggle-fn}
-           [:div
-            [:div
-             (cond
-               push-failed?
-               [:p (t :git/push-failed)]
-               (and should-push? (seq changed-files))
-               [:div.changes
-                [:ul.overflow-y-auto {:style {:max-height 250}}
-                 (for [file changed-files]
-                   [:li {:key (str "sync-" file)}
-                    [:div.flex.flex-row.justify-between.align-items
-                     [:a {:href (rfe/href :file {:path file})}
-                      file]
-                     [:a.ml-4.text-sm.mt-1
-                      {:on-click (fn [_e]
-                                   (export-handler/download-file! file))}
-                      [:span (t :download)]]]])]]
-               :else
-               [:p (t :git/local-changes-synced)])]
-            ;; [:a.text-sm.font-bold {:href "/diff"} "Check diff"]
-            [:div.flex.flex-row.justify-between.align-items.mt-2
-             (ui/button (t :git/push)
-               :on-click (fn [] (state/set-modal! commit/add-commit-message)))
-             (when pushing? svg/loading)]]
-           [:hr]
-           [:div
-            (when-not (string/blank? last-pulled-at)
-              [:p {:style {:font-size 12}} (t :git/last-pull)
-               (str ": " last-pulled-at)])
-            [:div.flex.flex-row.justify-between.align-items
-             (ui/button (t :git/pull)
-               :on-click (fn [] (repo-handler/pull-current-repo)))
-             (when pulling? svg/loading)]
-            [:a.mt-5.text-sm.opacity-50.block
-             {:on-click (fn []
-                          (export-handler/export-repo-as-zip! repo))}
-             (t :repo/download-zip)]
-            [:p.pt-2.text-sm.opacity-50
-             (t :git/version) (str " " version/version)]]]))])))
-
 (defn- check-multiple-windows?
 (defn- check-multiple-windows?
   [state]
   [state]
   (when (util/electron?)
   (when (util/electron?)

+ 2 - 43
src/main/frontend/components/settings.cljs

@@ -390,14 +390,6 @@
 ;;             (let [value (not enable-block-timestamps?)]
 ;;             (let [value (not enable-block-timestamps?)]
 ;;               (config-handler/set-config! :feature/enable-block-timestamps? value)))))
 ;;               (config-handler/set-config! :feature/enable-block-timestamps? value)))))
 
 
-(defn encryption-row [t enable-encryption?]
-  (toggle "enable_encryption"
-          (t :settings-page/enable-encryption)
-          enable-encryption?
-          #(let [value (not enable-encryption?)]
-             (config-handler/set-config! :feature/enable-encryption? value))
-          [:div.text-sm.opacity-50 "⚠️ This feature is experimental"]))
-
 (rum/defc keyboard-shortcuts-row [t]
 (rum/defc keyboard-shortcuts-row [t]
   (row-with-button-action
   (row-with-button-action
     {:left-label   (t :settings-page/customize-shortcuts)
     {:left-label   (t :settings-page/customize-shortcuts)
@@ -552,7 +544,6 @@
         preferred-workflow (state/get-preferred-workflow)
         preferred-workflow (state/get-preferred-workflow)
         enable-timetracking? (state/enable-timetracking?)
         enable-timetracking? (state/enable-timetracking?)
         enable-journals? (state/enable-journals? current-repo)
         enable-journals? (state/enable-journals? current-repo)
-        enable-encryption? (state/enable-encryption? current-repo)
         enable-all-pages-public? (state/all-pages-public?)
         enable-all-pages-public? (state/all-pages-public?)
         logical-outdenting? (state/logical-outdenting?)
         logical-outdenting? (state/logical-outdenting?)
         enable-tooltip? (state/enable-tooltip?)
         enable-tooltip? (state/enable-tooltip?)
@@ -587,7 +578,6 @@
             :on-key-press  (fn [e]
             :on-key-press  (fn [e]
                              (when (= "Enter" (util/ekey e))
                              (when (= "Enter" (util/ekey e))
                                (update-home-page e)))}]]]])
                                (update-home-page e)))}]]]])
-     (encryption-row t enable-encryption?)
      (enable-all-pages-public-row t enable-all-pages-public?)
      (enable-all-pages-public-row t enable-all-pages-public?)
      (zotero-settings-row t)
      (zotero-settings-row t)
      (auto-push-row t current-repo enable-git-auto-push?)]))
      (auto-push-row t current-repo enable-git-auto-push?)]))
@@ -616,9 +606,7 @@
   [_state]
   [_state]
   (let [instrument-disabled? (state/sub :instrument/disabled?)
   (let [instrument-disabled? (state/sub :instrument/disabled?)
         developer-mode? (state/sub [:ui/developer-mode?])
         developer-mode? (state/sub [:ui/developer-mode?])
-        cors-proxy (state/sub [:me :cors_proxy])
-        https-agent-opts (state/sub [:electron/user-cfgs :settings/agent])
-        logged? (state/deprecated-logged?)]
+        https-agent-opts (state/sub [:electron/user-cfgs :settings/agent])]
     [:div.panel-wrap.is-advanced
     [:div.panel-wrap.is-advanced
      (when (and util/mac? (util/electron?)) (app-auto-update-row t))
      (when (and util/mac? (util/electron?)) (app-auto-update-row t))
      (usage-diagnostics-row t instrument-disabled?)
      (usage-diagnostics-row t instrument-disabled?)
@@ -629,36 +617,7 @@
 
 
      (ui/admonition
      (ui/admonition
        :warning
        :warning
-       [:p "Clearing the cache will discard open graphs. You will lose unsaved changes."])
-
-     (when logged?
-       [:div
-        [:div.mt-6.sm:mt-5.sm:grid.sm:grid-cols-3.sm:gap-4.sm:items-center.sm:pt-5
-         [:label.block.text-sm.font-medium.leading-5.sm:mt-px..opacity-70
-          {:for "cors"}
-          (t :settings-page/custom-cors-proxy-server)]
-         [:div.mt-1.sm:mt-0.sm:col-span-2
-          [:div.max-w-lg.rounded-md.sm:max-w-xs
-           [:input#pat.form-input.is-small.transition.duration-150.ease-in-out
-            {:default-value cors-proxy
-             :on-blur       (fn [event]
-                              (when-let [server (util/evalue event)]
-                                (user-handler/set-cors! server)
-                                (notification/show! "Custom CORS proxy updated successfully!" :success)))
-             :on-key-press  (fn [event]
-                              (let [k (gobj/get event "key")]
-                                (when (= "Enter" k)
-                                  (when-let [server (util/evalue event)]
-                                    (user-handler/set-cors! server)
-                                    (notification/show! "Custom CORS proxy updated successfully!" :success)))))}]]]]
-        (ui/admonition
-          :important
-          [:p (t :settings-page/dont-use-other-peoples-proxy-servers)
-           [:a {:href   "https://github.com/isomorphic-git/cors-proxy"
-                :target "_blank"}
-            "https://github.com/isomorphic-git/cors-proxy"]])])
-
-     ]))
+       [:p "Clearing the cache will discard open graphs. You will lose unsaved changes."])]))
 
 
 (rum/defcs settings
 (rum/defcs settings
   < (rum/local [:general :general] ::active)
   < (rum/local [:general :general] ::active)

+ 0 - 28
src/main/frontend/components/svg.cljs

@@ -1,34 +1,6 @@
 (ns frontend.components.svg
 (ns frontend.components.svg
   (:require [rum.core :as rum]))
   (:require [rum.core :as rum]))
 
 
-(rum/defc arrow-down
-  []
-  [:svg
-   {:aria-hidden "true"
-    :height      "16"
-    :width       "10"
-    :version     "1.1"
-    :view-box    "0 0 10 16"
-    :fill        "currentColor"
-    :display     "inline-block"}
-   [:path
-    {:d         "M5 11L0 6l1.5-1.5L5 8.25 8.5 4.5 10 6l-5 5z"
-     :fill-rule "evenodd"}]])
-
-(rum/defc arrow-right-2
-  []
-  [:svg
-   {:aria-hidden "true"
-    :height      "16"
-    :width       "10"
-    :version     "1.1"
-    :view-box    "0 0 10 16"
-    :fill        "currentColor"
-    :display     "inline-block"}
-   [:path
-    {:d         "M7.5 8l-5 5L1 11.5 4.75 8 1 4.5 2.5 3l5 5z"
-     :fill-rule "evenodd"}]])
-
 (defonce arrow-right-v2
 (defonce arrow-right-v2
          [:svg.h-3.w-3
          [:svg.h-3.w-3
           {:version  "1.1"
           {:version  "1.1"

+ 0 - 16
src/main/frontend/config.cljs

@@ -65,14 +65,6 @@
 
 
 (def github-app-name (if dev? GITHUB_APP_NAME "logseq"))
 (def github-app-name (if dev? GITHUB_APP_NAME "logseq"))
 
 
-(defn git-pull-secs
-  []
-  (or 60 (get-in @state/state [:config :git-pull-secs])))
-
-(defn git-push-secs
-  []
-  (or 10 (get-in @state/state [:config :git-push-secs])))
-
 (defn text-formats
 (defn text-formats
   []
   []
   (let [config-formats (some->> (get-in @state/state [:config :text-formats])
   (let [config-formats (some->> (get-in @state/state [:config :text-formats])
@@ -293,7 +285,6 @@
 (def config-file "config.edn")
 (def config-file "config.edn")
 (def custom-css-file "custom.css")
 (def custom-css-file "custom.css")
 (def custom-js-file "custom.js")
 (def custom-js-file "custom.js")
-(def metadata-file "metadata.edn")
 (def pages-metadata-file "pages-metadata.edn")
 (def pages-metadata-file "pages-metadata.edn")
 
 
 (def config-default-content (rc/inline "config.edn"))
 (def config-default-content (rc/inline "config.edn"))
@@ -390,13 +381,6 @@
    (when repo
    (when repo
      (get-file-path repo (str app-name "/" config-file)))))
      (get-file-path repo (str app-name "/" config-file)))))
 
 
-(defn get-metadata-path
-  ([]
-   (get-metadata-path (state/get-current-repo)))
-  ([repo]
-   (when repo
-     (get-file-path repo (str app-name "/" metadata-file)))))
-
 (defn get-pages-metadata-path
 (defn get-pages-metadata-path
   ([]
   ([]
    (get-pages-metadata-path (state/get-current-repo)))
    (get-pages-metadata-path (state/get-current-repo)))

+ 2 - 5
src/main/frontend/db.cljs

@@ -167,8 +167,7 @@
           db-conn (d/create-conn db-schema/schema)
           db-conn (d/create-conn db-schema/schema)
           _ (swap! conns assoc db-name db-conn)
           _ (swap! conns assoc db-name db-conn)
           stored (db-persist/get-serialized-graph db-name)
           stored (db-persist/get-serialized-graph db-name)
-          logged? (:name me)
-          _ (if stored
+          _ (when stored
               (let [stored-db (try (string->db stored)
               (let [stored-db (try (string->db stored)
                                    (catch js/Error _e
                                    (catch js/Error _e
                                      (js/console.warn "Invalid graph cache")
                                      (js/console.warn "Invalid graph cache")
@@ -179,9 +178,7 @@
                     db (if (old-schema? attached-db)
                     db (if (old-schema? attached-db)
                          (db-migrate/migrate attached-db)
                          (db-migrate/migrate attached-db)
                          attached-db)]
                          attached-db)]
-                (conn/reset-conn! db-conn db))
-              (when logged?
-                (d/transact! db-conn [(me-tx (d/db db-conn) me)])))]
+                (conn/reset-conn! db-conn db)))]
     (d/transact! db-conn [{:schema/version db-schema/version}])))
     (d/transact! db-conn [{:schema/version db-schema/version}])))
 
 
 (defn restore!
 (defn restore!

+ 0 - 5
src/main/frontend/db_schema.cljs

@@ -9,13 +9,8 @@
    :db/type         {}
    :db/type         {}
    :db/ident        {:db/unique :db.unique/identity}
    :db/ident        {:db/unique :db.unique/identity}
 
 
-   :db/encrypted?    {}
-   :db/encryption-keys {}
-
    ;; user
    ;; user
-   :me/name {}
    :me/email {}
    :me/email {}
-   :me/avatar {}
 
 
    ;; Git
    ;; Git
    :repo/url {:db/unique :db.unique/identity}
    :repo/url {:db/unique :db.unique/identity}

+ 0 - 80
src/main/frontend/dicts.cljc

@@ -120,10 +120,6 @@
         :left-side-bar/nav-favorites "Favorites"
         :left-side-bar/nav-favorites "Favorites"
         :left-side-bar/nav-shortcuts "Shortcuts"
         :left-side-bar/nav-shortcuts "Shortcuts"
         :left-side-bar/nav-recent-pages "Recent"
         :left-side-bar/nav-recent-pages "Recent"
-        :git/set-access-token "Set GitHub personal access token"
-        :git/token-is-encrypted "The token will be encrypted and stored in the browser local storage"
-        :git/token-server "The server will never store it"
-        :git/create-personal-access-token "How to create a GitHub personal access token?"
         :git/push "Push now"
         :git/push "Push now"
         :git/push-failed "Push failed!"
         :git/push-failed "Push failed!"
         :git/local-changes-synced "All local changes are synced!"
         :git/local-changes-synced "All local changes are synced!"
@@ -252,15 +248,12 @@
         :settings-page/enable-tooltip "Tooltips"
         :settings-page/enable-tooltip "Tooltips"
         :settings-page/enable-journals "Journals"
         :settings-page/enable-journals "Journals"
         :settings-page/enable-all-pages-public "All pages public when publishing"
         :settings-page/enable-all-pages-public "All pages public when publishing"
-        :settings-page/enable-encryption "Encryption"
         :settings-page/customize-shortcuts "Keyboard shortcuts"
         :settings-page/customize-shortcuts "Keyboard shortcuts"
         :settings-page/shortcut-settings "Customize shortcuts"
         :settings-page/shortcut-settings "Customize shortcuts"
         :settings-page/home-default-page "Set the default home page"
         :settings-page/home-default-page "Set the default home page"
         :settings-page/enable-block-time "Block timestamps"
         :settings-page/enable-block-time "Block timestamps"
-        :settings-page/dont-use-other-peoples-proxy-servers "Don't use other people's proxy servers. It's very dangerous, which could make your token and notes stolen. Logseq will not be responsible for this loss if you use other people's proxy servers. You can deploy it yourself, check "
         :settings-page/clear-cache "Clear cache"
         :settings-page/clear-cache "Clear cache"
         :settings-page/clear "Clear"
         :settings-page/clear "Clear"
-        :settings-page/custom-cors-proxy-server "Custom CORS proxy server"
         :settings-page/developer-mode "Developer mode"
         :settings-page/developer-mode "Developer mode"
         :settings-page/enable-developer-mode "Developer mode"
         :settings-page/enable-developer-mode "Developer mode"
         :settings-page/disable-developer-mode "Disable developer mode"
         :settings-page/disable-developer-mode "Disable developer mode"
@@ -473,9 +466,6 @@
         :right-side-bar/new-page "Neue Seite"
         :right-side-bar/new-page "Neue Seite"
         :left-side-bar/journals "Journale"
         :left-side-bar/journals "Journale"
         :git/set-access-token "Persönliches GitHub-Zugangs-Token festlegen"
         :git/set-access-token "Persönliches GitHub-Zugangs-Token festlegen"
-        :git/token-is-encrypted "Das Token wird verschlüsselt und im lokalen Speicher des Browsers gespeichert"
-        :git/token-server "Auf dem Server wird es niemals gespeichert"
-        :git/create-personal-access-token "Wie erstellt man ein persönliches GitHub-Zugangs-Token?"
         :git/push "Jetzt übertragen"
         :git/push "Jetzt übertragen"
         :git/push-failed "Übertragung fehlgeschlagen!"
         :git/push-failed "Übertragung fehlgeschlagen!"
         :git/local-changes-synced "Alle lokalen Änderungen sind synchronisiert!"
         :git/local-changes-synced "Alle lokalen Änderungen sind synchronisiert!"
@@ -583,8 +573,6 @@
         :settings-page/enable-journals "Journale einschalten"
         :settings-page/enable-journals "Journale einschalten"
         :settings-page/home-default-page "Standard-Homepage einrichten"
         :settings-page/home-default-page "Standard-Homepage einrichten"
         :settings-page/enable-block-time "Zeitstempel für Blöcke aktivieren"
         :settings-page/enable-block-time "Zeitstempel für Blöcke aktivieren"
-        :settings-page/dont-use-other-peoples-proxy-servers "Verwenden Sie keine fremden Proxyserver. Hierbei können das Token und die Notizen gelesen werden. Logseq kann die Sicherheit nicht garantieren, wenn Sie die Proxy-Server anderer Leute verwenden. Sie können selber einen Proxy-Server einrichten, mehr dazu unter "
-        :settings-page/custom-cors-proxy-server "Benutzerdefinierter CORS-Proxy-Server"
         :settings-page/developer-mode "Entwicklermodus"
         :settings-page/developer-mode "Entwicklermodus"
         :settings-page/enable-developer-mode "Entwicklermodus aktivieren"
         :settings-page/enable-developer-mode "Entwicklermodus aktivieren"
         :settings-page/disable-developer-mode "Entwicklermodus deaktivieren"
         :settings-page/disable-developer-mode "Entwicklermodus deaktivieren"
@@ -721,7 +709,6 @@
         :settings-page/customize-shortcuts "Tastaturbefehle"
         :settings-page/customize-shortcuts "Tastaturbefehle"
         :settings-page/disable-sentry "Nutzungs- und Diagnostik-Daten an Logseq senden"
         :settings-page/disable-sentry "Nutzungs- und Diagnostik-Daten an Logseq senden"
         :settings-page/edit-custom-css "custom.css bearbeiten"
         :settings-page/edit-custom-css "custom.css bearbeiten"
-        :settings-page/enable-encryption "Verschlüsselung"
         :settings-page/enable-shortcut-tooltip "Tooltips für Verknüpfungen aktivieren"
         :settings-page/enable-shortcut-tooltip "Tooltips für Verknüpfungen aktivieren"
         :settings-page/enable-tooltip "Tooltips"
         :settings-page/enable-tooltip "Tooltips"
         :settings-page/shortcut-settings "Verknüpfungen anpassen"
         :settings-page/shortcut-settings "Verknüpfungen anpassen"
@@ -781,10 +768,6 @@
         :right-side-bar/flashcards "Flashcards"
         :right-side-bar/flashcards "Flashcards"
         :right-side-bar/new-page "Nouvelle page"
         :right-side-bar/new-page "Nouvelle page"
         :left-side-bar/journals "Journals"
         :left-side-bar/journals "Journals"
-        :git/set-access-token "Définir un jeton d'accès personnel GitHub"
-        :git/token-is-encrypted "Le jeton sera chiffré et gardé dans le stockage local du navigateur (local storage)"
-        :git/token-server "Le serveur ne le stockera jamais"
-        :git/create-personal-access-token "Comment générer un jeton d'accès GitHub ?"
         :git/push "Pousser maintenant (push)"
         :git/push "Pousser maintenant (push)"
         :git/push-failed "L'envoi des données a échoué !"
         :git/push-failed "L'envoi des données a échoué !"
         :git/local-changes-synced "Tous les changements locaux sont synchronisés !"
         :git/local-changes-synced "Tous les changements locaux sont synchronisés !"
@@ -869,8 +852,6 @@
         :settings-page/preferred-file-format "Format de fichier préféré"
         :settings-page/preferred-file-format "Format de fichier préféré"
         :settings-page/preferred-workflow "Workflow préféré"
         :settings-page/preferred-workflow "Workflow préféré"
         :settings-page/enable-timetracking "Activer le suivi de temps des tâches"
         :settings-page/enable-timetracking "Activer le suivi de temps des tâches"
-        :settings-page/dont-use-other-peoples-proxy-servers "N'utilisez pas de serveurs proxy que vous ne maîtrisez pas. Cela est très dangereux, vous pourriez vous faire voler vos jetons d'accès et vos notes. Logseq ne pourra être tenu responsable pour toute perte ou vol de données si vous utilisez des serveurs proxy. Vous pouvez également déployer Logseq vous-même, regardez "
-        :settings-page/custom-cors-proxy-server "CORS personnalisé pour Serveur Proxy"
         :settings-page/developer-mode "Le mode développeur"
         :settings-page/developer-mode "Le mode développeur"
         :settings-page/enable-developer-mode "Activer le mode développeur"
         :settings-page/enable-developer-mode "Activer le mode développeur"
         :settings-page/disable-developer-mode "Désactiver le mode développeur"
         :settings-page/disable-developer-mode "Désactiver le mode développeur"
@@ -1028,10 +1009,6 @@
            :left-side-bar/nav-favorites "收藏页面"
            :left-side-bar/nav-favorites "收藏页面"
            :left-side-bar/nav-shortcuts "快捷导航"
            :left-side-bar/nav-shortcuts "快捷导航"
            :left-side-bar/nav-recent-pages "最近使用"
            :left-side-bar/nav-recent-pages "最近使用"
-           :git/set-access-token "设定 GitHub 个人访问令牌"
-           :git/token-is-encrypted "令牌将被加密并存储在浏览器本地存储"
-           :git/token-server "服务器将永远不会存储它"
-           :git/create-personal-access-token "如何创建 GitHub 个人访问令牌?"
            :git/push "现在 push"
            :git/push "现在 push"
            :git/push-failed "Push 失败!"
            :git/push-failed "Push 失败!"
            :git/local-changes-synced "所有本地更改已同步!"
            :git/local-changes-synced "所有本地更改已同步!"
@@ -1154,15 +1131,12 @@
            :settings-page/enable-tooltip "开启提示框"
            :settings-page/enable-tooltip "开启提示框"
            :settings-page/enable-journals "开启日记"
            :settings-page/enable-journals "开启日记"
            :settings-page/enable-all-pages-public "发布所有页面"
            :settings-page/enable-all-pages-public "发布所有页面"
-           :settings-page/enable-encryption "激活加密功能"
            :settings-page/customize-shortcuts "自定义快捷键"
            :settings-page/customize-shortcuts "自定义快捷键"
            :settings-page/shortcut-settings "快捷键设置"
            :settings-page/shortcut-settings "快捷键设置"
            :settings-page/home-default-page "设置首页默认页面"
            :settings-page/home-default-page "设置首页默认页面"
            :settings-page/enable-block-time "记录 block 创建/修改时间"
            :settings-page/enable-block-time "记录 block 创建/修改时间"
-           :settings-page/dont-use-other-peoples-proxy-servers "不要使用其他人的代理服务器。这非常危险,可能会使您的令牌和笔记被盗。 如果您使用其他人的代理服务器,Logseq 将不会对此损失负责。您可以自己部署它,请查阅 "
            :settings-page/clear-cache "清除缓存"
            :settings-page/clear-cache "清除缓存"
            :settings-page/clear "清除"
            :settings-page/clear "清除"
-           :settings-page/custom-cors-proxy-server "自定义 CORS 代理服务器"
            :settings-page/developer-mode "开发者模式"
            :settings-page/developer-mode "开发者模式"
            :settings-page/enable-developer-mode "启用开发者模式"
            :settings-page/enable-developer-mode "启用开发者模式"
            :settings-page/disable-developer-mode "禁用开发者模式"
            :settings-page/disable-developer-mode "禁用开发者模式"
@@ -1408,10 +1382,6 @@
              :right-side-bar/flashcards "Flashcards"
              :right-side-bar/flashcards "Flashcards"
              :right-side-bar/new-page "New page"
              :right-side-bar/new-page "New page"
              :left-side-bar/journals "Journals"
              :left-side-bar/journals "Journals"
-             :git/set-access-token "設定 GitHub 個人訪問令牌"
-             :git/token-is-encrypted "令牌將被加密並存儲在瀏覽器本地存儲"
-             :git/token-server "服務器將永遠不會存儲它"
-             :git/create-personal-access-token "如何創建 GitHub 個人訪問令牌?"
              :git/push "現在 push"
              :git/push "現在 push"
              :git/local-changes-synced "所有本地更改已同步!"
              :git/local-changes-synced "所有本地更改已同步!"
              :git/pull "現在 pull"
              :git/pull "現在 pull"
@@ -1508,8 +1478,6 @@
              :settings-page/git-commit-delay "Git auto commit seconds"
              :settings-page/git-commit-delay "Git auto commit seconds"
              :settings-page/preferred-file-format "首選文件格式"
              :settings-page/preferred-file-format "首選文件格式"
              :settings-page/preferred-workflow "首選工作流"
              :settings-page/preferred-workflow "首選工作流"
-             :settings-page/dont-use-other-peoples-proxy-servers "不要使用其他人的代理服務器。這非常危險,可能會使您的令牌和筆記被盜。 如果您使用其他人的代理服務器,Logseq 將不會對此損失負責。您可以自己部署它,請查閱 "
-             :settings-page/custom-cors-proxy-server "自定義 CORS 代理服務器"
              :settings-page/developer-mode "開發者模式"
              :settings-page/developer-mode "開發者模式"
              :settings-page/enable-developer-mode "啟用開發者模式"
              :settings-page/enable-developer-mode "啟用開發者模式"
              :settings-page/disable-developer-mode "禁用開發者模式"
              :settings-page/disable-developer-mode "禁用開發者模式"
@@ -1659,10 +1627,6 @@
         :right-side-bar/flashcards "Flashcards"
         :right-side-bar/flashcards "Flashcards"
         :right-side-bar/new-page "New page"
         :right-side-bar/new-page "New page"
         :left-side-bar/journals "Journals"
         :left-side-bar/journals "Journals"
-        :git/set-access-token "Set GitHub personal access token"
-        :git/token-is-encrypted "The token will be encrypted and stored in the browser local storage"
-        :git/token-server "The server will never store it"
-        :git/create-personal-access-token "How to create a GitHub personal access token?"
         :git/push "Stoor nou"
         :git/push "Stoor nou"
         :git/local-changes-synced "Alle veranderinge is gesinkroniseer!"
         :git/local-changes-synced "Alle veranderinge is gesinkroniseer!"
         :git/pull "Laai af"
         :git/pull "Laai af"
@@ -1755,8 +1719,6 @@
         :settings-page/git-commit-delay "Git auto commit seconds"
         :settings-page/git-commit-delay "Git auto commit seconds"
         :settings-page/preferred-file-format "Voorkeur lêer formaat"
         :settings-page/preferred-file-format "Voorkeur lêer formaat"
         :settings-page/preferred-workflow "Voorkeur werkstroom"
         :settings-page/preferred-workflow "Voorkeur werkstroom"
-        :settings-page/dont-use-other-peoples-proxy-servers "Moenie ander mense se instaanbedieners gebruik nie. Dis gevaarlik, en kan veroorsaak dat jou toegang teken en notas gesteel word. Logseq sal nie verantwoording neem vir verlies indien jy ander se instaanbedieners gebruik nie. Jy kan self self een ontplooi "
-        :settings-page/custom-cors-proxy-server "Persoonlike CORS instaanbediener"
         :settings-page/developer-mode "Ontwikkelaar modus"
         :settings-page/developer-mode "Ontwikkelaar modus"
         :settings-page/enable-developer-mode "Skakel ontwikkelaar modus aan"
         :settings-page/enable-developer-mode "Skakel ontwikkelaar modus aan"
         :settings-page/disable-developer-mode "Skakel ontwikkelaars modus af"
         :settings-page/disable-developer-mode "Skakel ontwikkelaars modus af"
@@ -1888,10 +1850,6 @@
         :right-side-bar/flashcards "Flashcards"
         :right-side-bar/flashcards "Flashcards"
         :right-side-bar/new-page "Nueva pagina"
         :right-side-bar/new-page "Nueva pagina"
         :left-side-bar/journals "Diarios"
         :left-side-bar/journals "Diarios"
-        :git/set-access-token "Establece el token de acceso personal de GitHub"
-        :git/token-is-encrypted "El token será encriptado y guardado en el almacenamiento local del navegador"
-        :git/token-server "El servidor nunca lo guardará"
-        :git/create-personal-access-token "¿Cómo crear un token de acceso personal de GitHub?"
         :git/push "Enviar (push) ahora"
         :git/push "Enviar (push) ahora"
         :git/push-failed "¡Envío fallido!"
         :git/push-failed "¡Envío fallido!"
         :git/local-changes-synced "¡Todos los cambios locales están sincronizados!"
         :git/local-changes-synced "¡Todos los cambios locales están sincronizados!"
@@ -2000,13 +1958,10 @@
         :settings-page/enable-timetracking "Habilitar rastreo de tiempo"
         :settings-page/enable-timetracking "Habilitar rastreo de tiempo"
         :settings-page/enable-tooltip "Habilitar descripción emergente"
         :settings-page/enable-tooltip "Habilitar descripción emergente"
         :settings-page/enable-journals "Habilitar diarios"
         :settings-page/enable-journals "Habilitar diarios"
-        :settings-page/enable-encryption "Habilitar función de cifrado"
         :settings-page/home-default-page "Establecer página de inicio"
         :settings-page/home-default-page "Establecer página de inicio"
         :settings-page/enable-block-time "Habilitar marcas temporales de bloque"
         :settings-page/enable-block-time "Habilitar marcas temporales de bloque"
-        :settings-page/dont-use-other-peoples-proxy-servers "No use servidores proxy de otras personas. Es muy peligroso, le pueden  robar su token y consecuentemente sus notas. Logseq no se hace responsable por la pérdida si utiliza servidores proxy ajenos. Es posible configurar un servidor proxy propio, consulte."
         :settings-page/clear-cache "Limpiar caché"
         :settings-page/clear-cache "Limpiar caché"
         :settings-page/clear "Limpiar"
         :settings-page/clear "Limpiar"
-        :settings-page/custom-cors-proxy-server "Servidor proxy CORS personalizado"
         :settings-page/developer-mode "Modo desarrollador"
         :settings-page/developer-mode "Modo desarrollador"
         :settings-page/enable-developer-mode "Habilitar modo desarrollador"
         :settings-page/enable-developer-mode "Habilitar modo desarrollador"
         :settings-page/disable-developer-mode "Deshabilitar modo desarrollador"
         :settings-page/disable-developer-mode "Deshabilitar modo desarrollador"
@@ -2196,10 +2151,6 @@
            :left-side-bar/nav-favorites "Favoritter"
            :left-side-bar/nav-favorites "Favoritter"
            :left-side-bar/nav-shortcuts "Snarveier"
            :left-side-bar/nav-shortcuts "Snarveier"
            :left-side-bar/nav-recent-pages "Nylig"
            :left-side-bar/nav-recent-pages "Nylig"
-           :git/set-access-token "Sett 'GitHub personal access token'"
-           :git/token-is-encrypted "Ditt token blir kryptert og lagret lokalt i nettleseren din"
-           :git/token-server "Serveren lagerer det aldri"
-           :git/create-personal-access-token "Hvordan lage et 'GitHub personal access token?'"
            :git/push "Push nå"
            :git/push "Push nå"
            :git/push-failed "Push feilet!"
            :git/push-failed "Push feilet!"
            :git/local-changes-synced "Alle lokale endringer er synkronisert!"
            :git/local-changes-synced "Alle lokale endringer er synkronisert!"
@@ -2325,15 +2276,12 @@
            :settings-page/enable-tooltip "Aktiver verktøytips"
            :settings-page/enable-tooltip "Aktiver verktøytips"
            :settings-page/enable-journals "Aktiver dagbøker"
            :settings-page/enable-journals "Aktiver dagbøker"
            :settings-page/enable-all-pages-public "Aktiver alle sider som offentlige ved publisering"
            :settings-page/enable-all-pages-public "Aktiver alle sider som offentlige ved publisering"
-           :settings-page/enable-encryption "Aktiver kryptering"
            :settings-page/customize-shortcuts "Tastatursnarveier"
            :settings-page/customize-shortcuts "Tastatursnarveier"
            :settings-page/shortcut-settings "Tilpass snarveier"
            :settings-page/shortcut-settings "Tilpass snarveier"
            :settings-page/home-default-page "Angi standard hjemmeside"
            :settings-page/home-default-page "Angi standard hjemmeside"
            :settings-page/enable-block-time "Aktiver tidsstempel for blokker"
            :settings-page/enable-block-time "Aktiver tidsstempel for blokker"
-           :settings-page/dont-use-other-peoples-proxy-servers "Ikke bruk andres proxy-servere. Det er veldig farlig, og kan føre til at ditt token og dine notater blir stjålet. Logseq er ikke ansvarlig for tap dersom du bruker andres proxy-servere. Du kan utplassere den selv, se "
            :settings-page/clear-cache "Slett hurtigbuffer"
            :settings-page/clear-cache "Slett hurtigbuffer"
            :settings-page/clear "Slett"
            :settings-page/clear "Slett"
-           :settings-page/custom-cors-proxy-server "Egendefinert CORS proxy server"
            :settings-page/developer-mode "Utviklermodus"
            :settings-page/developer-mode "Utviklermodus"
            :settings-page/enable-developer-mode "Aktiver utviklermodus"
            :settings-page/enable-developer-mode "Aktiver utviklermodus"
            :settings-page/disable-developer-mode "Deaktiver utviklermodus"
            :settings-page/disable-developer-mode "Deaktiver utviklermodus"
@@ -2580,10 +2528,6 @@
            :right-side-bar/flashcards "Flashcards"
            :right-side-bar/flashcards "Flashcards"
            :right-side-bar/new-page "Nova página"
            :right-side-bar/new-page "Nova página"
            :left-side-bar/journals "Diários"
            :left-side-bar/journals "Diários"
-           :git/set-access-token "Definir token de acesso pessoal do GitHub"
-           :git/token-is-encrypted "O token será criptografado e guardado no armazenamento local do navegador"
-           :git/token-server "Nunca será armazenado pelo servidor"
-           :git/create-personal-access-token "Como criar um token de acesso pessoal do GitHub?"
            :git/push "Enviar agora"
            :git/push "Enviar agora"
            :git/push-failed "Envio falhou!"
            :git/push-failed "Envio falhou!"
            :git/local-changes-synced "Todas as alterações locais foram sincronizadas!"
            :git/local-changes-synced "Todas as alterações locais foram sincronizadas!"
@@ -2702,15 +2646,12 @@
            :settings-page/enable-tooltip "Ativar dicas de ferramentas"
            :settings-page/enable-tooltip "Ativar dicas de ferramentas"
            :settings-page/enable-journals "Ativar diários"
            :settings-page/enable-journals "Ativar diários"
            :settings-page/enable-all-pages-public "Ativar todas as páginas públicas ao publicar"
            :settings-page/enable-all-pages-public "Ativar todas as páginas públicas ao publicar"
-           :settings-page/enable-encryption "Ativar funcionalidade de criptografia"
            :settings-page/customize-shortcuts "Atalhos de teclado"
            :settings-page/customize-shortcuts "Atalhos de teclado"
            :settings-page/shortcut-settings "Personalizar atalhos"
            :settings-page/shortcut-settings "Personalizar atalhos"
            :settings-page/home-default-page "Definir a página inicial padrão"
            :settings-page/home-default-page "Definir a página inicial padrão"
            :settings-page/enable-block-time "Ativar carimbos temporais nos blocos"
            :settings-page/enable-block-time "Ativar carimbos temporais nos blocos"
-           :settings-page/dont-use-other-peoples-proxy-servers "Não use servidores proxy de outras pessoas. É muito perigoso, o que pode levar a que o seu token e notas sejam roubadas. O Logseq não será responsável por estas perdas se usar servidores proxy de outras pessoas. Pode criar o seu, veja "
            :settings-page/clear-cache "Limpar cache"
            :settings-page/clear-cache "Limpar cache"
            :settings-page/clear "Limpar"
            :settings-page/clear "Limpar"
-           :settings-page/custom-cors-proxy-server "Servidor proxy CORS personalizado"
            :settings-page/developer-mode "Modo de desenvolvimento"
            :settings-page/developer-mode "Modo de desenvolvimento"
            :settings-page/enable-developer-mode "Ativar modo de desenvolvimento"
            :settings-page/enable-developer-mode "Ativar modo de desenvolvimento"
            :settings-page/disable-developer-mode "Desativar modo de desenvolvimento"
            :settings-page/disable-developer-mode "Desativar modo de desenvolvimento"
@@ -2989,10 +2930,6 @@
            :left-side-bar/nav-favorites "Favoritos"
            :left-side-bar/nav-favorites "Favoritos"
            :left-side-bar/nav-shortcuts "Atalhos"
            :left-side-bar/nav-shortcuts "Atalhos"
            :left-side-bar/nav-recent-pages "Recente"
            :left-side-bar/nav-recent-pages "Recente"
-           :git/set-access-token "Definir token de acesso pessoal do GitHub"
-           :git/token-is-encrypted "O token será encriptado e guardado no armazenamento local do navegador"
-           :git/token-server "O servidor nunca o irá guardar"
-           :git/create-personal-access-token "Como criar um token de acesso pessoal do GitHub?"
            :git/push "Fazer push agora"
            :git/push "Fazer push agora"
            :git/push-failed "Push falhou!"
            :git/push-failed "Push falhou!"
            :git/local-changes-synced "Todas as alterações locais foram sincronizadas!"
            :git/local-changes-synced "Todas as alterações locais foram sincronizadas!"
@@ -3115,15 +3052,12 @@
            :settings-page/enable-tooltip "Dicas de atalhos"
            :settings-page/enable-tooltip "Dicas de atalhos"
            :settings-page/enable-journals "Diários"
            :settings-page/enable-journals "Diários"
            :settings-page/enable-all-pages-public "Todas as páginas públicas ao publicar"
            :settings-page/enable-all-pages-public "Todas as páginas públicas ao publicar"
-           :settings-page/enable-encryption "Encriptação"
            :settings-page/customize-shortcuts "Atalhos de teclado"
            :settings-page/customize-shortcuts "Atalhos de teclado"
            :settings-page/shortcut-settings "Personalizar atalhos"
            :settings-page/shortcut-settings "Personalizar atalhos"
            :settings-page/home-default-page "Definir a página inicial predefinida"
            :settings-page/home-default-page "Definir a página inicial predefinida"
            :settings-page/enable-block-time "Carimbos temporais nos blocos"
            :settings-page/enable-block-time "Carimbos temporais nos blocos"
-           :settings-page/dont-use-other-peoples-proxy-servers "Não use os servidores proxy de outras pessoas. É muito perigoso, o que pode levar a que o seu token e notas sejam roubadas. O Logseq não será responsável por estas perdas se usar servidores proxy de outras pessoas. Pode implementá-lo por si mesmo, veja "
            :settings-page/clear-cache "Limpar cache"
            :settings-page/clear-cache "Limpar cache"
            :settings-page/clear "Limpar"
            :settings-page/clear "Limpar"
-           :settings-page/custom-cors-proxy-server "Servidor proxy CORS personalizado"
            :settings-page/developer-mode "Modo de desenvolvedor"
            :settings-page/developer-mode "Modo de desenvolvedor"
            :settings-page/enable-developer-mode "Modo de desenvolvedor"
            :settings-page/enable-developer-mode "Modo de desenvolvedor"
            :settings-page/disable-developer-mode "Desativar modo de desenvolvedor"
            :settings-page/disable-developer-mode "Desativar modo de desenvolvedor"
@@ -3375,10 +3309,6 @@
         :right-side-bar/flashcards "Слайды"
         :right-side-bar/flashcards "Слайды"
         :right-side-bar/new-page "Новая страница"
         :right-side-bar/new-page "Новая страница"
         :left-side-bar/journals "Дневники"
         :left-side-bar/journals "Дневники"
-        :git/set-access-token "Установить GitHub токен личного доступа"
-        :git/token-is-encrypted "Токен будет зашифрован и сохранен в локальном хранилище браузера"
-        :git/token-server "Сервер никогда не хранит это"
-        :git/create-personal-access-token "Как создать GitHub токен личного доступа?"
         :git/push "Отправить сейчас"
         :git/push "Отправить сейчас"
         :git/push-failed "Отправка не удалась!"
         :git/push-failed "Отправка не удалась!"
         :git/local-changes-synced "Все локальные изменения синхронизированны!"
         :git/local-changes-synced "Все локальные изменения синхронизированны!"
@@ -3502,15 +3432,12 @@
         :settings-page/enable-shortcut-tooltip "Всплывающие подсказки горячих клавиш"
         :settings-page/enable-shortcut-tooltip "Всплывающие подсказки горячих клавиш"
         :settings-page/enable-journals "Включить Дневники"
         :settings-page/enable-journals "Включить Дневники"
         :settings-page/enable-all-pages-public "Все страницы общедоступны при публикации"
         :settings-page/enable-all-pages-public "Все страницы общедоступны при публикации"
-        :settings-page/enable-encryption "Функции шифрования"
         :settings-page/customize-shortcuts "Горячие клавиши"
         :settings-page/customize-shortcuts "Горячие клавиши"
         :settings-page/shortcut-settings "Настроить горячие клавиши"
         :settings-page/shortcut-settings "Настроить горячие клавиши"
         :settings-page/home-default-page "Установить домашнюю страницу по умолчанию"
         :settings-page/home-default-page "Установить домашнюю страницу по умолчанию"
         :settings-page/enable-block-time "Временные метки блока"
         :settings-page/enable-block-time "Временные метки блока"
-        :settings-page/dont-use-other-peoples-proxy-servers "Не используйте прокси-сервера других людей. Это может быть очень опасно, ваши токен и заметки могут быть украдены. Logseq не несет ответственности за эту потерю, если вы будете использовать сторонние прокси-сервера. Но вы может развернуть собственный "
         :settings-page/clear-cache "Отчистить кэш"
         :settings-page/clear-cache "Отчистить кэш"
         :settings-page/clear "Отчистить"
         :settings-page/clear "Отчистить"
-        :settings-page/custom-cors-proxy-server "Настраевыемый CORS прокси сервер"
         :settings-page/developer-mode "Режим разработчика"
         :settings-page/developer-mode "Режим разработчика"
         :settings-page/enable-developer-mode "Включить режим разработчика"
         :settings-page/enable-developer-mode "Включить режим разработчика"
         :settings-page/disable-developer-mode "Выключить режим разработчика"
         :settings-page/disable-developer-mode "Выключить режим разработчика"
@@ -3749,10 +3676,6 @@
         :left-side-bar/nav-favorites "お気に入り"
         :left-side-bar/nav-favorites "お気に入り"
         :left-side-bar/nav-shortcuts "ショートカット"
         :left-side-bar/nav-shortcuts "ショートカット"
         :left-side-bar/nav-recent-pages "最新"
         :left-side-bar/nav-recent-pages "最新"
-        :git/set-access-token "GitHub の personal access token をセット"
-        :git/token-is-encrypted "token は暗号化されてブラウザのローカルストレージへ保存されます。"
-        :git/token-server "サーバ側には保存されません。"
-        :git/create-personal-access-token "GitHub の personal access token を作るには?"
         :git/push "今すぐ Push"
         :git/push "今すぐ Push"
         :git/push-failed "Push に失敗しました!"
         :git/push-failed "Push に失敗しました!"
         :git/local-changes-synced "全ローカルストレージが同期しました!"
         :git/local-changes-synced "全ローカルストレージが同期しました!"
@@ -3878,15 +3801,12 @@
         :settings-page/enable-tooltip "ツールチップ"
         :settings-page/enable-tooltip "ツールチップ"
         :settings-page/enable-journals "日誌"
         :settings-page/enable-journals "日誌"
         :settings-page/enable-all-pages-public "パブリッシュ時には全てのページを公開する"
         :settings-page/enable-all-pages-public "パブリッシュ時には全てのページを公開する"
-        :settings-page/enable-encryption "暗号化"
         :settings-page/customize-shortcuts "キーボードショートカット"
         :settings-page/customize-shortcuts "キーボードショートカット"
         :settings-page/shortcut-settings "ショートカットをカスタマイズ"
         :settings-page/shortcut-settings "ショートカットをカスタマイズ"
         :settings-page/home-default-page "デフォルトのホームページを設定"
         :settings-page/home-default-page "デフォルトのホームページを設定"
         :settings-page/enable-block-time "ブロックタイムスタンプ"
         :settings-page/enable-block-time "ブロックタイムスタンプ"
-        :settings-page/dont-use-other-peoples-proxy-servers "他人のプロキシサーバを使わないでください。あなたの token とノートが盗まれる恐れがあるため危険です。Logseq はあなたが他人のプロキシサーバを利用した場合の損失に対して責任をもちません。あなたは自分自身でプロキシをデプロイできますので、こちらをチェックして下さい: "
         :settings-page/clear-cache "キャッシュをクリア"
         :settings-page/clear-cache "キャッシュをクリア"
         :settings-page/clear "クリア"
         :settings-page/clear "クリア"
-        :settings-page/custom-cors-proxy-server "カスタムCORSプロキシサーバ"
         :settings-page/developer-mode "開発者モード"
         :settings-page/developer-mode "開発者モード"
         :settings-page/enable-developer-mode "開発者モード"
         :settings-page/enable-developer-mode "開発者モード"
         :settings-page/disable-developer-mode "開発者モードを無効化"
         :settings-page/disable-developer-mode "開発者モードを無効化"

+ 0 - 104
src/main/frontend/encrypt.cljs

@@ -1,104 +0,0 @@
-(ns frontend.encrypt
-  (:require [frontend.utf8 :as utf8]
-            [frontend.db.utils :as db-utils]
-            [frontend.db :as db]
-            [promesa.core :as p]
-            [frontend.state :as state]
-            [clojure.string :as str]
-            [cljs.reader :as reader]
-            [shadow.loader :as loader]
-            [lambdaisland.glogi :as log]))
-
-(defonce age-pem-header-line "-----BEGIN AGE ENCRYPTED FILE-----")
-(defonce age-version-line "age-encryption.org/v1")
-
-(defn content-encrypted?
-  [content]
-  (when content
-    (or (str/starts-with? content age-pem-header-line)
-        (str/starts-with? content age-version-line))))
-
-(defn encrypted-db?
-  [repo-url]
-  (db-utils/get-key-value repo-url :db/encrypted?))
-
-(defn get-key-pair
-  [repo-url]
-  (db-utils/get-key-value repo-url :db/encryption-keys))
-
-(defn save-key-pair!
-  [repo-url keys]
-  (let [keys (if (string? keys) (reader/read-string keys) keys)]
-    (db/set-key-value repo-url :db/encryption-keys keys)
-    (db/set-key-value repo-url :db/encrypted? true)))
-
-(defn generate-key-pair
-  []
-  (p/let [_ (loader/load :age-encryption)
-          lazy-keygen (resolve 'frontend.extensions.age-encryption/keygen)
-          js-keys (lazy-keygen)]
-    (array-seq js-keys)))
-
-(defn generate-key-pair-and-save!
-  [repo-url]
-  (when-not (get-key-pair repo-url)
-    (p/let [keys (generate-key-pair)]
-      (save-key-pair! repo-url keys)
-      (pr-str keys))))
-
-(defn get-public-key
-  [repo-url]
-  (second (get-key-pair repo-url)))
-
-(defn get-secret-key
-  [repo-url]
-  (first (get-key-pair repo-url)))
-
-(defn encrypt
-  ([content]
-   (encrypt (state/get-current-repo) content))
-  ([repo-url content]
-   (cond
-     (encrypted-db? repo-url)
-     (p/let [_ (loader/load :age-encryption)
-             lazy-encrypt-with-x25519 (resolve 'frontend.extensions.age-encryption/encrypt-with-x25519)
-             content (utf8/encode content)
-             public-key (get-public-key repo-url)
-             encrypted (lazy-encrypt-with-x25519 public-key content true)]
-       (utf8/decode encrypted))
-     :else
-     (p/resolved content))))
-
-(defn decrypt
-  ([content]
-   (decrypt (state/get-current-repo) content))
-  ([repo-url content]
-   (cond
-     (and (encrypted-db? repo-url)
-          (content-encrypted? content))
-     (let [content (utf8/encode content)]
-       (if-let [secret-key (get-secret-key repo-url)]
-         (p/let [_ (loader/load :age-encryption)
-                 lazy-decrypt-with-x25519 (resolve 'frontend.extensions.age-encryption/decrypt-with-x25519)
-                 decrypted (lazy-decrypt-with-x25519 secret-key content)]
-           (utf8/decode decrypted))
-         (log/error :encrypt/empty-secret-key (str "Can't find the secret key for repo: " repo-url))))
-     :else
-     (p/resolved content))))
-
-(defn encrypt-with-passphrase
-  [passphrase content]
-  (p/let [_ (loader/load :age-encryption)
-          lazy-encrypt-with-user-passphrase (resolve 'frontend.extensions.age-encryption/encrypt-with-user-passphrase)
-          content (utf8/encode content)
-          encrypted (@lazy-encrypt-with-user-passphrase passphrase content true)]
-    (utf8/decode encrypted)))
-
-;; ;; TODO: What if decryption failed
-(defn decrypt-with-passphrase
-  [passphrase content]
-  (p/let [_ (loader/load :age-encryption)
-          lazy-decrypt-with-user-passphrase (resolve 'frontend.extensions.age-encryption/decrypt-with-user-passphrase)
-          content (utf8/encode content)
-          decrypted (lazy-decrypt-with-user-passphrase passphrase content)]
-    (utf8/decode decrypted)))

+ 0 - 23
src/main/frontend/extensions/age_encryption.cljs

@@ -1,23 +0,0 @@
-(ns frontend.extensions.age-encryption
-  (:require ["regenerator-runtime/runtime"] ;; required for async npm module
-            ["@kanru/rage-wasm" :as rage]))
-
-(defn keygen
-  []
-  (rage/keygen))
-
-(defn encrypt-with-x25519
-  [public-key content armor]
-  (rage/encrypt_with_x25519 public-key content armor))
-
-(defn decrypt-with-x25519
-  [secret-key content]
-  (rage/decrypt_with_x25519 secret-key content))
-
-(defn encrypt-with-user-passphrase
-  [passphrase content armor]
-  (rage/encrypt_with_user_passphrase passphrase content armor))
-
-(defn decrypt-with-user-passphrase
-  [passphrase content]
-  (rage/decrypt_with_user_passphrase passphrase content))

+ 19 - 27
src/main/frontend/fs.cljs

@@ -1,19 +1,17 @@
 (ns frontend.fs
 (ns frontend.fs
   (:require [cljs-bean.core :as bean]
   (:require [cljs-bean.core :as bean]
-            [clojure.string :as string]
             [frontend.config :as config]
             [frontend.config :as config]
-            [frontend.db :as db]
-            [frontend.encrypt :as encrypt]
-            [frontend.fs.bfs :as bfs]
             [frontend.fs.nfs :as nfs]
             [frontend.fs.nfs :as nfs]
             [frontend.fs.node :as node]
             [frontend.fs.node :as node]
             [frontend.fs.capacitor-fs :as mobile]
             [frontend.fs.capacitor-fs :as mobile]
+            [frontend.fs.bfs :as bfs]
             [frontend.mobile.util :as mobile-util]
             [frontend.mobile.util :as mobile-util]
             [frontend.fs.protocol :as protocol]
             [frontend.fs.protocol :as protocol]
-            [frontend.state :as state]
             [frontend.util :as util]
             [frontend.util :as util]
             [lambdaisland.glogi :as log]
             [lambdaisland.glogi :as log]
-            [promesa.core :as p]))
+            [promesa.core :as p]
+            [frontend.db :as db]
+            [clojure.string :as string]))
 
 
 (defonce nfs-record (nfs/->Nfs))
 (defonce nfs-record (nfs/->Nfs))
 (defonce bfs-record (bfs/->Bfs))
 (defonce bfs-record (bfs/->Bfs))
@@ -28,12 +26,9 @@
 (defn get-fs
 (defn get-fs
   [dir]
   [dir]
   (let [bfs-local? (or (string/starts-with? dir "/local")
   (let [bfs-local? (or (string/starts-with? dir "/local")
-                       (string/starts-with? dir "local"))
-        current-repo (state/get-current-repo)
-        git-repo? (and current-repo
-                       (string/starts-with? current-repo "https://"))]
+                       (string/starts-with? dir "local"))]
     (cond
     (cond
-      (and (util/electron?) (not bfs-local?) (not git-repo?))
+      (and (util/electron?) (not bfs-local?))
       node-record
       node-record
 
 
       (mobile-util/is-native-platform?)
       (mobile-util/is-native-platform?)
@@ -79,20 +74,17 @@
 (defn write-file!
 (defn write-file!
   [repo dir path content opts]
   [repo dir path content opts]
   (when content
   (when content
-    (let [fs-record (get-fs dir)]
-      (p/let [md-or-org? (contains? #{"md" "markdown" "org"} (util/get-file-ext path))
-              content (if-not md-or-org? content (encrypt/encrypt content))]
-        (->
-         (p/let [_ (protocol/write-file! (get-fs dir) repo dir path content opts)]
-           (when (= bfs-record fs-record)
-             (db/set-file-last-modified-at! repo (config/get-file-path repo path) (js/Date.))))
-         (p/catch (fn [error]
-                    (log/error :file/write-failed {:dir dir
-                                                   :path path
-                                                   :error error})
-                    ;; Disable this temporarily
-                    ;; (js/alert "Current file can't be saved! Please copy its content to your local file system and click the refresh button.")
-                    )))))))
+    (->
+     (p/let [_ (protocol/write-file! (get-fs dir) repo dir path content opts)]
+       (when (= bfs-record (get-fs dir))
+         (db/set-file-last-modified-at! repo (config/get-file-path repo path) (js/Date.))))
+     (p/catch (fn [error]
+                (log/error :file/write-failed {:dir dir
+                                               :path path
+                                               :error error})
+                ;; Disable this temporarily
+                ;; (js/alert "Current file can't be saved! Please copy its content to your local file system and click the refresh button.")
+                )))))
 
 
 (defn read-file
 (defn read-file
   ([dir path]
   ([dir path]
@@ -102,8 +94,7 @@
                    {})]
                    {})]
      (read-file dir path options)))
      (read-file dir path options)))
   ([dir path options]
   ([dir path options]
-   (p/chain (protocol/read-file (get-fs dir) dir path options)
-            encrypt/decrypt)))
+   (protocol/read-file (get-fs dir) dir path options)))
 
 
 (defn rename!
 (defn rename!
   [repo old-path new-path]
   [repo old-path new-path]
@@ -122,6 +113,7 @@
 
 
 (defn stat
 (defn stat
   [dir path]
   [dir path]
+  (prn {:dir dir})
   (protocol/stat (get-fs dir) dir path))
   (protocol/stat (get-fs dir) dir path))
 
 
 (defn- get-record
 (defn- get-record

+ 3 - 11
src/main/frontend/fs/capacitor_fs.cljs

@@ -7,7 +7,6 @@
             [frontend.util :as util]
             [frontend.util :as util]
             [lambdaisland.glogi :as log]
             [lambdaisland.glogi :as log]
             [promesa.core :as p]
             [promesa.core :as p]
-            [frontend.encrypt :as encrypt]
             [frontend.state :as state]
             [frontend.state :as state]
             [frontend.db :as db]))
             [frontend.db :as db]))
 
 
@@ -101,10 +100,7 @@
 (defn- contents-matched?
 (defn- contents-matched?
   [disk-content db-content]
   [disk-content db-content]
   (when (and (string? disk-content) (string? db-content))
   (when (and (string? disk-content) (string? db-content))
-    (if (encrypt/encrypted-db? (state/get-current-repo))
-      (p/let [decrypted-content (encrypt/decrypt disk-content)]
-        (= (string/trim decrypted-content) (string/trim db-content)))
-      (p/resolved (= (string/trim disk-content) (string/trim db-content))))))
+    (p/resolved (= (string/trim disk-content) (string/trim db-content)))))
 
 
 (defn- write-file-impl!
 (defn- write-file-impl!
   [_this repo _dir path content {:keys [ok-handler error-handler old-content skip-compare?]} stat]
   [_this repo _dir path content {:keys [ok-handler error-handler old-content skip-compare?]} stat]
@@ -139,8 +135,7 @@
          (not (contains? #{"excalidraw" "edn" "css"} ext))
          (not (contains? #{"excalidraw" "edn" "css"} ext))
          (not (string/includes? path "/.recycle/"))
          (not (string/includes? path "/.recycle/"))
          (zero? pending-writes))
          (zero? pending-writes))
-        (p/let [disk-content (encrypt/decrypt disk-content)]
-          (state/pub-event! [:file/not-matched-from-disk path disk-content content]))
+        (state/pub-event! [:file/not-matched-from-disk path disk-content content])
 
 
         :else
         :else
         (->
         (->
@@ -148,10 +143,7 @@
                                                          :data content
                                                          :data content
                                                          :encoding (.-UTF8 Encoding)
                                                          :encoding (.-UTF8 Encoding)
                                                          :recursive true}))]
                                                          :recursive true}))]
-           (p/let [content (if (encrypt/encrypted-db? (state/get-current-repo))
-                             (encrypt/decrypt content)
-                             content)]
-             (db/set-file-content! repo (js/decodeURI path) content))
+           (db/set-file-content! repo (js/decodeURI path) content)
            (when ok-handler
            (when ok-handler
              (ok-handler repo path result))
              (ok-handler repo path result))
            result)
            result)

+ 3 - 11
src/main/frontend/fs/nfs.cljs

@@ -10,7 +10,6 @@
             [frontend.config :as config]
             [frontend.config :as config]
             [frontend.state :as state]
             [frontend.state :as state]
             [frontend.handler.notification :as notification]
             [frontend.handler.notification :as notification]
-            [frontend.encrypt :as encrypt]
             ["/frontend/utils" :as utils]))
             ["/frontend/utils" :as utils]))
 
 
 ;; We need to cache the file handles in the memory so that
 ;; We need to cache the file handles in the memory so that
@@ -58,10 +57,7 @@
 (defn- contents-matched?
 (defn- contents-matched?
   [disk-content db-content]
   [disk-content db-content]
   (when (and (string? disk-content) (string? db-content))
   (when (and (string? disk-content) (string? db-content))
-    (if (encrypt/encrypted-db? (state/get-current-repo))
-      (p/let [decrypted-content (encrypt/decrypt disk-content)]
-        (= (string/trim decrypted-content) (string/trim db-content)))
-      (p/resolved (= (string/trim disk-content) (string/trim db-content))))))
+    (p/resolved (= (string/trim disk-content) (string/trim db-content)))))
 
 
 (defrecord ^:large-vars/cleanup-todo Nfs []
 (defrecord ^:large-vars/cleanup-todo Nfs []
   protocol/Fs
   protocol/Fs
@@ -175,16 +171,12 @@
                          (not (contains? #{"excalidraw" "edn" "css"} ext))
                          (not (contains? #{"excalidraw" "edn" "css"} ext))
                          (not (string/includes? path "/.recycle/"))
                          (not (string/includes? path "/.recycle/"))
                          (zero? pending-writes))
                          (zero? pending-writes))
-                      (p/let [local-content (encrypt/decrypt local-content)]
-                        (state/pub-event! [:file/not-matched-from-disk path local-content content]))
+                      (state/pub-event! [:file/not-matched-from-disk path local-content content])
                       (p/let [_ (verify-permission repo file-handle true)
                       (p/let [_ (verify-permission repo file-handle true)
                               _ (utils/writeFile file-handle content)
                               _ (utils/writeFile file-handle content)
                               file (.getFile file-handle)]
                               file (.getFile file-handle)]
                         (when file
                         (when file
-                          (p/let [content (if (encrypt/encrypted-db? (state/get-current-repo))
-                                            (encrypt/decrypt content)
-                                            content)]
-                            (db/set-file-content! repo path content))
+                          (db/set-file-content! repo path content)
                           (nfs-saved-handler repo path file))))))
                           (nfs-saved-handler repo path file))))))
                 (p/catch (fn [e]
                 (p/catch (fn [e]
                            (js/console.error e))))
                            (js/console.error e))))

+ 3 - 11
src/main/frontend/fs/node.cljs

@@ -3,7 +3,6 @@
             [electron.ipc :as ipc]
             [electron.ipc :as ipc]
             [frontend.config :as config]
             [frontend.config :as config]
             [frontend.db :as db]
             [frontend.db :as db]
-            [frontend.encrypt :as encrypt]
             [frontend.fs.protocol :as protocol]
             [frontend.fs.protocol :as protocol]
             [frontend.state :as state]
             [frontend.state :as state]
             [frontend.util :as util]
             [frontend.util :as util]
@@ -28,10 +27,7 @@
 (defn- contents-matched?
 (defn- contents-matched?
   [disk-content db-content]
   [disk-content db-content]
   (when (and (string? disk-content) (string? db-content))
   (when (and (string? disk-content) (string? db-content))
-    (if (encrypt/encrypted-db? (state/get-current-repo))
-      (p/let [decrypted-content (encrypt/decrypt disk-content)]
-        (= (string/trim decrypted-content) (string/trim db-content)))
-      (p/resolved (= (string/trim disk-content) (string/trim db-content))))))
+    (p/resolved (= (string/trim disk-content) (string/trim db-content)))))
 
 
 (defn- write-file-impl!
 (defn- write-file-impl!
   [this repo dir path content {:keys [ok-handler error-handler old-content skip-compare?]} stat]
   [this repo dir path content {:keys [ok-handler error-handler old-content skip-compare?]} stat]
@@ -62,18 +58,14 @@
          (not (contains? #{"excalidraw" "edn" "css"} ext))
          (not (contains? #{"excalidraw" "edn" "css"} ext))
          (not (string/includes? path "/.recycle/"))
          (not (string/includes? path "/.recycle/"))
          (zero? pending-writes))
          (zero? pending-writes))
-        (p/let [disk-content (encrypt/decrypt disk-content)]
-          (state/pub-event! [:file/not-matched-from-disk path disk-content content]))
+        (state/pub-event! [:file/not-matched-from-disk path disk-content content])
 
 
         :else
         :else
         (->
         (->
          (p/let [result (ipc/ipc "writeFile" repo path content)
          (p/let [result (ipc/ipc "writeFile" repo path content)
                  mtime (gobj/get result "mtime")]
                  mtime (gobj/get result "mtime")]
            (db/set-file-last-modified-at! repo path mtime)
            (db/set-file-last-modified-at! repo path mtime)
-           (p/let [content (if (encrypt/encrypted-db? (state/get-current-repo))
-                             (encrypt/decrypt content)
-                             content)]
-             (db/set-file-content! repo path content))
+           (db/set-file-content! repo path content)
            (when ok-handler
            (when ok-handler
              (ok-handler repo path result))
              (ok-handler repo path result))
            result)
            result)

+ 1 - 4
src/main/frontend/fs/watcher_handler.cljs

@@ -3,7 +3,6 @@
             [frontend.config :as config]
             [frontend.config :as config]
             [frontend.db :as db]
             [frontend.db :as db]
             [frontend.db.model :as model]
             [frontend.db.model :as model]
-            [frontend.encrypt :as encrypt]
             [frontend.handler.editor :as editor]
             [frontend.handler.editor :as editor]
             [frontend.handler.extract :as extract]
             [frontend.handler.extract :as extract]
             [frontend.handler.file :as file-handler]
             [frontend.handler.file :as file-handler]
@@ -48,9 +47,7 @@
           pages-metadata-path (config/get-pages-metadata-path)
           pages-metadata-path (config/get-pages-metadata-path)
           {:keys [mtime]} stat
           {:keys [mtime]} stat
           db-content (or (db/get-file repo path) "")]
           db-content (or (db/get-file repo path) "")]
-      (when (and (or content (= type "unlink"))
-                 (not (encrypt/content-encrypted? content))
-                 (not (:encryption/graph-parsing? @state/state)))
+      (when (or content (= type "unlink"))
         (cond
         (cond
           (and (= "add" type)
           (and (= "add" type)
                (not= (string/trim content) (string/trim db-content))
                (not= (string/trim content) (string/trim db-content))

+ 0 - 173
src/main/frontend/git.cljs

@@ -1,173 +0,0 @@
-(ns frontend.git
-  (:refer-clojure :exclude [clone merge])
-  (:require [promesa.core :as p]
-            [frontend.util :as util]
-            [frontend.config :as config]
-            [clojure.string :as string]
-            [frontend.state :as state]
-            [cljs-bean.core :as bean]))
-
-;; only support GitHub now
-(defn get-username
-  []
-  (get-in @state/state [:me :name]))
-
-(defn get-cors-proxy
-  #_:clj-kondo/ignore
-  [repo-url]
-  (or
-   (when-not (string/blank? (:cors_proxy (state/get-me)))
-     (:cors_proxy (state/get-me)))
-   ;; Not working yet
-   ;; "https://cors-proxy-logseq.vercel.app"
-   "https://cors.logseq.com"))
-
-(defn set-username-email
-  [dir username email]
-  (-> (p/let [_ (js/window.workerThread.setConfig dir "user.name" username)]
-        (js/window.workerThread.setConfig dir "user.email" email))
-      (p/catch (fn [error]
-                 (prn "Git set config error:" error)))))
-
-(defn clone
-  [repo-url token]
-  (js/window.workerThread.clone (config/get-repo-dir repo-url)
-                                repo-url
-                                (get-cors-proxy repo-url)
-                                1
-                                (state/get-default-branch repo-url)
-                                (get-username)
-                                token))
-
-(defn list-files
-  [repo-url]
-  (js/window.workerThread.listFiles (config/get-repo-dir repo-url)
-                                    (state/get-default-branch repo-url)))
-
-(defn fetch
-  [repo-url token]
-  (js/window.workerThread.fetch (config/get-repo-dir repo-url)
-                                repo-url
-                                (get-cors-proxy repo-url)
-                                100
-                                (state/get-default-branch repo-url)
-                                (get-username)
-                                token))
-
-(defn merge
-  [repo-url]
-  (js/window.workerThread.merge (config/get-repo-dir repo-url)
-                                (state/get-default-branch repo-url)))
-
-(defn checkout
-  [repo-url]
-  (js/window.workerThread.checkout (config/get-repo-dir repo-url)
-                                   (state/get-default-branch repo-url)))
-
-(defn add
-  [repo-url file]
-  (when js/window.git
-    (js/window.workerThread.add (config/get-repo-dir repo-url)
-                                file)))
-
-(defn remove-file
-  [repo-url file]
-  (js/window.workerThread.remove (config/get-repo-dir repo-url)
-                                 file))
-
-(defn rename
-  [repo-url old-file new-file]
-  (util/p-handle
-   (add repo-url new-file)
-   (fn [_]
-     (remove-file repo-url old-file))))
-
-(defn commit
-  ([repo-url message]
-   (commit repo-url message nil))
-  ([repo-url message parent]
-   (let [{:keys [name email]} (:me @state/state)]
-     (js/window.workerThread.commit (config/get-repo-dir repo-url)
-                                    message
-                                    name
-                                    email
-                                    parent))))
-
-(defn add-all
-  "Equivalent to `git add --all`. Returns changed files."
-  [repo-url]
-  (p/let [repo-dir (config/get-repo-dir repo-url)
-
-          ; statusMatrix will return `[]` rather than raising an error if the repo directory does
-          ; not exist. So checks whether repo-dir exists before proceeding.
-          _ (-> (js/window.pfs.stat repo-dir)
-                (p/catch #(p/rejected (str "Cannot find repo dir '"
-                                           repo-dir
-                                           "' in fs when `git add --all`"))))
-
-          status-matrix (js/window.workerThread.statusMatrixChanged repo-dir)
-          changed-files (for [[file head work-dir _stage] status-matrix
-                              :when (not= head work-dir)]
-                          file)
-          unstaged-files (for [[file _head work-dir stage] status-matrix
-                               :when (not= work-dir stage)]
-                           file)
-          _ (p/all (for [file unstaged-files]
-                     (add repo-url file)))]
-    changed-files))
-
-(defn read-commit
-  [repo-url oid]
-  (js/window.workerThread.readCommit (config/get-repo-dir repo-url)
-                                     oid))
-
-
-;; FIXME: not working
-;; (defn descendent?
-;;   [repo-url oid ancestor]
-;;   (js/window.workerThread.isDescendent (config/get-repo-dir repo-url)
-;;                                        oid
-;;                                        ancestor))
-
-(defn descendent?
-  [repo-url oid ancestor]
-  (p/let [child (read-commit repo-url oid)
-          child-data (bean/->clj child)
-          parent (read-commit repo-url ancestor)
-          parent-data (bean/->clj parent)
-          child-time (get-in child-data [:commit :committer :timestamp])
-          parent-time (get-in parent-data [:commit :committer :timestamp])]
-    (> child-time parent-time)))
-
-(defn push
-  ([repo-url token]
-   (push repo-url token false))
-  ([repo-url token force?]
-   (js/window.workerThread.push (config/get-repo-dir repo-url)
-                                (get-cors-proxy repo-url)
-                                (state/get-default-branch repo-url)
-                                force?
-                                (get-username)
-                                token)))
-
-(defn get-diffs
-  [repo-url hash-1 hash-2]
-  (and js/window.git
-       (let [dir (config/get-repo-dir repo-url)]
-         (p/let [diffs (js/window.workerThread.getFileStateChanges hash-1 hash-2 dir)
-                 diffs (cljs-bean.core/->clj diffs)
-                 diffs (remove #(= (:type %) "equal") diffs)
-                 diffs (map (fn [diff]
-                              (update diff :path #(subs % 1))) diffs)]
-           diffs))))
-
-;; (resolve-ref (state/get-current-repo) "refs/remotes/origin/master")
-(defn resolve-ref
-  [repo-url ref]
-  (js/window.workerThread.resolveRef (config/get-repo-dir repo-url) ref))
-
-(defn write-ref!
-  [repo-url oid]
-  (js/window.workerThread.writeRef (config/get-repo-dir repo-url)
-                                   (state/get-default-branch repo-url)
-                                   oid))

+ 0 - 31
src/main/frontend/github.cljs

@@ -1,31 +0,0 @@
-(ns frontend.github
-  (:require [frontend.util :as util]
-            [goog.crypt.base64 :as b64]))
-
-(defonce API "https://api.github.com/")
-
-;; https://developer.github.com/v3/repos/contents/
-;; GET /repos/:owner/:repo/contents/:path?ref=oid
-;; header 'authorization: Basic PASSWORD'
-(defn get-content
-  [token repo-url path ref ok-handler error-handler]
-  (let [[owner repo-name] (util/get-git-owner-and-repo repo-url)
-        token (str "Basic " (b64/encodeString (str owner ":" token)))
-        url (util/format (str API "repos/%s/%s/contents/%s?ref=%s")
-                         owner
-                         repo-name
-                         path
-                         ref)]
-    (util/fetch-raw url
-                    {:method "get"
-                     :headers {:Accept "application/vnd.github.v3.raw"
-                               :Content-Type "application/json"
-                               :Authorization token}}
-                    (fn [content]
-                      (ok-handler
-                       {:repo-url repo-url
-                        :path path
-                        :ref ref
-                        :content content}))
-                    (fn [error]
-                      (error-handler error)))))

+ 53 - 92
src/main/frontend/handler.cljs

@@ -1,6 +1,5 @@
 (ns frontend.handler
 (ns frontend.handler
-  (:require [cljs-bean.core :as bean]
-            [electron.ipc :as ipc]
+  (:require [electron.ipc :as ipc]
             [electron.listener :as el]
             [electron.listener :as el]
             [frontend.components.page :as page]
             [frontend.components.page :as page]
             [frontend.config :as config]
             [frontend.config :as config]
@@ -11,7 +10,6 @@
             [frontend.db.react :as react]
             [frontend.db.react :as react]
             [frontend.error :as error]
             [frontend.error :as error]
             [frontend.handler.command-palette :as command-palette]
             [frontend.handler.command-palette :as command-palette]
-            [frontend.handler.common :as common-handler]
             [frontend.handler.events :as events]
             [frontend.handler.events :as events]
             [frontend.handler.file :as file-handler]
             [frontend.handler.file :as file-handler]
             [frontend.handler.notification :as notification]
             [frontend.handler.notification :as notification]
@@ -74,72 +72,44 @@
   (storage/set :db-schema (assoc db-schema/schema
   (storage/set :db-schema (assoc db-schema/schema
                                  :db/version db-schema/version)))
                                  :db/version db-schema/version)))
 
 
-(defn- get-me-and-repos
-  []
-  (let [me (and js/window.user (bean/->clj js/window.user))
-        logged? (:name me)
-        repos (if logged?
-                (:repos me)
-                [{:url config/local-repo}])]
-    {:me me
-     :logged? logged?
-     :repos repos}))
-
 (defn restore-and-setup!
 (defn restore-and-setup!
-  [me repos logged? old-db-schema]
-  (let [interval (atom nil)
-        inner-fn (fn []
-                   (when (and @interval js/window.pfs)
-                     (js/clearInterval @interval)
-                     (reset! interval nil)
-                     (-> (db/restore!
-                          (assoc me :repos repos)
-                          old-db-schema
-                          (fn [repo]
-                            (file-handler/restore-config! repo false)))
-                         (p/then
-                          (fn []
-                            ;; try to load custom css only for current repo
-                            (ui-handler/add-style-if-exists!)
-
-                            ;; install after config is restored
-                            (shortcut/unlisten-all)
-                            (shortcut/refresh!)
-
-                            (cond
-                              (and (not logged?)
-                                   (not (seq (db/get-files config/local-repo)))
-                                   ;; Not native local directory
-                                   (not (some config/local-db? (map :url repos)))
-                                   (not (mobile-util/is-native-platform?)))
-                              ;; will execute `(state/set-db-restoring! false)` inside
-                              (repo-handler/setup-local-repo-if-not-exists!)
-
-                              :else
-                              (state/set-db-restoring! false))
-
-                            (store-schema!)
-
-                            (state/pub-event! [:modal/nfs-ask-permission])
-
-                            (page-handler/init-commands!)
-
-                            (when (seq (:repos me))
-                              ;; FIXME: handle error
-                              (common-handler/request-app-tokens!
-                               (fn []
-                                 (repo-handler/clone-and-pull-repos me))
-                               (fn []
-                                 (js/console.error "Failed to request GitHub app tokens."))))
-
-                            (watch-for-date!)
-                            (file-handler/watch-for-current-graph-dir!)
-                            (state/pub-event! [:graph/ready (state/get-current-repo)])))
-                         (p/catch (fn [error]
-                                    (log/error :exception error))))))
-        interval-id (js/setInterval inner-fn 50)]
-    ;; clear this interval
-    (reset! interval interval-id)))
+  [repos old-db-schema]
+  (-> (db/restore!
+       {:repos repos}
+       old-db-schema
+       (fn [repo]
+         (file-handler/restore-config! repo false)))
+      (p/then
+       (fn []
+         ;; try to load custom css only for current repo
+         (ui-handler/add-style-if-exists!)
+
+         ;; install after config is restored
+         (shortcut/unlisten-all)
+         (shortcut/refresh!)
+
+         (cond
+           (and (not (seq (db/get-files config/local-repo)))
+                ;; Not native local directory
+                (not (some config/local-db? (map :url repos)))
+                (not (mobile-util/is-native-platform?)))
+           ;; will execute `(state/set-db-restoring! false)` inside
+           (repo-handler/setup-local-repo-if-not-exists!)
+
+           :else
+           (state/set-db-restoring! false))
+
+         (store-schema!)
+
+         (state/pub-event! [:modal/nfs-ask-permission])
+
+         (page-handler/init-commands!)
+
+         (watch-for-date!)
+         (file-handler/watch-for-current-graph-dir!)
+         (state/pub-event! [:graph/ready (state/get-current-repo)])))
+      (p/catch (fn [error]
+                 (log/error :exception error)))))
 
 
 (defn- handle-connection-change
 (defn- handle-connection-change
   [e]
   [e]
@@ -168,23 +138,16 @@
                                nil)))))))
                                nil)))))))
 (defn- get-repos
 (defn- get-repos
   []
   []
-  (let [logged? (state/deprecated-logged?)
-        me (state/get-me)]
-    (p/let [nfs-dbs (db-persist/get-all-graphs)
-            nfs-dbs (map (fn [db]
-                           {:url db :nfs? true}) nfs-dbs)]
-      (cond
-        logged?
-        (concat
-         nfs-dbs
-         (:repos me))
-
-        (seq nfs-dbs)
-        nfs-dbs
-
-        :else
-        [{:url config/local-repo
-          :example? true}]))))
+  (p/let [nfs-dbs (db-persist/get-all-graphs)
+          nfs-dbs (map (fn [db]
+                         {:url db :nfs? true}) nfs-dbs)]
+    (cond
+      (seq nfs-dbs)
+      nfs-dbs
+
+      :else
+      [{:url config/local-repo
+        :example? true}])))
 
 
 (defn clear-cache!
 (defn clear-cache!
   []
   []
@@ -206,9 +169,7 @@
 (defn start!
 (defn start!
   [render]
   [render]
   (set-global-error-notification!)
   (set-global-error-notification!)
-  (let [db-schema (storage/get :db-schema)
-        {:keys [me logged?]} (get-me-and-repos)]
-    (when me (state/set-state! :me me))
+  (let [db-schema (storage/get :db-schema)]
     (register-components-fns!)
     (register-components-fns!)
     (state/set-db-restoring! true)
     (state/set-db-restoring! true)
     (render)
     (render)
@@ -228,10 +189,10 @@
     (events/run!)
     (events/run!)
 
 
     (p/let [repos (get-repos)]
     (p/let [repos (get-repos)]
-           (state/set-repos! repos)
-           (restore-and-setup! me repos logged? db-schema)
-           (when (mobile-util/is-native-platform?)
-             (p/do! (mobile-util/hide-splash))))
+      (state/set-repos! repos)
+      (restore-and-setup! repos db-schema)
+      (when (mobile-util/is-native-platform?)
+        (p/do! (mobile-util/hide-splash))))
 
 
     (reset! db/*sync-search-indice-f search/sync-search-indice!)
     (reset! db/*sync-search-indice-f search/sync-search-indice!)
     (db/run-batch-txs!)
     (db/run-batch-txs!)

+ 0 - 116
src/main/frontend/handler/common.cljs

@@ -1,61 +1,19 @@
 (ns frontend.handler.common
 (ns frontend.handler.common
   (:require [cljs-bean.core :as bean]
   (:require [cljs-bean.core :as bean]
-            [cljs-time.core :as t]
-            [cljs-time.format :as tf]
             [cljs.reader :as reader]
             [cljs.reader :as reader]
             [clojure.string :as string]
             [clojure.string :as string]
             [dommy.core :as d]
             [dommy.core :as d]
             [frontend.config :as config]
             [frontend.config :as config]
             [frontend.date :as date]
             [frontend.date :as date]
             [frontend.db :as db]
             [frontend.db :as db]
-            [frontend.git :as git]
-            [frontend.spec :as spec]
             [frontend.state :as state]
             [frontend.state :as state]
             [frontend.util :as util]
             [frontend.util :as util]
             [frontend.util.property :as property]
             [frontend.util.property :as property]
             [goog.object :as gobj]
             [goog.object :as gobj]
             ["ignore" :as Ignore]
             ["ignore" :as Ignore]
             [lambdaisland.glogi :as log]
             [lambdaisland.glogi :as log]
-            [promesa.core :as p]
             [borkdude.rewrite-edn :as rewrite]))
             [borkdude.rewrite-edn :as rewrite]))
 
 
-(defn get-ref
-  [repo-url]
-  (git/resolve-ref repo-url "HEAD"))
-
-(defn get-remote-ref
-  [repo-url]
-  (let [branch (state/get-default-branch repo-url)]
-    ;; TODO: what if the remote is not named "origin", check the api from isomorphic-git
-    (git/resolve-ref repo-url (str "refs/remotes/origin/" branch))))
-
-(defn check-changed-files-status
-  ([]
-   (check-changed-files-status (state/get-current-repo)))
-  ([repo]
-   (when (and
-          repo
-          (db/cloned? repo)
-          (gobj/get js/window "workerThread")
-          (gobj/get js/window.workerThread "getChangedFiles"))
-     (->
-      (p/let [files (js/window.workerThread.getChangedFiles (config/get-repo-dir repo))
-              files (bean/->clj files)]
-        (->
-         (p/let [remote-latest-commit (get-remote-ref repo)
-                 local-latest-commit (get-ref repo)]
-           (p/let [descendent? (git/descendent? repo local-latest-commit remote-latest-commit)
-                   diffs (git/get-diffs repo local-latest-commit remote-latest-commit)]
-             (let [files (if descendent?
-                           (->> (concat (map :path diffs) files)
-                                distinct)
-                           files)]
-               (state/set-changed-files! repo files))))
-         (p/catch (fn [error]
-                    (log/warn :git/ref-not-found {:error error})))))
-      (p/catch (fn [error]
-                 (js/console.dir error)))))))
-
 (defn copy-to-clipboard-without-id-property!
 (defn copy-to-clipboard-without-id-property!
   [format content]
   [format content]
   (util/copy-to-clipboard! (property/remove-id-property format content)))
   (util/copy-to-clipboard! (property/remove-id-property format content)))
@@ -93,15 +51,6 @@
                 (hidden? path patterns))) files)
                 (hidden? path patterns))) files)
     files))
     files))
 
 
-(comment
-  (let [repo (state/get-current-repo)]
-    (p/let [remote-oid (get-remote-ref repo)
-            local-oid (get-ref repo)
-            diffs (git/get-diffs repo local-oid remote-oid)]
-      (println {:local-oid local-oid
-                :remote-oid remote-oid
-                :diffs diffs}))))
-
 (defn get-config
 (defn get-config
   [repo-url]
   [repo-url]
   (db/get-file repo-url (config/get-config-path)))
   (db/get-file repo-url (config/get-config-path)))
@@ -131,71 +80,6 @@
       (state/set-config! repo-url config)
       (state/set-config! repo-url config)
       config)))
       config)))
 
 
-(defn read-metadata!
-  [content]
-  (try
-   (reader/read-string content)
-   (catch :default e
-     (log/error :parse/metadata-failed e)
-     {})))
-
-(defn request-app-tokens!
-  [ok-handler error-handler]
-  (let [repos (state/get-repos)
-        installation-ids (->> (map :installation_id repos)
-                              (remove nil?)
-                              (distinct))]
-    (when (or (seq repos)
-              (seq installation-ids))
-      (util/post (str config/api "refresh_github_token")
-                 {:installation-ids installation-ids
-                  :repos repos}
-                 (fn [result]
-                   (state/set-github-installation-tokens! result)
-                   (when ok-handler (ok-handler)))
-                 (fn [error]
-                   (log/error :token/http-request-failed error)
-                   (js/console.dir error)
-                   (when error-handler (error-handler)))))))
-
-(defn- get-github-token*
-  [repo]
-  (spec/validate :repos/url repo)
-  (when repo
-    (let [{:keys [token expires_at] :as token-state}
-          (state/get-github-token repo)]
-      (spec/validate :repos/repo token-state)
-      (if (and (map? token-state)
-               (string? expires_at))
-        (let [expires-at (tf/parse (tf/formatters :date-time-no-ms) expires_at)
-              now (t/now)
-              expired? (t/after? now expires-at)]
-          {:exist? true
-           :expired? expired?
-           :token token})
-        {:exist? false}))))
-
-(defn get-github-token
-  ([]
-   (get-github-token  (state/get-current-repo)))
-  ([repo]
-   (when-not (config/local-db? repo)
-     (js/Promise.
-      (fn [resolve reject]
-        (let [{:keys [expired? token exist?]} (get-github-token* repo)
-              valid-token? (and exist? (not expired?))]
-          (if valid-token?
-            (resolve token)
-            (request-app-tokens!
-             (fn []
-               (let [{:keys [expired? token exist?] :as token-m} (get-github-token* repo)
-                     valid-token? (and exist? (not expired?))]
-                 (if valid-token?
-                   (resolve token)
-                   (do (log/error :token/failed-get-token token-m)
-                       (reject)))))
-             nil))))))))
-
 (defn get-page-default-properties
 (defn get-page-default-properties
   [page-name]
   [page-name]
   {:title page-name
   {:title page-name

+ 2 - 5
src/main/frontend/handler/editor.cljs

@@ -24,7 +24,6 @@
             [frontend.handler.image :as image-handler]
             [frontend.handler.image :as image-handler]
             [frontend.handler.notification :as notification]
             [frontend.handler.notification :as notification]
             [frontend.handler.repeated :as repeated]
             [frontend.handler.repeated :as repeated]
-            [frontend.handler.repo :as repo-handler]
             [frontend.handler.route :as route-handler]
             [frontend.handler.route :as route-handler]
             [frontend.image :as image]
             [frontend.image :as image]
             [frontend.idb :as idb]
             [frontend.idb :as idb]
@@ -398,7 +397,7 @@
         (merge (if level {:block/level level} {})))))
         (merge (if level {:block/level level} {})))))
 
 
 (defn- save-block-inner!
 (defn- save-block-inner!
-  [repo block value {}]
+  [_repo block value {}]
   (let [block (assoc block :block/content value)
   (let [block (assoc block :block/content value)
         block (apply dissoc block db-schema/retract-attributes)]
         block (apply dissoc block db-schema/retract-attributes)]
     (profile
     (profile
@@ -414,9 +413,7 @@
            (when (and (:block/pre-block? block)
            (when (and (:block/pre-block? block)
                       (not (string/blank? title))
                       (not (string/blank? title))
                       (not= (util/page-name-sanity-lc title) old-page-name))
                       (not= (util/page-name-sanity-lc title) old-page-name))
-             (state/pub-event! [:page/title-property-changed old-page-name title]))))))
-
-    (repo-handler/push-if-auto-enabled! repo)))
+             (state/pub-event! [:page/title-property-changed old-page-name title]))))))))
 
 
 (defn save-block-if-changed!
 (defn save-block-if-changed!
   ([block value]
   ([block value]

+ 1 - 18
src/main/frontend/handler/events.cljs

@@ -6,7 +6,6 @@
             [frontend.components.diff :as diff]
             [frontend.components.diff :as diff]
             [frontend.handler.plugin :as plugin-handler]
             [frontend.handler.plugin :as plugin-handler]
             [frontend.components.plugins :as plugin]
             [frontend.components.plugins :as plugin]
-            [frontend.components.encryption :as encryption]
             [frontend.components.git :as git-component]
             [frontend.components.git :as git-component]
             [frontend.components.shell :as shell]
             [frontend.components.shell :as shell]
             [frontend.components.search :as search]
             [frontend.components.search :as search]
@@ -35,7 +34,6 @@
             [rum.core :as rum]
             [rum.core :as rum]
             [frontend.modules.instrumentation.posthog :as posthog]
             [frontend.modules.instrumentation.posthog :as posthog]
             [frontend.mobile.util :as mobile-util]
             [frontend.mobile.util :as mobile-util]
-            [frontend.encrypt :as encrypt]
             [promesa.core :as p]
             [promesa.core :as p]
             [frontend.fs :as fs]
             [frontend.fs :as fs]
             [clojure.string :as string]
             [clojure.string :as string]
@@ -66,17 +64,6 @@
 (defmethod handle :repo/install-error [[_ repo-url title]]
 (defmethod handle :repo/install-error [[_ repo-url title]]
   (show-install-error! repo-url title))
   (show-install-error! repo-url title))
 
 
-(defmethod handle :modal/encryption-setup-dialog [[_ repo-url close-fn]]
-  (state/set-modal!
-   (encryption/encryption-setup-dialog repo-url close-fn)))
-
-(defmethod handle :modal/encryption-input-secret-dialog [[_ repo-url db-encrypted-secret close-fn]]
-  (state/set-modal!
-   (encryption/encryption-input-secret-dialog
-    repo-url
-    db-encrypted-secret
-    close-fn)))
-
 (defmethod handle :graph/added [[_ repo {:keys [empty-graph?]}]]
 (defmethod handle :graph/added [[_ repo {:keys [empty-graph?]}]]
   (db/set-key-value repo :ast/version db-schema/ast-version)
   (db/set-key-value repo :ast/version db-schema/ast-version)
   (search-handler/rebuild-indices!)
   (search-handler/rebuild-indices!)
@@ -93,7 +80,6 @@
          (state/set-file-sync-state nil)))
          (state/set-file-sync-state nil)))
 
 
 (defn- graph-switch [graph]
 (defn- graph-switch [graph]
-  (repo-handler/push-if-auto-enabled! (state/get-current-repo))
   (state/set-current-repo! graph)
   (state/set-current-repo! graph)
   ;; load config
   ;; load config
   (common-handler/reset-config! graph nil)
   (common-handler/reset-config! graph nil)
@@ -107,8 +93,6 @@
 
 
   (file-sync-stop-when-switch-graph))
   (file-sync-stop-when-switch-graph))
 
 
-
-
 (def persist-db-noti-m
 (def persist-db-noti-m
   {:before     #(notification/show!
   {:before     #(notification/show!
                  (ui/loading (t :graph/persist))
                  (ui/loading (t :graph/persist))
@@ -265,8 +249,7 @@
                         {:label "diff__cp"}))))
                         {:label "diff__cp"}))))
 
 
 (defmethod handle :modal/display-file-version [[_ path content hash]]
 (defmethod handle :modal/display-file-version [[_ path content hash]]
-  (p/let [content (when content (encrypt/decrypt content))]
-    (state/set-modal! #(git-component/file-specific-version path hash content))))
+  (state/set-modal! #(git-component/file-specific-version path hash content)))
 
 
 (defmethod handle :graph/ready [[_ repo]]
 (defmethod handle :graph/ready [[_ repo]]
   (search-handler/rebuild-indices-when-stale! repo)
   (search-handler/rebuild-indices-when-stale! repo)

+ 0 - 2
src/main/frontend/handler/external.cljs

@@ -2,7 +2,6 @@
   (:require [frontend.external :as external]
   (:require [frontend.external :as external]
             [frontend.handler.file :as file-handler]
             [frontend.handler.file :as file-handler]
             [frontend.handler.repo :as repo-handler]
             [frontend.handler.repo :as repo-handler]
-            [frontend.handler.common :as common-handler]
             [frontend.state :as state]
             [frontend.state :as state]
             [frontend.date :as date]
             [frontend.date :as date]
             [frontend.config :as config]
             [frontend.config :as config]
@@ -64,7 +63,6 @@
     (let [files (external/to-markdown-files :roam data {})]
     (let [files (external/to-markdown-files :roam data {})]
       (index-files! repo files
       (index-files! repo files
                     (fn []
                     (fn []
-                      (common-handler/check-changed-files-status)
                       (finished-ok-handler))))))
                       (finished-ok-handler))))))
 
 
 
 

+ 0 - 51
src/main/frontend/handler/file.cljs

@@ -2,18 +2,15 @@
   (:refer-clojure :exclude [load-file])
   (:refer-clojure :exclude [load-file])
   (:require ["/frontend/utils" :as utils]
   (:require ["/frontend/utils" :as utils]
             [borkdude.rewrite-edn :as rewrite]
             [borkdude.rewrite-edn :as rewrite]
-            [cljs-bean.core :as bean]
             [cljs-time.coerce :as tc]
             [cljs-time.coerce :as tc]
             [cljs-time.core :as t]
             [cljs-time.core :as t]
             [cljs.core.async.interop :refer [<p!]]
             [cljs.core.async.interop :refer [<p!]]
             [clojure.core.async :as async]
             [clojure.core.async :as async]
-            [clojure.string :as string]
             [frontend.config :as config]
             [frontend.config :as config]
             [frontend.db :as db]
             [frontend.db :as db]
             [frontend.format :as format]
             [frontend.format :as format]
             [frontend.fs :as fs]
             [frontend.fs :as fs]
             [frontend.fs.nfs :as nfs]
             [frontend.fs.nfs :as nfs]
-            [frontend.git :as git]
             [frontend.handler.common :as common-handler]
             [frontend.handler.common :as common-handler]
             [frontend.handler.extract :as extract-handler]
             [frontend.handler.extract :as extract-handler]
             [frontend.handler.ui :as ui-handler]
             [frontend.handler.ui :as ui-handler]
@@ -49,10 +46,6 @@
        (contains? formats format)))
        (contains? formats format)))
    files))
    files))
 
 
-(defn- only-supported-formats
-  [files]
-  (keep-formats files (config/supported-formats)))
-
 (defn- only-text-formats
 (defn- only-text-formats
   [files]
   [files]
   (keep-formats files (config/text-formats)))
   (keep-formats files (config/text-formats)))
@@ -70,20 +63,6 @@
      (when config-content
      (when config-content
        (common-handler/reset-config! repo-url config-content)))))
        (common-handler/reset-config! repo-url config-content)))))
 
 
-(defn load-files
-  [repo-url]
-  (state/set-cloning! false)
-  (state/set-loading-files! repo-url true)
-  (p/let [files (git/list-files repo-url)
-          files (bean/->clj files)
-          config-content (load-file repo-url
-                                    (config/get-config-path repo-url))
-          files (if config-content
-                  (let [config (restore-config! repo-url config-content true)]
-                    (common-handler/remove-hidden-files files config identity))
-                  files)]
-    (only-supported-formats files)))
-
 (defn load-files-contents!
 (defn load-files-contents!
   [repo-url files ok-handler]
   [repo-url files ok-handler]
   (let [images (only-image-formats files)
   (let [images (only-image-formats files)
@@ -273,25 +252,6 @@
                    (js/console.error error)
                    (js/console.error error)
                    (async/put! chan false))))))
                    (async/put! chan false))))))
 
 
-(defn remove-file!
-  [repo file]
-  (when-not (string/blank? file)
-    (->
-     (p/let [_ (or (config/local-db? repo) (git/remove-file repo file))
-             _ (fs/unlink! repo (config/get-repo-path repo file) nil)]
-       (when-let [file (db/entity repo [:file/path file])]
-         (common-handler/check-changed-files-status)
-         (let [file-id (:db/id file)
-               page-id (db/get-file-page-id (:file/path file))
-               tx-data (map
-                         (fn [db-id]
-                           [:db.fn/retractEntity db-id])
-                         (remove nil? [file-id page-id]))]
-           (when (seq tx-data)
-             (db/transact! repo tx-data)))))
-     (p/catch (fn [err]
-                (js/console.error "error: " err))))))
-
 (defn run-writes-chan!
 (defn run-writes-chan!
   []
   []
   (let [chan (state/get-file-write-chan)]
   (let [chan (state/get-file-write-chan)]
@@ -311,17 +271,6 @@
     (when-let [dir (config/get-repo-dir repo)]
     (when-let [dir (config/get-repo-dir repo)]
       (fs/watch-dir! dir))))
       (fs/watch-dir! dir))))
 
 
-(defn create-metadata-file
-  [repo-url encrypted?]
-  (let [repo-dir (config/get-repo-dir repo-url)
-        path (str config/app-name "/" config/metadata-file)
-        file-path (str "/" path)
-        default-content (if encrypted? "{:db/encrypted? true}" "{}")]
-    (p/let [_ (fs/mkdir-if-not-exists (str repo-dir "/" config/app-name))
-            file-exists? (fs/create-if-not-exists repo-url repo-dir file-path default-content)]
-      (when-not file-exists?
-        (reset-file! repo-url path default-content)))))
-
 (defn create-pages-metadata-file
 (defn create-pages-metadata-file
   [repo-url]
   [repo-url]
   (let [repo-dir (config/get-repo-dir repo-url)
   (let [repo-dir (config/get-repo-dir repo-url)

+ 0 - 63
src/main/frontend/handler/git.cljs

@@ -1,63 +0,0 @@
-(ns frontend.handler.git
-  (:require [cljs-time.local :as tl]
-            [frontend.config :as config]
-            [frontend.date :as date]
-            [frontend.db :as db]
-            [frontend.git :as git]
-            [frontend.handler.common :as common-handler]
-            [frontend.handler.notification :as notification]
-            [frontend.handler.route :as route-handler]
-            [frontend.state :as state]
-            [frontend.util :as util]
-            [lambdaisland.glogi :as log]
-            [promesa.core :as p]))
-
-(defn set-git-status!
-  [repo-url value]
-  (db/set-key-value repo-url :git/status value)
-  (state/set-git-status! repo-url value))
-
-(defn set-git-last-pulled-at!
-  [repo-url]
-  (db/set-key-value repo-url :git/last-pulled-at
-                    (date/get-date-time-string (tl/local-now))))
-
-(defn set-git-error!
-  [repo-url value]
-  (db/set-key-value repo-url :git/error (when value (str value))))
-
-(defn git-add
-  ([repo-url file]
-   (git-add repo-url file true))
-  ([repo-url file update-status?]
-   (when (and (not (config/local-db? repo-url))
-              (not (util/electron?)))
-     (-> (p/let [_result (git/add repo-url file)]
-           (when update-status?
-             (common-handler/check-changed-files-status)))
-         (p/catch (fn [error]
-                    (println "git add '" file "' failed: " error)
-                    (js/console.error error)))))))
-
-(defn commit-and-force-push!
-  [commit-message pushing?]
-  (when-let [repo (frontend.state/get-current-repo)]
-    (->
-     (p/let [remote-oid (common-handler/get-remote-ref repo)
-             commit-oid (git/commit repo commit-message (array remote-oid))
-             _result (git/write-ref! repo commit-oid)
-             token (common-handler/get-github-token repo)
-             _push-result (git/push repo token true)]
-       (reset! pushing? false)
-       (notification/clear! nil)
-       (route-handler/redirect-to-home!))
-     (p/catch (fn [error]
-                (log/error :git/commit-and-force-push! error))))))
-
-(defn git-set-username-email!
-  [repo-url {:keys [name email]}]
-  (when (and name email)
-    (git/set-username-email
-     (config/get-repo-dir repo-url)
-     name
-     email)))

+ 1 - 61
src/main/frontend/handler/metadata.cljs

@@ -1,44 +1,12 @@
 (ns frontend.handler.metadata
 (ns frontend.handler.metadata
-  (:require [cljs.reader :as reader]
-            [cljs.pprint]
-            [clojure.string :as string]
-            [datascript.db :as ddb]
+  (:require [cljs.pprint]
             [frontend.config :as config]
             [frontend.config :as config]
             [frontend.db :as db]
             [frontend.db :as db]
             [frontend.fs :as fs]
             [frontend.fs :as fs]
             [frontend.handler.common :as common-handler]
             [frontend.handler.common :as common-handler]
             [frontend.handler.file :as file-handler]
             [frontend.handler.file :as file-handler]
-            [frontend.state :as state]
             [promesa.core :as p]))
             [promesa.core :as p]))
 
 
-(def default-metadata-str "{}")
-
-(defn set-metadata!
-  [k v]
-  (when-let [repo (state/get-current-repo)]
-    (let [encrypted? (= k :db/encrypted-secret)
-          path (config/get-metadata-path)
-          file-content (db/get-file path)]
-      (p/let [_ (file-handler/create-metadata-file repo false)]
-        (let [metadata-str (or file-content default-metadata-str)
-              metadata (try
-                         (reader/read-string metadata-str)
-                         (catch js/Error e
-                           (println "Parsing metadata.edn failed: ")
-                           (js/console.dir e)
-                           {}))
-              new-metadata (cond
-                             (= k :block/properties)
-                             (update metadata :block/properties v) ; v should be a function
-                             :else
-                             (let [ks (if (vector? k) k [k])]
-                               (assoc-in metadata ks v)))
-              new-metadata (if encrypted?
-                             (assoc new-metadata :db/encrypted? true)
-                             new-metadata)
-              new-content (pr-str new-metadata)]
-          (file-handler/set-file-content! repo path new-content))))))
-
 (defn set-pages-metadata!
 (defn set-pages-metadata!
   [repo]
   [repo]
   (let [path (config/get-pages-metadata-path repo)
   (let [path (config/get-pages-metadata-path repo)
@@ -55,31 +23,3 @@
                         path
                         path
                         new-content
                         new-content
                         {})))))
                         {})))))
-
-(defn set-db-encrypted-secret!
-  [encrypted-secret]
-  (when-not (string/blank? encrypted-secret)
-    (set-metadata! :db/encrypted-secret encrypted-secret)))
-
-(defn- handler-properties!
-  [all-properties properties-tx]
-  (reduce
-   (fn [acc datom]
-     (let [v (:v datom)
-           id (or (get v :id)
-                  (get v :title))]
-       (if id
-         (let [added? (ddb/datom-added datom)
-               remove-all-properties? (and (not added?)
-                                           ;; only id
-                                           (= 1 (count v)))]
-           (if remove-all-properties?
-             (dissoc acc id)
-             (assoc acc id v)))
-         acc)))
-   all-properties
-   properties-tx))
-
-(defn update-properties!
-  [properties-tx]
-  (set-metadata! :block/properties #(handler-properties! % properties-tx)))

+ 3 - 14
src/main/frontend/handler/page.cljs

@@ -13,11 +13,9 @@
             [frontend.db.conn :as conn]
             [frontend.db.conn :as conn]
             [frontend.format.block :as block]
             [frontend.format.block :as block]
             [frontend.fs :as fs]
             [frontend.fs :as fs]
-            [frontend.git :as git]
             [frontend.handler.common :as common-handler]
             [frontend.handler.common :as common-handler]
             [frontend.handler.editor :as editor-handler]
             [frontend.handler.editor :as editor-handler]
             [frontend.handler.notification :as notification]
             [frontend.handler.notification :as notification]
-            [frontend.handler.repo :as repo-handler]
             [frontend.handler.route :as route-handler]
             [frontend.handler.route :as route-handler]
             [frontend.handler.ui :as ui-handler]
             [frontend.handler.ui :as ui-handler]
             [frontend.handler.web.nfs :as web-nfs]
             [frontend.handler.web.nfs :as web-nfs]
@@ -153,14 +151,10 @@
     (when-not (string/blank? file-path)
     (when-not (string/blank? file-path)
       (db/transact! [[:db.fn/retractEntity [:file/path file-path]]])
       (db/transact! [[:db.fn/retractEntity [:file/path file-path]]])
       (->
       (->
-       (p/let [_ (or (config/local-db? repo)
-                     (git/remove-file repo file-path))
-               _ (and (config/local-db? repo)
+       (p/let [_ (and (config/local-db? repo)
                       (mobile-util/is-native-platform?)
                       (mobile-util/is-native-platform?)
                       (fs/delete-file! repo file-path file-path {}))
                       (fs/delete-file! repo file-path file-path {}))
-               _ (fs/unlink! repo (config/get-repo-path repo file-path) nil)]
-         (common-handler/check-changed-files-status)
-         (repo-handler/push-if-auto-enabled! repo))
+               _ (fs/unlink! repo (config/get-repo-path repo file-path) nil)])
        (p/catch (fn [err]
        (p/catch (fn [err]
                   (js/console.error "error: " err)))))))
                   (js/console.error "error: " err)))))))
 
 
@@ -183,10 +177,7 @@
     (db/transact! repo [{:db/id (:db/id file)
     (db/transact! repo [{:db/id (:db/id file)
                          :file/path new-path}])
                          :file/path new-path}])
     (->
     (->
-     (p/let [_ (fs/rename! repo old-path new-path)
-             _ (when-not (config/local-db? repo)
-                 (git/rename repo old-path new-path))]
-       (common-handler/check-changed-files-status)
+     (p/let [_ (fs/rename! repo old-path new-path)]
        (ok-handler))
        (ok-handler))
      (p/catch (fn [error]
      (p/catch (fn [error]
                 (println "file rename failed: " error))))))
                 (println "file rename failed: " error))))))
@@ -414,8 +405,6 @@
                                   :push        false
                                   :push        false
                                   :path-params {:name new-page-name}}))
                                   :path-params {:name new-page-name}}))
 
 
-      (repo-handler/push-if-auto-enabled! repo)
-
       (when (favorited? old-page-name)
       (when (favorited? old-page-name)
         (p/do!
         (p/do!
          (unfavorite-page! old-page-name)
          (unfavorite-page! old-page-name)

+ 35 - 329
src/main/frontend/handler/repo.cljs

@@ -1,20 +1,15 @@
 (ns frontend.handler.repo
 (ns frontend.handler.repo
   (:refer-clojure :exclude [clone])
   (:refer-clojure :exclude [clone])
-  (:require [cljs-bean.core :as bean]
-            [clojure.string :as string]
+  (:require [clojure.string :as string]
             [frontend.config :as config]
             [frontend.config :as config]
             [frontend.context.i18n :refer [t]]
             [frontend.context.i18n :refer [t]]
             [frontend.date :as date]
             [frontend.date :as date]
             [frontend.db :as db]
             [frontend.db :as db]
-            [frontend.encrypt :as encrypt]
             [frontend.format :as format]
             [frontend.format :as format]
             [frontend.fs :as fs]
             [frontend.fs :as fs]
             [frontend.fs.nfs :as nfs]
             [frontend.fs.nfs :as nfs]
-            [frontend.git :as git]
             [frontend.handler.common :as common-handler]
             [frontend.handler.common :as common-handler]
             [frontend.handler.file :as file-handler]
             [frontend.handler.file :as file-handler]
-            [frontend.handler.git :as git-handler]
-            [frontend.handler.notification :as notification]
             [frontend.handler.route :as route-handler]
             [frontend.handler.route :as route-handler]
             [frontend.handler.ui :as ui-handler]
             [frontend.handler.ui :as ui-handler]
             [frontend.handler.metadata :as metadata-handler]
             [frontend.handler.metadata :as metadata-handler]
@@ -127,25 +122,21 @@
             (p/let [_ (file-handler/reset-file! repo-url path content)]
             (p/let [_ (file-handler/reset-file! repo-url path content)]
               (p/let [_ (fs/create-if-not-exists repo-url repo-dir file-path content)]
               (p/let [_ (fs/create-if-not-exists repo-url repo-dir file-path content)]
                 (when-not (state/editing?)
                 (when-not (state/editing?)
-                  (ui-handler/re-render-root!))
-                (git-handler/git-add repo-url path))))
+                  (ui-handler/re-render-root!)))))
           (when-not (state/editing?)
           (when-not (state/editing?)
             (ui-handler/re-render-root!)))))))
             (ui-handler/re-render-root!)))))))
 
 
 (defn create-default-files!
 (defn create-default-files!
-  ([repo-url]
-   (create-default-files! repo-url false))
-  ([repo-url encrypted?]
-   (spec/validate :repos/url repo-url)
-   (let [repo-dir (config/get-repo-dir repo-url)]
-     (p/let [_ (fs/mkdir-if-not-exists (str repo-dir "/" config/app-name))
-             _ (fs/mkdir-if-not-exists (str repo-dir "/" config/app-name "/" config/recycle-dir))
-             _ (fs/mkdir-if-not-exists (str repo-dir "/" (config/get-journals-directory)))
-             _ (file-handler/create-metadata-file repo-url encrypted?)
-             _ (create-config-file-if-not-exists repo-url)
-             _ (create-contents-file repo-url)
-             _ (create-custom-theme repo-url)]
-       (state/pub-event! [:page/create-today-journal repo-url])))))
+  [repo-url]
+  (spec/validate :repos/url repo-url)
+  (let [repo-dir (config/get-repo-dir repo-url)]
+    (p/let [_ (fs/mkdir-if-not-exists (str repo-dir "/" config/app-name))
+            _ (fs/mkdir-if-not-exists (str repo-dir "/" config/app-name "/" config/recycle-dir))
+            _ (fs/mkdir-if-not-exists (str repo-dir "/" (config/get-journals-directory)))
+            _ (create-config-file-if-not-exists repo-url)
+            _ (create-contents-file repo-url)
+            _ (create-custom-theme repo-url)]
+      (state/pub-event! [:page/create-today-journal repo-url]))))
 
 
 (defn- load-pages-metadata!
 (defn- load-pages-metadata!
   "force?: if set true, skip the metadata timestamp range check"
   "force?: if set true, skip the metadata timestamp range check"
@@ -188,7 +179,7 @@
     (util/profile "update-pages-metadata!" (load-pages-metadata! repo file-paths files force?))))
     (util/profile "update-pages-metadata!" (load-pages-metadata! repo file-paths files force?))))
 
 
 (defn- parse-and-load-file!
 (defn- parse-and-load-file!
-  [repo-url file new-graph? metadata]
+  [repo-url file new-graph?]
   (state/set-parsing-state! (fn [m]
   (state/set-parsing-state! (fn [m]
                               (assoc m :current-parsing-file (:file/path file))))
                               (assoc m :current-parsing-file (:file/path file))))
   (try
   (try
@@ -197,8 +188,7 @@
                              (:file/content file)
                              (:file/content file)
                              {:new-graph? new-graph?
                              {:new-graph? new-graph?
                               :re-render-root? false
                               :re-render-root? false
-                              :from-disk? true
-                              :metadata metadata})
+                              :from-disk? true})
     (catch :default e
     (catch :default e
       (state/set-parsing-state! (fn [m]
       (state/set-parsing-state! (fn [m]
                                   (update m :failed-parsing-files conj [(:file/path file) e])))))
                                   (update m :failed-parsing-files conj [(:file/path file) e])))))
@@ -206,21 +196,18 @@
                               (update m :finished inc))))
                               (update m :finished inc))))
 
 
 (defn- after-parse
 (defn- after-parse
-  [repo-url files file-paths first-clone? db-encrypted? re-render? re-render-opts opts graph-added-chan]
+  [repo-url files file-paths re-render? re-render-opts opts graph-added-chan]
   (load-pages-metadata! repo-url file-paths files true)
   (load-pages-metadata! repo-url file-paths files true)
-  (when first-clone?
-    (if (and (not db-encrypted?) (state/enable-encryption? repo-url))
-      (state/pub-event! [:modal/encryption-setup-dialog repo-url
-                         #(create-default-files! repo-url %)])
-      (create-default-files! repo-url db-encrypted?)))
+  (when (:new-graph? opts)
+    (create-default-files! repo-url))
   (when re-render?
   (when re-render?
     (ui-handler/re-render-root! re-render-opts))
     (ui-handler/re-render-root! re-render-opts))
   (state/pub-event! [:graph/added repo-url opts])
   (state/pub-event! [:graph/added repo-url opts])
   (state/reset-parsing-state!)
   (state/reset-parsing-state!)
   (async/offer! graph-added-chan true))
   (async/offer! graph-added-chan true))
 
 
-(defn- parse-files-and-create-default-files-inner!
-  [repo-url files delete-files delete-blocks file-paths first-clone? db-encrypted? re-render? re-render-opts metadata opts]
+(defn- parse-files-and-create-default-files!
+  [repo-url files delete-files delete-blocks file-paths re-render? re-render-opts opts]
   (let [support-files (filter
   (let [support-files (filter
                        (fn [file]
                        (fn [file]
                          (let [format (format/get-format (:file/path file))]
                          (let [format (format/get-format (:file/path file))]
@@ -245,55 +232,31 @@
     (if util/node-test?
     (if util/node-test?
       (do
       (do
         (doseq [file support-files']
         (doseq [file support-files']
-          (parse-and-load-file! repo-url file new-graph? metadata))
-        (after-parse repo-url files file-paths first-clone? db-encrypted? re-render? re-render-opts opts graph-added-chan))
+          (parse-and-load-file! repo-url file new-graph?))
+        (after-parse repo-url files file-paths re-render? re-render-opts opts graph-added-chan))
       (async/go-loop []
       (async/go-loop []
         (if-let [file (async/<! chan)]
         (if-let [file (async/<! chan)]
           (do
           (do
-            (parse-and-load-file! repo-url file new-graph? metadata)
+            (parse-and-load-file! repo-url file new-graph?)
             (async/<! (async/timeout 10))
             (async/<! (async/timeout 10))
             (recur))
             (recur))
-          (after-parse repo-url files file-paths first-clone? db-encrypted? re-render? re-render-opts opts graph-added-chan))))
+          (after-parse repo-url files file-paths re-render? re-render-opts opts graph-added-chan))))
     graph-added-chan))
     graph-added-chan))
 
 
-(defn- parse-files-and-create-default-files!
-  [repo-url files delete-files delete-blocks file-paths first-clone? db-encrypted? re-render? re-render-opts metadata opts]
-  (if db-encrypted?
-    (p/let [files (p/all
-                   (map (fn [file]
-                          (p/let [content (encrypt/decrypt (:file/content file))]
-                            (assoc file :file/content content)))
-                     files))]
-      (parse-files-and-create-default-files-inner! repo-url files delete-files delete-blocks file-paths first-clone? db-encrypted? re-render? re-render-opts metadata opts))
-    (parse-files-and-create-default-files-inner! repo-url files delete-files delete-blocks file-paths first-clone? db-encrypted? re-render? re-render-opts metadata opts)))
-
 (defn- update-parsing-state!
 (defn- update-parsing-state!
   [repo-url]
   [repo-url]
   (state/set-loading-files! repo-url false))
   (state/set-loading-files! repo-url false))
 
 
 (defn parse-files-and-load-to-db!
 (defn parse-files-and-load-to-db!
-  [repo-url files {:keys [first-clone? delete-files delete-blocks re-render? re-render-opts _refresh?] :as opts
+  [repo-url files {:keys [delete-files delete-blocks re-render? re-render-opts _refresh?] :as opts
                    :or {re-render? true}}]
                    :or {re-render? true}}]
   (update-parsing-state! repo-url)
   (update-parsing-state! repo-url)
 
 
-  (let [file-paths (map :file/path files)
-        metadata-file (config/get-metadata-path)
-        metadata-content (some #(when (= (:file/path %) metadata-file)
-                                  (:file/content %)) files)
-        metadata (when metadata-content
-                   (common-handler/read-metadata! metadata-content))
-        db-encrypted? (:db/encrypted? metadata)
-        db-encrypted-secret (if db-encrypted? (:db/encrypted-secret metadata) nil)]
-    (if db-encrypted?
-      (let [close-fn #(parse-files-and-create-default-files! repo-url files delete-files delete-blocks file-paths first-clone? db-encrypted? re-render? re-render-opts metadata opts)]
-        (state/set-state! :encryption/graph-parsing? true)
-        (state/pub-event! [:modal/encryption-input-secret-dialog repo-url
-                           db-encrypted-secret
-                           close-fn]))
-      (parse-files-and-create-default-files! repo-url files delete-files delete-blocks file-paths first-clone? db-encrypted? re-render? re-render-opts metadata opts))))
+  (let [file-paths (map :file/path files)]
+    (parse-files-and-create-default-files! repo-url files delete-files delete-blocks file-paths re-render? re-render-opts opts)))
 
 
 (defn load-repo-to-db!
 (defn load-repo-to-db!
-  [repo-url {:keys [first-clone? diffs nfs-files refresh? new-graph? empty-graph?]}]
+  [repo-url {:keys [diffs nfs-files refresh? new-graph? empty-graph?]}]
   (spec/validate :repos/url repo-url)
   (spec/validate :repos/url repo-url)
   (route-handler/redirect-to-home!)
   (route-handler/redirect-to-home!)
   (state/set-parsing-state! {:graph-loading? true})
   (state/set-parsing-state! {:graph-loading? true})
@@ -314,21 +277,9 @@
                            (parse-files-and-load-to-db! repo-url files-contents (assoc option :refresh? refresh?)))))]
                            (parse-files-and-load-to-db! repo-url files-contents (assoc option :refresh? refresh?)))))]
     (cond
     (cond
       (and (not (seq diffs)) nfs-files)
       (and (not (seq diffs)) nfs-files)
-      (parse-files-and-load-to-db! repo-url nfs-files {:first-clone? true
-                                                       :new-graph? new-graph?
+      (parse-files-and-load-to-db! repo-url nfs-files {:new-graph? new-graph?
                                                        :empty-graph? empty-graph?})
                                                        :empty-graph? empty-graph?})
 
 
-      (and first-clone? (not nfs-files))
-      (->
-       (p/let [files (file-handler/load-files repo-url)]
-         (load-contents files {:first-clone? first-clone?}))
-       (p/catch (fn [error]
-                  (println "loading files failed: ")
-                  (js/console.dir error)
-                  ;; Empty repo
-                  (create-default-files! repo-url)
-                  (state/set-loading-files! repo-url false))))
-
       :else
       :else
       (when (seq diffs)
       (when (seq diffs)
         (let [filter-diffs (fn [type] (->> (filter (fn [f] (= type (:type f))) diffs)
         (let [filter-diffs (fn [type] (->> (filter (fn [f] (= type (:type f))) diffs)
@@ -350,8 +301,7 @@
               add-or-modify-files (some->>
               add-or-modify-files (some->>
                                    (concat modify-files add-files)
                                    (concat modify-files add-files)
                                    (util/remove-nils))
                                    (util/remove-nils))
-              options {:first-clone? first-clone?
-                       :delete-files (concat delete-files delete-pages)
+              options {:delete-files (concat delete-files delete-pages)
                        :delete-blocks delete-blocks
                        :delete-blocks delete-blocks
                        :re-render? true}]
                        :re-render? true}]
           (if (seq nfs-files)
           (if (seq nfs-files)
@@ -361,196 +311,8 @@
                                                 :re-render-opts {:clear-all-query-state? true}))
                                                 :re-render-opts {:clear-all-query-state? true}))
             (load-contents add-or-modify-files options)))))))
             (load-contents add-or-modify-files options)))))))
 
 
-(defn load-db-and-journals!
-  [repo-url diffs first-clone?]
-  (spec/validate :repos/url repo-url)
-  (when (or diffs first-clone?)
-    (load-repo-to-db! repo-url {:first-clone? first-clone?
-                                :diffs diffs})))
-
-(declare push)
-
-(defn get-diff-result
-  [repo-url]
-  (p/let [remote-latest-commit (common-handler/get-remote-ref repo-url)
-          local-latest-commit (common-handler/get-ref repo-url)]
-    (git/get-diffs repo-url local-latest-commit remote-latest-commit)))
-
-(defn pull
-  [repo-url {:keys [force-pull? show-diff? try-times]
-             :or {force-pull? false
-                  show-diff? false
-                  try-times 2}
-             :as opts}]
-  (spec/validate :repos/url repo-url)
-  (when (and
-         (db/get-db repo-url true)
-         (db/cloned? repo-url))
-    (p/let [remote-latest-commit (common-handler/get-remote-ref repo-url)
-            local-latest-commit (common-handler/get-ref repo-url)
-            descendent? (git/descendent? repo-url local-latest-commit remote-latest-commit)]
-      (when (or (= local-latest-commit remote-latest-commit)
-                (nil? local-latest-commit)
-                (not descendent?)
-                force-pull?)
-        (p/let [files (js/window.workerThread.getChangedFiles (config/get-repo-dir repo-url))]
-          (when (empty? files)
-            (let [status (db/get-key-value repo-url :git/status)]
-              (when (or
-                     force-pull?
-                     (and
-                      (not= status :pushing)
-                      (not (state/get-edit-input-id))
-                      (not (state/in-draw-mode?))
-                      ;; don't pull if git conflicts not resolved yet
-                      (or
-                       show-diff?
-                       (and (not show-diff?)
-                            (empty? @state/diffs)))))
-                (git-handler/set-git-status! repo-url :pulling)
-                (->
-                 (p/let [token (common-handler/get-github-token repo-url)
-                         result (git/fetch repo-url token)]
-                   (let [{:keys [fetchHead]} (bean/->clj result)]
-                     (-> (git/merge repo-url)
-                         (p/then (fn [_result]
-                                   (-> (git/checkout repo-url)
-                                       (p/then (fn [_result]
-                                                 (git-handler/set-git-status! repo-url nil)
-                                                 (git-handler/set-git-last-pulled-at! repo-url)
-                                                 (when (and local-latest-commit fetchHead
-                                                            (not= local-latest-commit fetchHead))
-                                                   (p/let [diffs (git/get-diffs repo-url local-latest-commit fetchHead)]
-                                                     (when (seq diffs)
-                                                       (load-db-and-journals! repo-url diffs false))))
-                                                 (common-handler/check-changed-files-status repo-url)))
-                                       (p/catch (fn [error]
-                                                  (git-handler/set-git-status! repo-url :checkout-failed)
-                                                  (git-handler/set-git-error! repo-url error)
-                                                  (when force-pull?
-                                                    (notification/show!
-                                                     (str "Failed to checkout: " error)
-                                                     :error
-                                                     false)))))))
-                         (p/catch (fn [error]
-                                    (println "Git pull error:")
-                                    (js/console.error error)
-                                    (git-handler/set-git-status! repo-url :merge-failed)
-                                    (git-handler/set-git-error! repo-url error)
-                                    (p/let [result (get-diff-result repo-url)]
-                                      (if (seq result)
-                                        (do
-                                          (notification/show!
-                                           [:p.content
-                                            "Failed to merge, please "
-                                            [:span.font-bold
-                                             "resolve any diffs first."]]
-                                           :error)
-                                          (route-handler/redirect! {:to :diff}))
-                                        (push repo-url {:merge-push-no-diff? true
-                                                        :custom-commit? force-pull?
-                                                        :commit-message "Merge push without diffed files"}))))))))
-                 (p/catch
-                  (fn [error]
-                    (cond
-                      (string/includes? (str error) "404")
-                      (do (log/error :git/pull-error error)
-                          (state/pub-event! [:repo/install-error repo-url (util/format "Failed to fetch %s." repo-url)]))
-
-                      (string/includes? (str error) "401")
-                      (let [remain-times (dec try-times)]
-                        (if (> remain-times 0)
-                          (let [new-opts (merge opts {:try-times remain-times})]
-                            (pull repo-url new-opts))
-                          (let [error-msg
-                                (util/format "Failed to fetch %s. It may be caused by token expiration or missing." repo-url)]
-                            (git-handler/set-git-status! repo-url :fetch-failed)
-                            (log/error :repo/pull-error error)
-                            (notification/show! error-msg :error false))))
-
-                      :else
-                      (log/error :git/pull-error error)))))))))))))
-
-(defn push
-  [repo-url {:keys [commit-message merge-push-no-diff? custom-commit?]
-             :or {custom-commit? false
-                  merge-push-no-diff? false}}]
-  (spec/validate :repos/url repo-url)
-  (let [status (db/get-key-value repo-url :git/status)
-        commit-message (if (string/blank? commit-message)
-                         "Logseq auto save"
-                         commit-message)]
-    (when (and
-           (db/cloned? repo-url)
-           (state/input-idle? repo-url)
-           (or (not= status :pushing)
-               custom-commit?))
-      (->
-       (p/let [files (git/add-all repo-url)
-               changed-files? (some? (seq files))
-               should-commit? (or changed-files? merge-push-no-diff?)
-
-               _commit (when should-commit?
-                         (git/commit repo-url commit-message))
-
-               token (common-handler/get-github-token repo-url)
-               status (db/get-key-value repo-url :git/status)]
-         (when (and token
-                    (or custom-commit?
-                        (and (not= status :pushing)
-                             changed-files?)))
-           (git-handler/set-git-status! repo-url :pushing)
-           (->
-            (git/push repo-url token merge-push-no-diff?)
-            (p/then (fn []
-                      (git-handler/set-git-status! repo-url nil)
-                      (git-handler/set-git-error! repo-url nil)
-                      (common-handler/check-changed-files-status repo-url))))))
-       (p/catch (fn [error]
-                  (log/error :repo/push-error error)
-                  (git-handler/set-git-status! repo-url :push-failed)
-                  (git-handler/set-git-error! repo-url error)
-
-                  (when custom-commit?
-                    (p/rejected error))))))))
-
-(defn push-if-auto-enabled!
-  [repo]
-  (spec/validate :repos/url repo)
-  (when (state/get-git-auto-push? repo)
-    (push repo nil)))
-
-(defn pull-current-repo
-  []
-  (when-let [repo (state/get-current-repo)]
-    (-> (pull repo {:force-pull? true})
-        (p/catch (fn [error]
-                   (notification/show! error :error false))))))
-
-(defn- clone
-  [repo-url]
-  (spec/validate :repos/url repo-url)
-  (p/let [token (common-handler/get-github-token repo-url)]
-    (when token
-      (util/p-handle
-       (do
-         (state/set-cloning! true)
-         (git/clone repo-url token))
-       (fn [_result]
-         (state/set-current-repo! repo-url)
-         (db/start-db-conn! (state/get-me) repo-url)
-         (db/mark-repo-as-cloned! repo-url))
-       (fn [e]
-         (println "Clone failed, error: ")
-         (js/console.error e)
-         (state/set-cloning! false)
-         (git-handler/set-git-status! repo-url :clone-failed)
-         (git-handler/set-git-error! repo-url e)
-         (state/pub-event! [:repo/install-error repo-url (util/format "Failed to clone %s." repo-url)]))))))
-
 (defn remove-repo!
 (defn remove-repo!
-  [{:keys [id url] :as repo}]
-  ;; (spec/validate :repos/repo repo)
+  [{:keys [url] :as repo}]
   (let [delete-db-f (fn []
   (let [delete-db-f (fn []
                       (let [graph-exists? (db/get-db url)]
                       (let [graph-exists? (db/get-db url)]
                         (db/remove-conn! url)
                         (db/remove-conn! url)
@@ -558,13 +320,9 @@
                         (search/remove-db! url)
                         (search/remove-db! url)
                         (state/delete-repo! repo)
                         (state/delete-repo! repo)
                         (when graph-exists? (ipc/ipc "graphUnlinked" repo))))]
                         (when graph-exists? (ipc/ipc "graphUnlinked" repo))))]
-    (if (or (config/local-db? url) (= url "local"))
+    (when (or (config/local-db? url) (= url "local"))
       (p/let [_ (idb/clear-local-db! url)] ; clear file handles
       (p/let [_ (idb/clear-local-db! url)] ; clear file handles
-        (delete-db-f))
-      (util/delete (str config/api "repos/" id)
-                   delete-db-f
-                   (fn [error]
-                     (prn "Delete repo failed, error: " error))))))
+        (delete-db-f)))))
 
 
 (defn start-repo-db-if-not-exists!
 (defn start-repo-db-if-not-exists!
   [repo option]
   [repo option]
@@ -579,7 +337,7 @@
              (state/set-current-repo! repo)
              (state/set-current-repo! repo)
              (db/start-db-conn! nil repo)
              (db/start-db-conn! nil repo)
              (when-not config/publishing?
              (when-not config/publishing?
-                (let [dummy-notes (t :tutorial/dummy-notes)]
+               (let [dummy-notes (t :tutorial/dummy-notes)]
                  (create-dummy-notes-page repo dummy-notes)))
                  (create-dummy-notes-page repo dummy-notes)))
              (when-not config/publishing?
              (when-not config/publishing?
                (let [tutorial (t :tutorial/text)
                (let [tutorial (t :tutorial/text)
@@ -602,64 +360,18 @@
    (p/let [_ (state/set-db-restoring! true)
    (p/let [_ (state/set-db-restoring! true)
            _ (db/restore-graph! repo me)]
            _ (db/restore-graph! repo me)]
      (file-handler/restore-config! repo false)
      (file-handler/restore-config! repo false)
-    ;; Don't have to unlisten the old listerner, as it will be destroyed with the conn
+     ;; Don't have to unlisten the old listerner, as it will be destroyed with the conn
      (db/listen-and-persist! repo)
      (db/listen-and-persist! repo)
      (ui-handler/add-style-if-exists!)
      (ui-handler/add-style-if-exists!)
      (state/set-db-restoring! false))))
      (state/set-db-restoring! false))))
 
 
-(defn periodically-pull-current-repo
-  []
-  (js/setInterval
-   (fn []
-     (p/let [repo-url (state/get-current-repo)
-             token (common-handler/get-github-token repo-url)]
-       (when token
-         (pull repo-url nil))))
-   (* (config/git-pull-secs) 1000)))
-
-(defn periodically-push-current-repo
-  []
-  (js/setInterval #(push-if-auto-enabled! (state/get-current-repo))
-                  (* (config/git-push-secs) 1000)))
-
-(defn- clone-and-load-db
-  [repo-url]
-  (spec/validate :repos/url repo-url)
-  (->
-   (p/let [_ (clone repo-url)
-           _ (git-handler/git-set-username-email! repo-url (state/get-me))]
-     (load-db-and-journals! repo-url nil true))
-   (p/catch (fn [error]
-              (js/console.error error)))))
-
-(defn clone-and-pull-repos
-  [me]
-  (spec/validate :state/me me)
-  (if (and js/window.git js/window.pfs)
-    (do
-      (doseq [{:keys [url]} (:repos me)]
-        (let [repo url]
-          (if (db/cloned? repo)
-            (p/do!
-             (git-handler/git-set-username-email! repo me)
-             (pull repo nil))
-            (p/do!
-             (clone-and-load-db repo)))))
-
-      (periodically-pull-current-repo)
-      (periodically-push-current-repo))
-    (js/setTimeout (fn []
-                     (clone-and-pull-repos me))
-                   500)))
-
 (defn rebuild-index!
 (defn rebuild-index!
   [url]
   [url]
   (when url
   (when url
     (search/reset-indice! url)
     (search/reset-indice! url)
     (db/remove-conn! url)
     (db/remove-conn! url)
     (db/clear-query-state!)
     (db/clear-query-state!)
-    (-> (p/do! (db-persist/delete-graph! url)
-               (clone-and-load-db url))
+    (-> (p/do! (db-persist/delete-graph! url))
         (p/catch (fn [error]
         (p/catch (fn [error]
                    (prn "Delete repo failed, error: " error))))))
                    (prn "Delete repo failed, error: " error))))))
 
 
@@ -676,12 +388,6 @@
        (route-handler/redirect-to-home!)
        (route-handler/redirect-to-home!)
        500))))
        500))))
 
 
-(defn git-commit-and-push!
-  [commit-message]
-  (when-let [repo (state/get-current-repo)]
-    (push repo {:commit-message commit-message
-                :custom-commit? true})))
-
 (defn persist-db!
 (defn persist-db!
   ([]
   ([]
    (persist-db! {}))
    (persist-db! {}))

+ 2 - 31
src/main/frontend/handler/user.cljs

@@ -1,10 +1,7 @@
 (ns frontend.handler.user
 (ns frontend.handler.user
   (:require [frontend.config :as config]
   (:require [frontend.config :as config]
-            [frontend.db :as db]
             [frontend.handler.config :as config-handler]
             [frontend.handler.config :as config-handler]
-            [frontend.handler.notification :as notification]
             [frontend.state :as state]
             [frontend.state :as state]
-            [frontend.util :as util]
             [frontend.debug :as debug]
             [frontend.debug :as debug]
             [clojure.string :as string]
             [clojure.string :as string]
             [cljs-time.core :as t]
             [cljs-time.core :as t]
@@ -12,43 +9,17 @@
             [cljs-http.client :as http]
             [cljs-http.client :as http]
             [cljs.core.async :as async :refer [go go-loop <! timeout]]))
             [cljs.core.async :as async :refer [go go-loop <! timeout]]))
 
 
-(defn set-cors!
-  [cors-proxy]
-  (util/post (str config/api "cors_proxy")
-             {:cors-proxy cors-proxy}
-             (fn [_result]
-               (db/transact! [{:me/cors_proxy cors-proxy}])
-               (swap! state/state assoc-in [:me :cors_proxy] cors-proxy))
-             (fn [error]
-               (notification/show! "Set cors proxy failed." :error)
-               (js/console.dir error))))
-
 (defn set-preferred-format!
 (defn set-preferred-format!
   [format]
   [format]
   (when format
   (when format
     (config-handler/set-config! :preferred-format format)
     (config-handler/set-config! :preferred-format format)
-    (state/set-preferred-format! format)
-    ;; (when (:name (:me @state/state))
-    ;;   (when (state/logged?)
-    ;;     (util/post (str config/api "set_preferred_format")
-    ;;                {:preferred_format (name format)}
-    ;;                (fn [_result]
-    ;;                  (notification/show! "Format set successfully!" :success))
-    ;;                (fn [_e]))))
-    ))
+    (state/set-preferred-format! format)))
 
 
 (defn set-preferred-workflow!
 (defn set-preferred-workflow!
   [workflow]
   [workflow]
   (when workflow
   (when workflow
     (config-handler/set-config! :preferred-workflow workflow)
     (config-handler/set-config! :preferred-workflow workflow)
-    (state/set-preferred-workflow! workflow)
-    ;; (when (:name (:me @state/state))
-    ;;   (util/post (str config/api "set_preferred_workflow")
-    ;;              {:preferred_workflow (name workflow)}
-    ;;              (fn [_result]
-    ;;                (notification/show! "Workflow set successfully!" :success))
-    ;;              (fn [_e])))
-    ))
+    (state/set-preferred-workflow! workflow)))
 
 
 ;;; userinfo, token, login/logout, ...
 ;;; userinfo, token, login/logout, ...
 
 

+ 3 - 9
src/main/frontend/handler/web/nfs.cljs

@@ -6,7 +6,6 @@
             [clojure.string :as string]
             [clojure.string :as string]
             [frontend.config :as config]
             [frontend.config :as config]
             [frontend.db :as db]
             [frontend.db :as db]
-            [frontend.encrypt :as encrypt]
             [frontend.fs :as fs]
             [frontend.fs :as fs]
             [frontend.fs.nfs :as nfs]
             [frontend.fs.nfs :as nfs]
             [frontend.handler.common :as common-handler]
             [frontend.handler.common :as common-handler]
@@ -167,16 +166,14 @@
            (-> (p/all (map (fn [file]
            (-> (p/all (map (fn [file]
                              (p/let [content (if nfs?
                              (p/let [content (if nfs?
                                                (.text (:file/file file))
                                                (.text (:file/file file))
-                                               (:file/content file))
-                                     content (encrypt/decrypt content)]
+                                               (:file/content file))]
                                (assoc file :file/content content))) markup-files))
                                (assoc file :file/content content))) markup-files))
                (p/then (fn [result]
                (p/then (fn [result]
                          (let [files (map #(dissoc % :file/file) result)]
                          (let [files (map #(dissoc % :file/file) result)]
                            (repo-handler/start-repo-db-if-not-exists! repo {:db-type :local-native-fs})
                            (repo-handler/start-repo-db-if-not-exists! repo {:db-type :local-native-fs})
                            (async/go
                            (async/go
                              (let [_finished? (async/<! (repo-handler/load-repo-to-db! repo
                              (let [_finished? (async/<! (repo-handler/load-repo-to-db! repo
-                                                                                       {:first-clone? true
-                                                                                        :new-graph?   true
+                                                                                       {:new-graph?   true
                                                                                         :empty-graph? (nil? (seq markup-files))
                                                                                         :empty-graph? (nil? (seq markup-files))
                                                                                         :nfs-files    files}))]
                                                                                         :nfs-files    files}))]
                                (state/add-repo! {:url repo :nfs? true})
                                (state/add-repo! {:url repo :nfs? true})
@@ -248,8 +245,7 @@
                       (when-let [file (get-file-f path new-files)]
                       (when-let [file (get-file-f path new-files)]
                         (p/let [content (if nfs?
                         (p/let [content (if nfs?
                                           (.text (:file/file file))
                                           (.text (:file/file file))
-                                          (:file/content file))
-                                content (encrypt/decrypt content)]
+                                          (:file/content file))]
                           (assoc file :file/content content)))) added-or-modified))
                           (assoc file :file/content content)))) added-or-modified))
         (p/then (fn [result]
         (p/then (fn [result]
                   (let [files (map #(dissoc % :file/file :file/handle) result)
                   (let [files (map #(dissoc % :file/file :file/handle) result)
@@ -267,8 +263,6 @@
                       (repo-handler/load-repo-to-db! repo
                       (repo-handler/load-repo-to-db! repo
                                                      {:diffs     diffs
                                                      {:diffs     diffs
                                                       :nfs-files modified-files
                                                       :nfs-files modified-files
-                                                      ;; re-ask encryption
-                                                      :first-clone? re-index?
                                                       :refresh? (not re-index?)}))
                                                       :refresh? (not re-index?)}))
                     (when (and (util/electron?) (not re-index?))
                     (when (and (util/electron?) (not re-index?))
                       (db/transact! repo new-files))))))))
                       (db/transact! repo new-files))))))))

+ 0 - 5
src/main/frontend/routes.cljs

@@ -3,7 +3,6 @@
             [frontend.components.repo :as repo]
             [frontend.components.repo :as repo]
             [frontend.components.file :as file]
             [frontend.components.file :as file]
             [frontend.components.page :as page]
             [frontend.components.page :as page]
-            [frontend.components.diff :as diff]
             [frontend.components.plugins :as plugins]
             [frontend.components.plugins :as plugins]
             [frontend.components.journal :as journal]
             [frontend.components.journal :as journal]
             [frontend.components.search :as search]
             [frontend.components.search :as search]
@@ -50,10 +49,6 @@
     {:name :graph
     {:name :graph
      :view page/global-graph}]
      :view page/global-graph}]
 
 
-   ["/diff"
-    {:name :diff
-     :view diff/diff}]
-
    ["/settings"
    ["/settings"
     {:name :settings
     {:name :settings
      :view settings/settings}]
      :view settings/settings}]

+ 0 - 31
src/main/frontend/spec.cljs

@@ -24,36 +24,5 @@
 
 
 ;; repo
 ;; repo
 
 
-(s/def :repos/id string?)
 (s/def :repos/url string?)
 (s/def :repos/url string?)
 (s/def :repos/branch string?)
 (s/def :repos/branch string?)
-(s/def :repos/installation_id string?)
-(s/def :repos/token string?)
-(s/def :repos/expires_at string?)
-(s/def :repos/repo (s/keys :req-un [:repos/id :repos/url :repos/branch :repos/installation_id]
-                           :opt-un [:repos/token :repos/expires_at]))
-
-; Didn't know how to impl both `require token` and `not require token`version in :me key.
-(s/def :repos/repo-require-token (s/keys :req-un [:repos/id :repos/url :repos/branch :repos/installation_id
-                                                  :repos/token :repos/expires_at]))
-
-(s/def :me/repos (s/* :repos/repo))
-
-;; me
-
-(s/def :me/name string?)
-(s/def :me/email string?)
-(s/def :me/avatar string?)
-(s/def :me/preferred_format string?)
-(s/def :me/preferred_workflow string?)
-(s/def :me/cors_proxy (s/or :nil nil?
-                            :string string?))
-
-;; state
-
-(s/def :state/me (s/keys :req-un [:me/name :me/email :me/avatar :me/repos :me/preferred_format
-                                  :me/preferred_workflow :me/cors_proxy]))
-
-
-(comment
-  (validate :user/repo 1))

+ 1 - 92
src/main/frontend/state.cljs

@@ -1,7 +1,5 @@
 (ns frontend.state
 (ns frontend.state
   (:require [cljs-bean.core :as bean]
   (:require [cljs-bean.core :as bean]
-            [cljs-time.core :as t]
-            [cljs-time.format :as tf]
             [cljs.core.async :as async]
             [cljs.core.async :as async]
             [clojure.string :as string]
             [clojure.string :as string]
             [cljs.spec.alpha :as s]
             [cljs.spec.alpha :as s]
@@ -13,7 +11,6 @@
             [frontend.util.cursor :as cursor]
             [frontend.util.cursor :as cursor]
             [goog.dom :as gdom]
             [goog.dom :as gdom]
             [goog.object :as gobj]
             [goog.object :as gobj]
-            [lambdaisland.glogi :as log]
             [promesa.core :as p]
             [promesa.core :as p]
             [rum.core :as rum]
             [rum.core :as rum]
             [frontend.mobile.util :as mobile-util]))
             [frontend.mobile.util :as mobile-util]))
@@ -32,10 +29,7 @@
      :reactive/custom-queries               (async/chan 100)
      :reactive/custom-queries               (async/chan 100)
      :notification/show?                    false
      :notification/show?                    false
      :notification/content                  nil
      :notification/content                  nil
-     :repo/cloning?                         false
-     ;; :repo/loading-files? is only for GitHub repos
      :repo/loading-files?                   {}
      :repo/loading-files?                   {}
-     :repo/changed-files                    nil
      :nfs/user-granted?                     {}
      :nfs/user-granted?                     {}
      :nfs/refreshing?                       nil
      :nfs/refreshing?                       nil
      :instrument/disabled?                  (storage/get "instrument-disabled")
      :instrument/disabled?                  (storage/get "instrument-disabled")
@@ -44,7 +38,6 @@
      :indexeddb/support?                    true
      :indexeddb/support?                    true
      :me                                    nil
      :me                                    nil
      :git/current-repo                      current-graph
      :git/current-repo                      current-graph
-     :git/status                            {}
      :format/loading                        {}
      :format/loading                        {}
      :draw?                                 false
      :draw?                                 false
      :db/restoring?                         nil
      :db/restoring?                         nil
@@ -99,7 +92,6 @@
 
 
      :document/mode?                        document-mode?
      :document/mode?                        document-mode?
 
 
-     :github/contents                       {}
      :config                                {}
      :config                                {}
      :block/component-editing-mode?         false
      :block/component-editing-mode?         false
      :editor/draw-mode?                     false
      :editor/draw-mode?                     false
@@ -204,10 +196,6 @@
 
 
      :view/components                       {}
      :view/components                       {}
 
 
-     :debug/write-acks                      {}
-
-     :encryption/graph-parsing?             false
-
      :favorites/dragging                    nil
      :favorites/dragging                    nil
 
 
      :srs/mode?                             false
      :srs/mode?                             false
@@ -369,11 +357,6 @@
   (not (false? (:export/heading-to-list?
   (not (false? (:export/heading-to-list?
                  (get (sub-config) (get-current-repo))))))
                  (get (sub-config) (get-current-repo))))))
 
 
-(defn enable-encryption?
-  [repo]
-  (:feature/enable-encryption?
-    (get (sub-config) repo)))
-
 (defn enable-git-auto-push?
 (defn enable-git-auto-push?
   [repo]
   [repo]
   (not (false? (:git-auto-push
   (not (false? (:git-auto-push
@@ -592,10 +575,6 @@
   [range]
   [range]
   (set-state! :cursor-range range))
   (set-state! :cursor-range range))
 
 
-(defn set-cloning!
-  [value]
-  (set-state! :repo/cloning? value))
-
 (defn set-q!
 (defn set-q!
   [value]
   [value]
   (set-state! :search/q value))
   (set-state! :search/q value))
@@ -756,38 +735,6 @@
          :custom-context-menu/show? false
          :custom-context-menu/show? false
          :custom-context-menu/links nil))
          :custom-context-menu/links nil))
 
 
-(defn set-github-installation-tokens!
-  [tokens]
-  (when (seq tokens)
-    (let [tokens (medley/index-by :installation_id tokens)
-          repos (get-repos)]
-      (when (seq repos)
-        (let [set-token-f
-              (fn [{:keys [installation_id] :as repo}]
-                (let [{:keys [token] :as m} (get tokens installation_id)]
-                  (if (string? token)
-                    ;; GitHub API returns a expires_at key which is a timestamp (expires after 60 minutes at present),
-                    ;; however, user's system time may be inaccurate. Here, based on the client system time, we use
-                    ;; 40-minutes interval to deal with some critical conditions, for e.g. http request time consume.
-                    (let [formatter (tf/formatters :date-time-no-ms)
-                          expires-at (->> (t/plus (t/now) (t/minutes 40))
-                                          (tf/unparse formatter))]
-                      (merge repo {:token token :expires_at expires-at}))
-                    (do
-                      (when (and
-                              (:url repo)
-                              (string/starts-with? (:url repo) "https://"))
-                        (log/error :token/cannot-set-token {:repo-m repo :token-m m}))
-                      repo))))
-              repos (mapv set-token-f repos)]
-          (swap! state assoc-in [:me :repos] repos))))))
-
-(defn get-github-token
-  [repo]
-  (when repo
-    (let [repos (get-repos)]
-      (some #(when (= repo (:url %)) %) repos))))
-
 (defn toggle-sidebar-open?!
 (defn toggle-sidebar-open?!
   []
   []
   (swap! state update :ui/sidebar-open? not))
   (swap! state update :ui/sidebar-open? not))
@@ -1054,10 +1001,6 @@
     (get-in @state [:me :settings :date-formatter])
     (get-in @state [:me :settings :date-formatter])
     "MMM do, yyyy"))
     "MMM do, yyyy"))
 
 
-(defn set-git-status!
-  [repo-url value]
-  (swap! state assoc-in [:git/status repo-url] value))
-
 (defn shortcuts []
 (defn shortcuts []
   (get-in @state [:config (get-current-repo) :shortcuts]))
   (get-in @state [:config (get-current-repo) :shortcuts]))
 
 
@@ -1065,37 +1008,15 @@
   []
   []
   (:me @state))
   (:me @state))
 
 
-(defn github-authed?
-  []
-  (:github-authed? (get-me)))
-
-(defn get-name
-  []
-  (:name (get-me)))
-
 (defn deprecated-logged?
 (defn deprecated-logged?
   "Whether the user has logged in."
   "Whether the user has logged in."
   []
   []
-  (some? (get-name)))
-
-(defn in-draw-mode?
-  []
-  (:draw? @state))
+  false)
 
 
 (defn set-db-restoring!
 (defn set-db-restoring!
   [value]
   [value]
   (set-state! :db/restoring? value))
   (set-state! :db/restoring? value))
 
 
-(defn get-default-branch
-  [repo-url]
-  (or
-    (some->> (get-repos)
-             (filter (fn [m]
-                       (= (:url m) repo-url)))
-             (first)
-             :branch)
-    "master"))
-
 (defn set-indexedb-support!
 (defn set-indexedb-support!
   [value]
   [value]
   (set-state! :indexeddb/support? value))
   (set-state! :indexeddb/support? value))
@@ -1263,16 +1184,6 @@
   [repo-url value]
   [repo-url value]
   (set-state! [:config repo-url] value))
   (set-state! [:config repo-url] value))
 
 
-(defn get-git-auto-push?
-  ([]
-   (get-git-auto-push? (get-current-repo)))
-  ([repo]
-   (true? (:git-auto-push (get-config repo)))))
-
-(defn set-changed-files!
-  [repo changed-files]
-  (set-state! [:repo/changed-files repo] changed-files))
-
 (defn get-wide-mode?
 (defn get-wide-mode?
   []
   []
   (:ui/wide-mode? @state))
   (:ui/wide-mode? @state))
@@ -1499,8 +1410,6 @@
   (let [chan (get-events-chan)]
   (let [chan (get-events-chan)]
     (async/put! chan payload)))
     (async/put! chan payload)))
 
 
-(defonce diffs (atom nil))
-
 (defn get-copied-blocks
 (defn get-copied-blocks
   []
   []
   (:copy/blocks @state))
   (:copy/blocks @state))

+ 0 - 23
src/main/frontend/util.cljc

@@ -188,21 +188,6 @@
            (string/join " ")
            (string/join " ")
            (string/trim)))
            (string/trim)))
 
 
-#?(:cljs
-   (defn fetch-raw
-     ([url on-ok on-failed]
-      (fetch-raw url {} on-ok on-failed))
-     ([url opts on-ok on-failed]
-      (-> (js/fetch url (bean/->js opts))
-          (.then (fn [resp]
-                   (if (>= (.-status resp) 400)
-                     (on-failed resp)
-                     (if (.-ok resp)
-                       (-> (.text resp)
-                           (.then bean/->clj)
-                           (.then #(on-ok %)))
-                       (on-failed resp)))))))))
-
 #?(:cljs
 #?(:cljs
    (defn fetch
    (defn fetch
      ([url on-ok on-failed]
      ([url on-ok on-failed]
@@ -241,14 +226,6 @@
             on-ok
             on-ok
             on-failed)))
             on-failed)))
 
 
-#?(:cljs
-   (defn delete
-     [url on-ok on-failed]
-     (fetch url {:method "delete"
-                 :headers {:Content-Type "application/json"}}
-            on-ok
-            on-failed)))
-
 (defn zero-pad
 (defn zero-pad
   [n]
   [n]
   (if (< n 10)
   (if (< n 10)

部分文件因为文件数量过多而无法显示