protected override void IterateCore (HyenaDataReader reader)
{
DatabaseTrackInfo track = DatabaseTrackInfo.Provider.Load (reader.Reader);
var write_delay = track.DateUpdated.AddSeconds (2) - DateTime.Now;
if (write_delay.TotalMilliseconds > 0) {
System.Threading.Thread.Sleep (write_delay);
return;
}
bool wrote = false;
bool renamed = false;
try {
if (WriteMetadataEnabled || WriteRatingsAndPlayCountsEnabled) {
Hyena.Log.DebugFormat ("Saving metadata for {0}", track);
wrote = StreamTagger.SaveToFile (track, WriteMetadataEnabled, WriteRatingsAndPlayCountsEnabled);
}
// Rename tracks only from the Music Library
if (RenameEnabled &&
track.PrimarySource.Equals (musicLibrarySource)) {
Hyena.Log.DebugFormat ("Updating file name for {0}", track);
renamed = RenameFile (track);
if (renamed && !wrote) {
track.LastSyncedStamp = DateTime.Now;
}
}
} catch (Exception) {
Hyena.Log.ErrorFormat ("Error writing to or renaming {0}", track);
} finally {
if (wrote || renamed) {
// Save the resulting changes to FileSize, LastSyncedStamp, possibly to Uri, etc
// Clear track model caches if URI changed
track.Save (renamed);
} else {
if (update_synced_at == null) {
update_synced_at = new HyenaSqliteCommand (
"UPDATE CoreTracks SET LastSyncedStamp = ? WHERE TrackID = ?");
}
ServiceManager.DbConnection.Execute (update_synced_at, DateTime.Now, track.TrackId);
}
}
}