Restore Backend class; replace TaskRunner by Kotlin Coroutines

This commit is contained in:
2019-04-13 09:20:37 -05:00
parent b0cedde0a9
commit 5ea19c9475
26 changed files with 313 additions and 405 deletions

View File

@@ -19,27 +19,36 @@
import UIKit
@UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate {
@UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate, BackendListener {
var window: UIWindow?
var backend = Backend(databaseName: "dev.db",
databaseOpener: IosDatabaseOpener(withLog: StandardLog()),
fileOpener: IosFileOpener(),
localeHelper: IosLocaleHelper(NSLocale.preferredLanguages),
log: StandardLog(),
taskRunner: SequentialTaskRunner())
var nav: UINavigationController?
let log = StandardLog()
var backend: Backend?
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
backend = Backend(databaseName: "uhabits.db",
databaseOpener: IosDatabaseOpener(withLog: log),
fileOpener: IosFileOpener(),
localeHelper: IosLocaleHelper(NSLocale.preferredLanguages),
log: log,
crCtx: UIDispatcher())
backend?.observable.addListener(listener: self)
backend?.doInit()
window = UIWindow(frame: UIScreen.main.bounds)
if let window = window {
let nav = UINavigationController()
nav.viewControllers = [MainScreenController(withBackend: backend)]
window.backgroundColor = UIColor.white
window.rootViewController = nav
window.makeKeyAndVisible()
}
nav = UINavigationController()
window?.backgroundColor = UIColor.white
window?.rootViewController = nav
window?.makeKeyAndVisible()
return true
}
func onReady() {
nav?.viewControllers = [MainScreenController(withBackend: backend!)]
}
}

View File

@@ -100,7 +100,7 @@ class MainScreenController: UITableViewController, MainScreenDataSourceListener
var preferences: Preferences
var theme: Theme
var nButtons = 3
var strings: Strings
var strings = Strings()
required init?(coder aDecoder: NSCoder) {
fatalError()
@@ -109,9 +109,9 @@ class MainScreenController: UITableViewController, MainScreenDataSourceListener
init(withBackend backend:Backend) {
self.backend = backend
self.strings = backend.strings
self.dataSource = backend.mainScreenDataSource!
self.dataSource = backend.mainScreenDataSource
self.theme = backend.theme
self.preferences = backend.preferences!
self.preferences = backend.preferences
super.init(nibName: nil, bundle: nil)
self.dataSource.observable.addListener(listener: self)
self.dataSource.requestData()
@@ -189,7 +189,7 @@ class MainScreenController: UITableViewController, MainScreenDataSourceListener
@objc func onMoreActionsClicked() {
let alert = UIAlertController(title: nil, message: nil, preferredStyle: .actionSheet)
if preferences.showArchived {
alert.addAction(UIAlertAction(title: strings.hide_archived, style: .default) {
(action: UIAlertAction) -> Void in
@@ -203,7 +203,7 @@ class MainScreenController: UITableViewController, MainScreenDataSourceListener
self.dataSource.requestData()
})
}
if preferences.showCompleted {
alert.addAction(UIAlertAction(title: strings.hide_completed, style: .default) {
(action: UIAlertAction) -> Void in
@@ -217,7 +217,7 @@ class MainScreenController: UITableViewController, MainScreenDataSourceListener
self.dataSource.requestData()
})
}
if preferences.nightMode {
alert.addAction(UIAlertAction(title: strings.day_mode, style: .default) {
(action: UIAlertAction) -> Void in
@@ -229,7 +229,7 @@ class MainScreenController: UITableViewController, MainScreenDataSourceListener
self.preferences.nightMode = true
})
}
alert.addAction(UIAlertAction(title: strings.help, style: .default) {
(action: UIAlertAction) -> Void in
if let link = URL(string: "http://loophabits.org/faq") {

View File

@@ -124,7 +124,7 @@ class IosDatabaseOpener : NSObject, DatabaseOpener {
}
func open(file: UserFile) -> Database {
let dbPath = (file as! IosUserFile).path
let dbPath = (file as! IosFile).path
let version = String(cString: sqlite3_libversion())
log.info(tag: "IosDatabaseOpener", msg: "SQLite \(version)")

View File

@@ -26,9 +26,6 @@ class IosDatabaseTest: XCTestCase {
let fileOpener = IosFileOpener()
let dbFile = fileOpener.openUserFile(path: "test.sqlite3")
if dbFile.exists() {
dbFile.delete()
}
let db = databaseOpener.open(file: dbFile)
var stmt = db.prepareStatement(sql: "drop table if exists demo")
@@ -68,6 +65,5 @@ class IosDatabaseTest: XCTestCase {
stmt.finalize()
db.close()
dbFile.delete()
}
}

View File

@@ -7,6 +7,7 @@
objects = {
/* Begin PBXBuildFile section */
001592642260AE0F00D2814F /* main.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C0C6C92246E543003D8AF0 /* main.framework */; };
006EFE4E2252EA2B008464E0 /* IosLocale.swift in Sources */ = {isa = PBXBuildFile; fileRef = 006EFE4D2252EA2B008464E0 /* IosLocale.swift */; };
006EFE50225432B8008464E0 /* AboutScreenController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 006EFE4F225432B8008464E0 /* AboutScreenController.swift */; };
00A5B42822009F590024E00C /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00A5B42722009F590024E00C /* AppDelegate.swift */; };
@@ -18,7 +19,6 @@
00C0C6BE22465F65003D8AF0 /* databases in Resources */ = {isa = PBXBuildFile; fileRef = 00C0C6BB22465F65003D8AF0 /* databases */; };
00C0C6BF22465F65003D8AF0 /* migrations in Resources */ = {isa = PBXBuildFile; fileRef = 00C0C6BC22465F65003D8AF0 /* migrations */; };
00C0C6CA2246E543003D8AF0 /* main.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C0C6C92246E543003D8AF0 /* main.framework */; };
00C0C6CB2246E543003D8AF0 /* main.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 00C0C6C92246E543003D8AF0 /* main.framework */; };
00C0C6CC2246E550003D8AF0 /* main.framework in Embed Frameworks */ = {isa = PBXBuildFile; fileRef = 00C0C6C92246E543003D8AF0 /* main.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; };
00C0C6CE2246EFB3003D8AF0 /* IosExtensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00C0C6CD2246EFB3003D8AF0 /* IosExtensions.swift */; };
00C0C6D122470705003D8AF0 /* IosCanvas.swift in Sources */ = {isa = PBXBuildFile; fileRef = 00C0C6D022470705003D8AF0 /* IosCanvas.swift */; };
@@ -94,7 +94,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
00C0C6CB2246E543003D8AF0 /* main.framework in Frameworks */,
001592642260AE0F00D2814F /* main.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -498,6 +498,7 @@
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OBJC_BRIDGING_HEADER = Application/BridgingHeader.h;
SWIFT_PRECOMPILE_BRIDGING_HEADER = NO;
SWIFT_VERSION = 4.2;
TARGETED_DEVICE_FAMILY = "1,2";
};
@@ -525,6 +526,7 @@
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE_SPECIFIER = "";
SWIFT_OBJC_BRIDGING_HEADER = Application/BridgingHeader.h;
SWIFT_PRECOMPILE_BRIDGING_HEADER = NO;
SWIFT_VERSION = 4.2;
TARGETED_DEVICE_FAMILY = "1,2";
};
@@ -547,6 +549,8 @@
);
PRODUCT_BUNDLE_IDENTIFIER = org.isoron.uhabitsTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "";
SWIFT_PRECOMPILE_BRIDGING_HEADER = NO;
SWIFT_VERSION = 4.2;
TARGETED_DEVICE_FAMILY = "1,2";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/uhabits.app/uhabits";
@@ -570,6 +574,8 @@
);
PRODUCT_BUNDLE_IDENTIFIER = org.isoron.uhabitsTests;
PRODUCT_NAME = "$(TARGET_NAME)";
SWIFT_OBJC_BRIDGING_HEADER = "";
SWIFT_PRECOMPILE_BRIDGING_HEADER = NO;
SWIFT_VERSION = 4.2;
TARGETED_DEVICE_FAMILY = "1,2";
TEST_HOST = "$(BUILT_PRODUCTS_DIR)/uhabits.app/uhabits";