mirror of https://github.com/logseq/logseq
improve(ios): add container urls
parent
f19bbc77b0
commit
8713ef84a8
|
@ -8,5 +8,5 @@
|
|||
#import <Capacitor/Capacitor.h>
|
||||
|
||||
CAP_PLUGIN(FileContainer, "FileContainer",
|
||||
CAP_PLUGIN_METHOD(ensureDocuments, CAPPluginReturnPromise);
|
||||
)
|
||||
CAP_PLUGIN_METHOD(ensureDocuments, CAPPluginReturnPromise);
|
||||
)
|
||||
|
|
|
@ -11,50 +11,50 @@ import MobileCoreServices
|
|||
@objc(FileContainer)
|
||||
public class FileContainer: CAPPlugin, UIDocumentPickerDelegate {
|
||||
|
||||
var iCloudContainerUrl: URL? {
|
||||
return FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents")
|
||||
var iCloudContainerUrl: URL? {
|
||||
return FileManager.default.url(forUbiquityContainerIdentifier: nil)?.appendingPathComponent("Documents")
|
||||
}
|
||||
|
||||
var localContainerUrl: URL? {
|
||||
return FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
|
||||
}
|
||||
|
||||
@objc func ensureDocuments(_ call: CAPPluginCall) {
|
||||
|
||||
if self.iCloudContainerUrl != nil {
|
||||
validateDocuments(at: self.iCloudContainerUrl!)
|
||||
}
|
||||
|
||||
var localContainerUrl: URL? {
|
||||
return FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first
|
||||
if self.localContainerUrl != nil {
|
||||
validateDocuments(at: self.localContainerUrl!)
|
||||
}
|
||||
|
||||
@objc func ensureDocuments(_ call: CAPPluginCall) {
|
||||
call.resolve(["iCloudContainerUrl": self.iCloudContainerUrl?.absoluteString as Any,
|
||||
"localContainerUrl": self.localContainerUrl?.absoluteString as Any])
|
||||
}
|
||||
|
||||
if self.iCloudContainerUrl != nil {
|
||||
validateDocuments(at: self.iCloudContainerUrl!)
|
||||
}
|
||||
func validateDocuments(at url: URL) {
|
||||
|
||||
if self.localContainerUrl != nil {
|
||||
validateDocuments(at: self.localContainerUrl!)
|
||||
}
|
||||
|
||||
call.resolve(["path": [self.iCloudContainerUrl?.absoluteString as Any,
|
||||
self.localContainerUrl?.absoluteString as Any]])
|
||||
if !FileManager.default.fileExists(atPath: url.path, isDirectory: nil) {
|
||||
do {
|
||||
print("the url = " + url.path)
|
||||
try FileManager.default.createDirectory(at: url, withIntermediateDirectories: true, attributes: nil)
|
||||
} catch {
|
||||
print("container doesn't exist")
|
||||
print(error.localizedDescription)
|
||||
}
|
||||
}
|
||||
|
||||
func validateDocuments(at url: URL) {
|
||||
let str = ""
|
||||
let filename = url.appendingPathComponent(".logseq", isDirectory: false)
|
||||
|
||||
if !FileManager.default.fileExists(atPath: url.path, isDirectory: nil) {
|
||||
do {
|
||||
print("the url = " + url.path)
|
||||
try FileManager.default.createDirectory(at: url, withIntermediateDirectories: true, attributes: nil)
|
||||
} catch {
|
||||
print("container doesn't exist")
|
||||
print(error.localizedDescription)
|
||||
}
|
||||
}
|
||||
|
||||
let str = ""
|
||||
let filename = url.appendingPathComponent(".logseq", isDirectory: false)
|
||||
|
||||
if !FileManager.default.fileExists(atPath: filename.path) {
|
||||
do {
|
||||
try str.write(to: filename, atomically: true, encoding: String.Encoding.utf8)
|
||||
} catch {
|
||||
print("write .logseq failed")
|
||||
print(error.localizedDescription)
|
||||
}
|
||||
}
|
||||
if !FileManager.default.fileExists(atPath: filename.path) {
|
||||
do {
|
||||
try str.write(to: filename, atomically: true, encoding: String.Encoding.utf8)
|
||||
} catch {
|
||||
print("write .logseq failed")
|
||||
print(error.localizedDescription)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -12,63 +12,70 @@ import MobileCoreServices
|
|||
@objc(FolderPicker)
|
||||
public class FolderPicker: CAPPlugin, UIDocumentPickerDelegate {
|
||||
|
||||
public var _call: CAPPluginCall?
|
||||
public var _call: CAPPluginCall?
|
||||
|
||||
@objc func pickFolder(_ call: CAPPluginCall) {
|
||||
self._call = call
|
||||
@objc func pickFolder(_ call: CAPPluginCall) {
|
||||
self._call = call
|
||||
|
||||
DispatchQueue.main.async { [weak self] in
|
||||
DispatchQueue.main.async { [weak self] in
|
||||
|
||||
let documentPicker = UIDocumentPickerViewController(
|
||||
documentTypes: [String(kUTTypeFolder)],
|
||||
in: UIDocumentPickerMode.open
|
||||
)
|
||||
let documentPicker = UIDocumentPickerViewController(
|
||||
documentTypes: [String(kUTTypeFolder)],
|
||||
in: UIDocumentPickerMode.open
|
||||
)
|
||||
|
||||
// Set the initial directory.
|
||||
// Set the initial directory.
|
||||
|
||||
if let path = call.getString("path") {
|
||||
// guard let url = URL(string: path) else {
|
||||
// call.reject("can not parse url")
|
||||
// return
|
||||
// }
|
||||
if let path = call.getString("path") {
|
||||
// guard let url = URL(string: path) else {
|
||||
// call.reject("can not parse url")
|
||||
// return
|
||||
// }
|
||||
|
||||
guard let documentDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first else { return }
|
||||
|
||||
let url = documentDirectory.appendingPathComponent(path)
|
||||
|
||||
print("picked folder url = " + url.path)
|
||||
|
||||
documentPicker.directoryURL = url
|
||||
|
||||
}
|
||||
|
||||
documentPicker.allowsMultipleSelection = false
|
||||
documentPicker.delegate = self
|
||||
|
||||
documentPicker.modalPresentationStyle = UIModalPresentationStyle.fullScreen
|
||||
|
||||
self?.bridge?.viewController?.present(
|
||||
documentPicker,
|
||||
animated: true,
|
||||
completion: nil
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
public func documentPicker(
|
||||
_ controller: UIDocumentPickerViewController,
|
||||
didPickDocumentsAt urls: [URL]
|
||||
) {
|
||||
var items: [String] = []
|
||||
let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
|
||||
|
||||
for url in urls {
|
||||
items.append(url.absoluteString)
|
||||
guard let documentDirectory = FileManager.default.urls(
|
||||
for: .documentDirectory,
|
||||
in: .userDomainMask
|
||||
).first
|
||||
else {
|
||||
return
|
||||
}
|
||||
|
||||
self._call?.resolve([
|
||||
"path": items.first as Any,
|
||||
"localDocumentsPath": documentsPath[0] as Any
|
||||
])
|
||||
let url = documentDirectory.appendingPathComponent(path)
|
||||
|
||||
print("picked folder url = " + url.path)
|
||||
|
||||
documentPicker.directoryURL = url
|
||||
}
|
||||
|
||||
documentPicker.allowsMultipleSelection = false
|
||||
documentPicker.delegate = self
|
||||
|
||||
documentPicker.modalPresentationStyle = UIModalPresentationStyle.fullScreen
|
||||
|
||||
self?.bridge?.viewController?.present(
|
||||
documentPicker,
|
||||
animated: true,
|
||||
completion: nil
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
public func documentPicker(
|
||||
_ controller: UIDocumentPickerViewController,
|
||||
didPickDocumentsAt urls: [URL]
|
||||
) {
|
||||
var items: [String] = []
|
||||
let documentsPath = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
|
||||
|
||||
for url in urls {
|
||||
items.append(url.absoluteString)
|
||||
}
|
||||
|
||||
print(items.first as Any)
|
||||
|
||||
self._call?.resolve([
|
||||
"path": items.first as Any,
|
||||
"localDocumentsPath": documentsPath[0] as Any
|
||||
])
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,7 +10,8 @@
|
|||
[frontend.mobile.intent :as intent]
|
||||
[frontend.mobile.util :as mobile-util]
|
||||
[frontend.state :as state]
|
||||
[frontend.util :as util]))
|
||||
[frontend.util :as util]
|
||||
[cljs-bean.core :as bean]))
|
||||
|
||||
|
||||
(def *url (atom nil))
|
||||
|
@ -23,8 +24,13 @@
|
|||
(defn- ios-init
|
||||
"Initialize iOS-specified event listeners"
|
||||
[]
|
||||
(p/let [path (capacitor-fs/ios-ensure-documents!)]
|
||||
(println "iOS container path: " (js->clj path)))
|
||||
(p/let [^js path (capacitor-fs/ios-ensure-documents!)]
|
||||
(when-let [path' (bean/->clj path)]
|
||||
(state/set-state! :mobile/container-urls
|
||||
(update-vals path' #(cond-> %
|
||||
string?
|
||||
(js/decodeURIComponent))))
|
||||
(println "iOS container path: " path')))
|
||||
|
||||
(state/pub-event! [:validate-appId])
|
||||
|
||||
|
|
|
@ -158,6 +158,7 @@
|
|||
:assets/alias-dirs (or (storage/get :assets/alias-dirs) [])
|
||||
|
||||
;; mobile
|
||||
:mobile/container-urls nil
|
||||
:mobile/show-action-bar? false
|
||||
:mobile/actioned-block nil
|
||||
:mobile/show-toolbar? false
|
||||
|
|
Loading…
Reference in New Issue