コード例 #1
0
        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);
        }
コード例 #2
0
        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);
                }
            }
        }
コード例 #3
0
        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);
                }
            }
        }