private void ChangeAndVerify(SafeUri uri, Action <TrackInfo> change, Action <TrackInfo> verify) { TagLib.File file = StreamTagger.ProcessUri(uri); TrackInfo track = new TrackInfo(); StreamTagger.TrackInfoMerge(track, file); file.Dispose(); // Make changes change(track); // Save changes bool saved = StreamTagger.SaveToFile(track, true, true, true); Assert.IsTrue(saved); // Read changes file = StreamTagger.ProcessUri(uri); track = new TrackInfo(); StreamTagger.TrackInfoMerge(track, file, false, true, true); file.Dispose(); // Verify changes verify(track); }
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); } } }
protected override void IterateCore(HyenaDataReader reader) { DatabaseTrackInfo track = DatabaseTrackInfo.Provider.Load(reader.Reader); bool wrote = false; bool renamed = false; try { if (WriteEnabled) { Hyena.Log.DebugFormat("Saving metadata for {0}", track); wrote = StreamTagger.SaveToFile(track); } if (RenameEnabled) { 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); } } }