Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Deleting TimelineItems #82

Open
avinashamanjha251 opened this issue Oct 6, 2021 · 5 comments
Open

Deleting TimelineItems #82

avinashamanjha251 opened this issue Oct 6, 2021 · 5 comments

Comments

@avinashamanjha251
Copy link

avinashamanjha251 commented Oct 6, 2021

Hi @sobri909,
Please help me on deleting TimelineItems from db. I'm trying with tappedClear() function to delete items. but I'm not able to track that how many items are already delete from db, because immediate boolean in save() function is false.

 var dataSet: TimelineSegment?

 var itemsToShow: [TimelineItem] {
        return dataSet?.timelineItems ?? []
  }
    
  func tappedClear() {
        // TODO: flush the timeline data
        self.itemsToShow.forEach {
            $0.delete()
        }
        store.keepDeletedObjectsFor = TimeInterval(timerCount)
        store.hardDeleteSoftDeletedObjects()
    }
    
  public func save(_ object: TimelineObject, immediate: Bool) {
        mutex.sync {
            if let item = object as? TimelineItem {
                itemsToSave.insert(item)
            } else if let sample = object as? PersistentSample {
                samplesToSave.insert(sample)
            }
        }
        if immediate { save() }
    }
@sobri909
Copy link
Owner

sobri909 commented Oct 7, 2021

For how many items are deleted, I'd just go with the itemsToShow.count.

For hard deleting them, you will want to call store.save() to ensure the soft deletes are pushed to the db before doing the hard delete. So for example:

self.itemsToShow.forEach {
    $0.delete()
}
store.save() // this line will ensure the soft deletes have been pushed to the db before doing the hard delete
store.keepDeletedObjectsFor = TimeInterval(timerCount)
store.hardDeleteSoftDeletedObjects()

However, keep an eye on the console logs, because TimelineItems can't be deleted if they have any samples assigned. ie this check in the delete() method:

guard samples.isEmpty else {
    os_log(.debug, "Can't delete an item that has samples. Assign the samples to another item first.")
    return
}

If you're really wanting to delete all that recorded data entirely, then you should probably do something like this:

itemsToShow.forEach { item in
    item.samples.forEach { $0.delete() }
    item.delete()
}
store.save()

@avinashamanjha251
Copy link
Author

avinashamanjha251 commented Oct 7, 2021

Hi @sobri909 .. after deleting all objects .. and again when starts the the recorder's startRecoding(), app crashes with fatal error

LocoKit/TimelineStore.swift:377: Fatal error: 'try!' expression unexpectedly raised an error: SQLite error 19 with statement COMMIT TRANSACTION: FOREIGN KEY constraint failed

file name - Jobs
line number - 44

Screenshot 2021-10-07 at 4 12 12 PM

file name - Jobs
line number - 135
Screenshot 2021-10-07 at 4 12 34 PM

file name - TimelineSTore
line number - 408
Screenshot 2021-10-07 at 4 12 45 PM

file name - TimelineSTore
line number - 377
Screenshot 2021-10-07 at 4 07 15 PM

@sobri909
Copy link
Owner

sobri909 commented Oct 8, 2021

Does it crash immediately after starting recording? Does it also crash after a fresh launch of the app?

@sobri909
Copy link
Owner

sobri909 commented Oct 8, 2021

Basically we'll need to figure out which constraint is failing. I presume it has to be sample.timelineItemId, but I can't see how that would fail, given that a sample can only be assigned to an existing TimelineItem.

@avinashamanjha251
Copy link
Author

avinashamanjha251 commented Oct 8, 2021

Does it crash immediately after starting recording? Does it also crash after a fresh launch of the app?

Not for first time.. crashes when started recording second time
when I started recording second time it crash. App is opening successfully without any crash.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants