Browse Source

more hacks

dignifiedquire 2 years ago
parent
commit
9858e86e69

+ 12 - 18
deltachat-ios/Controller/QrPageController.swift

@@ -3,6 +3,7 @@ import DcCore
 
 class QrPageController: UIPageViewController {
     private let dcContext: DcContext
+    private let dcAccounts: DcAccounts
     var progressObserver: NSObjectProtocol?
     var qrCodeReaderController: QrCodeReaderController?
 
@@ -30,7 +31,7 @@ class QrPageController: UIPageViewController {
 
     private lazy var qrSegmentControl: UISegmentedControl = {
         let control = UISegmentedControl(
-            items: [String.localized("qrshow_title"), String.localized("qrscan_title"), "qrshow_backup"]
+            items: [String.localized("qrshow_title"), String.localized("qrscan_title")]
         )
         control.tintColor = DcColors.primary
         control.addTarget(self, action: #selector(qrSegmentControlChanged), for: .valueChanged)
@@ -38,8 +39,9 @@ class QrPageController: UIPageViewController {
         return control
     }()
 
-    init(dcContext: DcContext) {
+    init(dcContext: DcContext, dcAccounts: DcAccounts) {
         self.dcContext = dcContext
+        self.dcAccounts = dcAccounts
         super.init(transitionStyle: .scroll, navigationOrientation: .horizontal, options: [:])
     }
 
@@ -54,7 +56,7 @@ class QrPageController: UIPageViewController {
         delegate = self
         navigationItem.titleView = qrSegmentControl
 
-        let qrController = QrViewController(dcContext: dcContext, qrCodeHint: qrCodeHint)
+        let qrController = QrViewBackupController(dcContext: dcContext, dcAccounts: dcAccounts, qrCodeHint: qrCodeHint)
         setViewControllers(
             [qrController],
             direction: .forward,
@@ -83,15 +85,12 @@ class QrPageController: UIPageViewController {
     // MARK: - actions
     @objc private func qrSegmentControlChanged(_ sender: UISegmentedControl) {
         if sender.selectedSegmentIndex == 0 {
-            let qrController = QrViewController(dcContext: dcContext, qrCodeHint: qrCodeHint)
+            let qrController = QrViewBackupController(dcContext: dcContext, dcAccounts: dcAccounts, qrCodeHint: qrCodeHint)
             setViewControllers([qrController], direction: .reverse, animated: true, completion: nil)
-        } else if sender.selectedSegmentIndex == 1 {
+        } else {
             let qrCodeReaderController = makeQRReader()
             self.qrCodeReaderController = qrCodeReaderController
             setViewControllers([qrCodeReaderController], direction: .forward, animated: false, completion: nil)
-        } else {
-            let qrController = QrViewBackupController(dcContext: dcContext, qrCodeHint: qrCodeHint)
-            setViewControllers([qrController], direction: .reverse, animated: true, completion: nil)
         }
     }
 
@@ -104,13 +103,6 @@ class QrPageController: UIPageViewController {
 
     // MARK: - update
     private func updateHintTextIfNeeded() {
-        for case let qrViewController as QrViewController in self.viewControllers ?? [] {
-            let newHint = qrCodeHint
-            if qrCodeHint != qrViewController.qrCodeHint {
-                qrViewController.qrCodeHint = newHint
-            }
-        }
-        
         for case let qrViewController as QrViewBackupController in self.viewControllers ?? [] {
             let newHint = qrCodeHint
             if qrCodeHint != qrViewController.qrCodeHint {
@@ -139,19 +131,21 @@ extension QrPageController: UIPageViewControllerDataSource, UIPageViewController
         if viewController is QrViewController {
             return nil
         }
-        return QrViewController(dcContext: dcContext, qrCodeHint: qrCodeHint)
+        
+        return makeQRReader()
     }
 
     func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? {
-        if viewController is QrViewController {
+        if viewController is QrViewBackupController {
             return makeQRReader()
         }
+
         return nil
     }
 
     func pageViewController(_ pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
         if completed {
-            if previousViewControllers.first is QrViewController {
+            if previousViewControllers.first is QrViewBackupController {
                 qrSegmentControl.selectedSegmentIndex = 1
             } else {
                 qrSegmentControl.selectedSegmentIndex = 0

+ 14 - 3
deltachat-ios/Controller/QrViewBackupController.swift

@@ -6,10 +6,12 @@ import SDWebImageSVGKitPlugin
 class QrViewBackupController: UIViewController {
 
     private let dcContext: DcContext
+    private let dcAccounts: DcAccounts
+    private let dcBackupSender: DcBackupSender?
     var onDismissed: (() -> Void)?
     
     private lazy var qrContentView: UIImageView = {
-        let svg = dcContext.getSecurejoinQrSVG(chatId: chatId)
+        let svg = dcBackupSender?.qr_code(context: dcContext)
         let view = UIImageView()
         view.contentMode = .scaleAspectFit
         view.translatesAutoresizingMaskIntoConstraints = false
@@ -19,15 +21,24 @@ class QrViewBackupController: UIViewController {
 
     var qrCodeHint: String {
         willSet {
-            let svg = dcContext.getSecurejoinQrSVG(chatId: chatId)
+            let svg = dcBackupSender?.qr_code(context: dcContext)
             qrContentView.image = getQrImage(svg: svg)
             qrContentView.accessibilityHint = newValue
         }
     }
     private let chatId: Int
 
-    init(dcContext: DcContext, chatId: Int? = 0, qrCodeHint: String?) {
+    init(dcContext: DcContext, dcAccounts: DcAccounts, chatId: Int? = 0, qrCodeHint: String?) {
         self.dcContext = dcContext
+        self.dcAccounts = dcAccounts
+        let documents = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
+        if !documents.isEmpty {
+            self.dcAccounts.stopIo() // TODO: start again
+            self.dcBackupSender = self.dcContext.send_backup(directory: documents[0], passphrase: nil)
+        } else {
+            logger.error("document directory not found")
+            self.dcBackupSender = nil
+        }
         self.chatId = chatId ?? 0
         self.qrCodeHint = qrCodeHint ?? ""
         super.init(nibName: nil, bundle: nil)

+ 1 - 1
deltachat-ios/Coordinator/AppCoordinator.swift

@@ -33,7 +33,7 @@ class AppCoordinator {
     }()
 
     private func createQrNavigationController() -> UINavigationController {
-        let root = QrPageController(dcContext: dcAccounts.getSelected())
+        let root = QrPageController(dcContext: dcAccounts.getSelected(), dcAccounts: dcAccounts)
         let nav = UINavigationController(rootViewController: root)
         let settingsImage = UIImage(named: "qr_code")
         nav.tabBarItem = UITabBarItem(title: String.localized("qr_code"), image: settingsImage, tag: qrTab)

+ 1 - 1
deltachat-ios/libraries/deltachat-core-rust

@@ -1 +1 @@
-Subproject commit b5324d377b70913805635a869956aa4df7f30108
+Subproject commit 62347a7c89690ce733a19ce37a45fbbfb740f275