enhance(iOS): add a modal to instruct users to select valid directory (#4947)

* enhance(ios): add a modal to instruct users to select valid directory

* tweak height for loom video on iPhone
pull/5056/head
llcc 2022-04-24 11:20:44 +08:00 committed by GitHub
parent 9383652458
commit ed7defbe97
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 72 additions and 7 deletions

View File

@ -40,13 +40,15 @@ public class FolderPicker: CAPPlugin, UIDocumentPickerDelegate {
didPickDocumentsAt urls: [URL] didPickDocumentsAt urls: [URL]
){ ){
var items: [String] = [] var items: [String] = []
let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
for url in urls { for url in urls {
items.append(url.absoluteString) items.append(url.absoluteString)
} }
self._call?.resolve([ self._call?.resolve([
"path": items.first as Any "path": items.first as Any,
"localDocumentsPath": documentsPath[0] as Any
]) ])
} }
} }

View File

@ -2,11 +2,15 @@
(:require ["@capacitor/filesystem" :refer [Encoding Filesystem]] (:require ["@capacitor/filesystem" :refer [Encoding Filesystem]]
[cljs-bean.core :as bean] [cljs-bean.core :as bean]
[clojure.string :as string] [clojure.string :as string]
[frontend.db :as db]
[frontend.encrypt :as encrypt]
[frontend.fs.protocol :as protocol] [frontend.fs.protocol :as protocol]
[frontend.mobile.util :as mobile-util] [frontend.mobile.util :as mobile-util]
[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]
[rum.core :as rum]
[frontend.state :as state] [frontend.state :as state]
[frontend.db :as db])) [frontend.db :as db]))
@ -170,6 +174,33 @@
(js/encodeURI (js/decodeURI path)) (js/encodeURI (js/decodeURI path))
path))) path)))
(defn- local-container-path?
"Check whether `path' is logseq's container `localDocumentsPath' on iOS"
[path localDocumentsPath]
(string/includes? path localDocumentsPath))
(defn- iCloud-container-path?
"Check whether `path' is logseq's iCloud container path on iOS"
[path]
(string/includes? path "iCloud~com~logseq~logseq"))
(rum/defc instruction
[]
[:div.instruction
[:h1.title "Please choose a valid directory!"]
[:p.leading-6 "Logseq app can only save or access your graphs stored in a specific directory with a "
[:strong "Logseq icon"]
" inside, located either in \"iCloud Drive\", \"On My iPhone\" or \"On My iPad\"."]
[:p.leading-6 "Please watch the following short instruction video. "
[:small.text-gray-500 "(may take few seconds to load...)"]]
[:iframe
{:src "https://www.loom.com/embed/dae612ae5fd94e508bd0acdf02efb888"
:frame-border "0"
:position "relative"
:allow-full-screen "allowfullscreen"
:webkit-allow-full-screen "webkitallowfullscreen"
:height "100%"}]])
(defrecord Capacitorfs [] (defrecord Capacitorfs []
protocol/Fs protocol/Fs
(mkdir! [_this dir] (mkdir! [_this dir]
@ -241,11 +272,19 @@
result))) result)))
(open-dir [_this _ok-handler] (open-dir [_this _ok-handler]
(p/let [_ (when (= (mobile-util/platform) "android") (check-permission-android)) (p/let [_ (when (= (mobile-util/platform) "android") (check-permission-android))
path (p/chain {:keys [path localDocumentsPath]} (p/chain
(.pickFolder mobile-util/folder-picker) (.pickFolder mobile-util/folder-picker)
#(js->clj % :keywordize-keys true) #(js->clj % :keywordize-keys true))
:path) _ (when (mobile-util/native-ios?)
_ (when (mobile-util/native-ios?) (mobile-util/sync-icloud-repo path)) (cond
(not (or (local-container-path? path localDocumentsPath)
(iCloud-container-path? path)))
(state/pub-event! [:modal/show-instruction])
(iCloud-container-path? path)
(mobile-util/sync-icloud-repo path)
:else nil))
files (readdir path) files (readdir path)
files (js->clj files :keywordize-keys true)] files (js->clj files :keywordize-keys true)]
(into [] (concat [{:path path}] files)))) (into [] (concat [{:path path}] files))))

View File

@ -5,6 +5,7 @@
[frontend.context.i18n :refer [t]] [frontend.context.i18n :refer [t]]
[frontend.components.diff :as diff] [frontend.components.diff :as diff]
[frontend.handler.plugin :as plugin-handler] [frontend.handler.plugin :as plugin-handler]
[frontend.fs.capacitor-fs :as capacitor-fs]
[frontend.components.plugins :as plugin] [frontend.components.plugins :as plugin]
[frontend.components.git :as git-component] [frontend.components.git :as git-component]
[frontend.components.shell :as shell] [frontend.components.shell :as shell]
@ -196,6 +197,10 @@
(state/set-modal! srs/global-cards {:id :srs (state/set-modal! srs/global-cards {:id :srs
:label "flashcards__cp"})) :label "flashcards__cp"}))
(defmethod handle :modal/show-instruction [_]
(state/set-modal! capacitor-fs/instruction {:id :instruction
:label "instruction__cp"}))
(defmethod handle :modal/show-themes-modal [_] (defmethod handle :modal/show-themes-modal [_]
(plugin/open-select-theme!)) (plugin/open-select-theme!))

View File

@ -156,6 +156,25 @@
} }
} }
} }
&[label="instruction__cp"] {
.ui__modal-panel {
height: 90%;
}
.panel-content {
height: 100%;
}
}
}
.instruction {
height: 40%;
@screen sm {
height: 70%;
}
} }
html.is-native-andorid, html.is-native-andorid,