public bool Delete(TModel item) { // Importantly, begin the realm write *before* re-fetching, else the update realm may not be in a consistent state // (ie. if an async import finished very recently). return(Realm.Write(realm => { if (!item.IsManaged) { item = realm.Find <TModel>(item.ID); } if (item?.DeletePending != false) { return false; } item.DeletePending = true; return true; })); }
public void Cleanup() { Logger.Log(@"Beginning realm file store cleanup"); int totalFiles = 0; int removedFiles = 0; // can potentially be run asynchronously, although we will need to consider operation order for disk deletion vs realm removal. realm.Write(r => { // TODO: consider using a realm native query to avoid iterating all files (https://github.com/realm/realm-dotnet/issues/2659#issuecomment-927823707) var files = r.All <RealmFile>().ToList(); foreach (var file in files) { totalFiles++; if (file.BacklinksCount > 0) { continue; } try { removedFiles++; Storage.Delete(file.GetStoragePath()); r.Remove(file); } catch (Exception e) { Logger.Error(e, $@"Could not delete databased file {file.Hash}"); } } }); Logger.Log($@"Finished realm file store cleanup ({removedFiles} of {totalFiles} deleted)"); }