Skip to content

Commit

Permalink
basic change tracking, to avoid wasteful db updates #11
Browse files Browse the repository at this point in the history
  • Loading branch information
sobri909 committed May 5, 2018
1 parent eb3389c commit 0251b1d
Show file tree
Hide file tree
Showing 4 changed files with 73 additions and 9 deletions.
3 changes: 2 additions & 1 deletion LocoKit/LocalStore/PersistentObject.swift
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ public protocol PersistentObject: TimelineObject, Persistable {
var transactionDate: Date? { get set }
var lastSaved: Date? { get set }
var unsaved: Bool { get }
var hasChanges: Bool { get }

func save(immediate: Bool)
func save(in db: Database) throws
Expand All @@ -26,7 +27,7 @@ public protocol PersistentObject: TimelineObject, Persistable {
public extension PersistentObject {
public var unsaved: Bool { return lastSaved == nil }
public func save(immediate: Bool = false) { persistentStore.save(self, immediate: immediate) }
public func save(in db: Database) throws { if unsaved { try insert(db) } else { try update(db) } }
public func save(in db: Database) throws { if unsaved { try insert(db) } else if hasChanges { try update(db) } }
}

public extension PersistentObject where Self: TimelineItem {
Expand Down
30 changes: 27 additions & 3 deletions LocoKit/LocalStore/PersistentPath.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,34 @@ open class PersistentPath: Path, PersistentObject {

open override var currentInstance: PersistentPath? { return super.currentInstance as? PersistentPath }

public override var deleted: Bool { didSet { if oldValue != deleted { save(immediate: true) } } }
public override var deleted: Bool {
didSet {
if oldValue != deleted {
hasChanges = true
save(immediate: true)
}
}
}

// MARK: Relationships

open override var previousItemId: UUID? { didSet { if oldValue != previousItemId { save() } } }
open override var nextItemId: UUID? { didSet { if oldValue != previousItemId { save() } } }
open override var previousItemId: UUID? {
didSet {
if oldValue != previousItemId {
hasChanges = true
save()
}
}
}

open override var nextItemId: UUID? {
didSet {
if oldValue != nextItemId {
hasChanges = true
save()
}
}
}

private var _samples: [LocomotionSample]?
open override var samples: [LocomotionSample] {
Expand Down Expand Up @@ -60,6 +82,7 @@ open class PersistentPath: Path, PersistentObject {

open override func samplesChanged() {
super.samplesChanged()
hasChanges = true
save()
}

Expand Down Expand Up @@ -91,6 +114,7 @@ open class PersistentPath: Path, PersistentObject {

public var transactionDate: Date?
public var lastSaved: Date?
public private(set) var hasChanges: Bool = false

// MARK: Initialisers

Expand Down
19 changes: 17 additions & 2 deletions LocoKit/LocalStore/PersistentSample.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,14 @@ import LocoKitCore

open class PersistentSample: LocomotionSample, PersistentObject {

public override var confirmedType: ActivityTypeName? { didSet { if oldValue != confirmedType { save() } } }
public override var confirmedType: ActivityTypeName? {
didSet {
if oldValue != confirmedType {
hasChanges = true
save()
}
}
}

// MARK: Required initialisers

Expand Down Expand Up @@ -44,7 +51,14 @@ open class PersistentSample: LocomotionSample, PersistentObject {

// MARK: Relationships

public override var timelineItemId: UUID? { didSet { if oldValue != timelineItemId { save() } } }
public override var timelineItemId: UUID? {
didSet {
if oldValue != timelineItemId {
hasChanges = true
save()
}
}
}

// MARK: Persistable

Expand Down Expand Up @@ -79,6 +93,7 @@ open class PersistentSample: LocomotionSample, PersistentObject {
public var persistentStore: PersistentTimelineStore { return store as! PersistentTimelineStore }
public var transactionDate: Date?
public var lastSaved: Date?
public private(set) var hasChanges: Bool = false

}

30 changes: 27 additions & 3 deletions LocoKit/LocalStore/PersistentVisit.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,34 @@ open class PersistentVisit: Visit, PersistentObject {

open override var currentInstance: PersistentVisit? { return super.currentInstance as? PersistentVisit }

public override var deleted: Bool { didSet { if oldValue != deleted { save(immediate: true) } } }
public override var deleted: Bool {
didSet {
if oldValue != deleted {
hasChanges = true
save(immediate: true)
}
}
}

// MARK: Relationships

open override var previousItemId: UUID? { didSet { if oldValue != previousItemId { save() } } }
open override var nextItemId: UUID? { didSet { if oldValue != previousItemId { save() } } }
open override var previousItemId: UUID? {
didSet {
if oldValue != previousItemId {
hasChanges = true
save()
}
}
}

open override var nextItemId: UUID? {
didSet {
if oldValue != nextItemId {
hasChanges = true
save()
}
}
}

private var _samples: [LocomotionSample]?
open override var samples: [LocomotionSample] {
Expand Down Expand Up @@ -60,6 +82,7 @@ open class PersistentVisit: Visit, PersistentObject {

open override func samplesChanged() {
super.samplesChanged()
hasChanges = true
save()
}

Expand Down Expand Up @@ -91,6 +114,7 @@ open class PersistentVisit: Visit, PersistentObject {

public var transactionDate: Date?
public var lastSaved: Date?
public private(set) var hasChanges: Bool = false

// MARK: Initialisers

Expand Down

0 comments on commit 0251b1d

Please sign in to comment.