Example #1
0
        private void autoNumber()
        {
            List <Track> tl = tracklist.SelectedTracks;

#if DEBUG
            List <Track> q = tracklist.Queue.ToList();
            q.RemoveAll(t => tl.IndexOf(t) < 0);
            for (int i = 0; i < tl.Count; i++)
            {
                System.Diagnostics.Debug.Assert(tl[i] == q[i]);
            }
#endif

            int low = 1;
            IEnumerable <Track> sum = tl.FindAll(t => t.TrackNum > 0);
            if (sum.Any())
            {
                low = Math.Max(1, sum.Min(t => t.TrackNum));
            }

            frmNumberTracks nt = new frmNumberTracks(low, tl.Count);
            nt.ShowDialog(this);
            if (nt.DialogResult == DialogResult.OK)
            {
                int num = nt.First;
                for (int i = 0; i < tl.Count; i++)
                {
                    tl[i].TrackNum    = num++;
                    tl[i].ChangeType |= ChangeType.WriteTags;
                }
                tracklist.Invalidate();
                TrackWriter.AddToUnsavedTracks(tl);
            }
        }
Example #2
0
        public bool Load()
        {
            if (!this.ConfirmExists)
            {
                return(false);
            }
            if (this.FileDate != File.GetLastWriteTime(this.FilePath))
            {
                this.toStringDirty     = true;
                this.searchStringDirty = true;

                TrackWriter.GetTags(this);

                FileInfo fi = new FileInfo(this.FilePath);
                this.FileSize = fi.Length;
                this.FileDate = fi.LastWriteTime;

                if (Setting.MoveNewFilesIntoMain)
                {
                    this.ChangeType  |= (ChangeType.Rename | ChangeType.Move | ChangeType.IgnoreContainment);
                    this.RenameFormat = Setting.DefaultRenameFormat;
                    TrackWriter.AddToUnsavedTracks(this);
                }
                else if (Setting.KeepOrganized)
                {
                    this.ChangeType  |= (ChangeType.Rename | ChangeType.Move);
                    this.RenameFormat = Setting.DefaultRenameFormat;
                    TrackWriter.AddToUnsavedTracks(this);
                }

                if (this.Type == FileType.None)
                {
                    return(false);
                }

                UpdateMainGroup();

                Database.IncrementDatabaseVersion(false);

                System.Threading.Thread.Sleep(0);
            }
            return(true);
        }
Example #3
0
        public void AddToLibrary(String FilePath)
        {
            if (Track == null)
            {
                Track = Track.Load(FilePath);
            }
            if (Track == null)
            {
                this.DownloadStatus = PodcastDownloadStatus.Error;
                throw new Exception("failed");
            }
            Track.Title        = this.Title;
            Track.Album        = Subscription.Name;
            Track.Genre        = this.Subscription.DefaultGenre;
            Track.RenameFormat = TrackWriter.RenameFormat.AR_AL_TK_TI;
            TrackWriter.AddToUnsavedTracks(Track);

            Database.AddToLibrary(Track, true, false);

            TrackWriter.Start();
        }
Example #4
0
        private static void addItems()
        {
            try
            {
                running = true;
                cancel  = false;
                int itemsLeft;
                lock (addItemLock)
                {
                    itemsLeft = itemsToAdd.Count;
                }

                while (!cancel && itemsLeft > 0)
                {
                    ItemToAdd ita;
                    lock (addItemLock)
                    {
                        ita = itemsToAdd[0];
                        itemsToAdd.RemoveAt(0);
                    }
                    if (Directory.Exists(ita.FilePath))
                    {
                        List <ItemToAdd> newItems = new List <ItemToAdd>();
                        DirectoryInfo    di       = new DirectoryInfo(ita.FilePath);
                        foreach (FileInfo fi in di.GetFiles())
                        {
                            newItems.Add(new ItemToAdd(fi.FullName, ita.PlaylistTarget, ita.AllowDuplicates));
                        }
                        foreach (DirectoryInfo ddi in di.GetDirectories())
                        {
                            newItems.Add(new ItemToAdd(ddi.FullName, ita.PlaylistTarget, ita.AllowDuplicates));
                        }

                        lock (addItemLock)
                        {
                            itemsToAdd = itemsToAdd.Union(newItems).ToList();
                        }
                    }
                    else
                    {
                        if (Track.IsValidExtension(Path.GetExtension(ita.FilePath)))
                        {
                            Track tt = Track.Load(ita.FilePath);
                            if (tt != null)
                            {
                                Database.AddLibraryResult alr = Database.AddToLibrary(tt, ita.AllowDuplicates, true);

                                TrackWriter.AddToUnsavedTracks(tt);

                                if (ita.PlaylistTarget.Length > 0)
                                {
                                    Database.AddToPlaylist(ita.PlaylistTarget, tt);
                                }

                                switch (alr)
                                {
                                case Database.AddLibraryResult.OK:
                                    Controller.ShowMessage("Loading: " + (++addCount).ToString() + " - " + tt.ToString());
                                    break;

                                case Database.AddLibraryResult.UpdateOnly:
                                    Controller.ShowMessage("Updating: " + (++addCount).ToString() + " - " + tt.ToString());
                                    break;
                                }
                                if (((addCount < 200) && ((addCount % 10) == 0)) || (addCount % 200 == 0))
                                {
                                    tryCallback();
                                }
                            }
                        }
                    }

                    lock (addItemLock)
                    {
                        itemsLeft = itemsToAdd.Count;
                    }
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.ToString());
            }
            running = false;
            lock (addItemLock)
            {
                if (cancel)
                {
                    itemsToAdd.Clear();
                }
            }
            tryCallback();
            TrackWriter.Start();
        }
Example #5
0
        private void writeTracks()
        {
            if (Dirty)
            {
                bool writeArtist      = write(txtArtist);
                bool writeAlbum       = write(txtAlbum);
                bool writeAlbumArtist = write(txtAlbumArtist);
                bool writeGenre       = write(cboGenre);
                bool writeGrouping    = write(cboGrouping);
                bool writeComposer    = write(txtComposer);
                bool writeYear        = write(txtYear);
                bool writeTrackNum    = write(txtTrackNum);
                bool writeDiskNum     = write(txtDiskNum);
                bool?writeCompilation = write(cboCompilation) ? (cboCompilation.Text == Localization.YES) : (bool?)null;

                string title;

                if (!isMultiple)
                {
                    title = txtTitle.Text.Trim();
                }
                string artist      = txtArtist.Text.Trim();
                string album       = txtAlbum.Text.Trim();
                string albumArtist = txtAlbumArtist.Text.Trim();
                string genre       = cboGenre.Text.Trim();
                string grouping    = cboGrouping.Text.Trim();
                string composer    = txtComposer.Text.Trim();

                int year = 0;
                Int32.TryParse(txtYear.Text.Trim(), out year);

                int trackNum = 0;
                Int32.TryParse(txtTrackNum.Text.Trim(), out trackNum);

                int diskNum = 0;
                Int32.TryParse(txtDiskNum.Text.Trim(), out diskNum);

                TrackWriter.RenameFormat rf = TrackWriter.RenameFormat.None;
                if (cboRename.SelectedIndex > 0 && (!isMultiple || checkboxes[cboRename].Checked))
                {
                    if (isMultiple)
                    {
                        rf = TrackWriter.GetRenameFormat(cboRename.Text);
                    }
                    else
                    {
                        rf = TrackWriter.GetRenameFormat(template, cboRename.Text);
                    }
                }

                bool writeImage = chkArt.Checked && ImageDirty;

                foreach (Track t in tracks)
                {
                    if (!isMultiple)
                    {
                        string s;
                        if (t.Title != (s = txtTitle.Text.Trim()))
                        {
                            t.Title       = s;
                            t.ChangeType |= ChangeType.WriteTags;
                        }
                    }

                    if (writeArtist)
                    {
                        t.ChangeType |= ChangeType.WriteTags;
                        t.Artist      = artist;
                    }

                    if (writeAlbum)
                    {
                        t.ChangeType |= ChangeType.WriteTags;
                        t.Album       = album;
                    }

                    if (writeAlbumArtist)
                    {
                        t.ChangeType |= ChangeType.WriteTags;
                        t.AlbumArtist = albumArtist;
                    }

                    if (writeComposer)
                    {
                        t.ChangeType |= ChangeType.WriteTags;
                        t.Composer    = composer;
                    }

                    if (writeGenre)
                    {
                        t.ChangeType |= ChangeType.WriteTags;
                        t.Genre       = genre;
                    }

                    if (writeGrouping)
                    {
                        t.ChangeType |= ChangeType.WriteTags;
                        t.Grouping    = grouping;
                    }

                    if (writeYear)
                    {
                        t.ChangeType |= ChangeType.WriteTags;
                        t.Year        = year;
                    }

                    if (writeTrackNum)
                    {
                        t.ChangeType |= ChangeType.WriteTags;
                        t.TrackNum    = trackNum;
                    }

                    if (writeDiskNum)
                    {
                        t.ChangeType |= ChangeType.WriteTags;
                        t.DiskNum     = diskNum;
                    }

                    if (writeCompilation.HasValue)
                    {
                        t.ChangeType |= ChangeType.WriteTags;
                        t.Compilation = writeCompilation.Value;
                    }

                    t.UpdateMainGroup();
                    Database.IncrementDatabaseVersion(true);

                    if (writeImage)
                    {
                        t.SetCover(Image);
                        t.ChangeType |= ChangeType.EmbedImage;
                        this.Parent.Invalidate();
                    }
                    else
                    {
                        t.AllowCoverLoad(); // tags might make it accessible now
                    }
                    if (rf != TrackWriter.RenameFormat.None)
                    {
                        t.RenameFormat = rf;
                        t.ChangeType  |= (ChangeType.Rename | ChangeType.IgnoreContainment);
                    }
                    if (Setting.KeepOrganized)
                    {
                        t.ChangeType |= ChangeType.Move;
                    }
                }

                TrackWriter.AddToUnsavedTracks(tracks);
            }
        }
Example #6
0
        public void DoReplayGainAnalysis()
        {
            try
            {
                Controller.ShowMessage("Starting volume leveling analysis...");

                List <List <Track> > albums = partitionByAlbum(tracks);

                byte[]  buffer = new byte[READ_BUFFER_SIZE];
                float[] left   = new float[READ_BUFFER_SIZE / 4];
                float[] right  = new float[READ_BUFFER_SIZE / 4];
                int     numSamples;

                foreach (List <Track> album in albums)
                {
                    try
                    {
                        if (rga.InitGainAnalysis(album[0].SampleRate))
                        {
                            foreach (Track t in album)
                            {
                                AudioStream stream = new AudioStreamFile(t, 0, new float[10], 10, false, ReplayGainMode.Off);

                                while ((numSamples = stream.Read(buffer, 0, READ_BUFFER_SIZE)) > 0)
                                {
                                    int inputBufferSize = numSamples / 4;
                                    for (int i = 0; i < inputBufferSize; i++)
                                    {
                                        left[i]  = AudioStreamBass.from16Bit(buffer[i * 4 + 1] * 0x100 + buffer[i * 4]);
                                        right[i] = AudioStreamBass.from16Bit(buffer[i * 4 + 3] * 0x100 + buffer[i * 4 + 2]);
                                    }
                                    rga.AnalyzeSamples(left, right, inputBufferSize);
                                    if (cancel)
                                    {
                                        callback();
                                        return;
                                    }
                                }
                                stream.Close();
                                t.ReplayGainTrack = rga.GetTrackGain();
                                numTracksDone++;
                                Controller.ShowMessage(String.Format("{0}/{1}: Volume analyzed for '{2}'", numTracksDone.ToString(), numTracks.ToString(), t.ToShortString()));
                            }
                            float albumGain = rga.GetAlbumGain();
                            foreach (Track t in album)
                            {
                                t.ReplayGainAlbum = albumGain;
                            }
                            if (Setting.WriteReplayGainTags)
                            {
                                foreach (Track t in album)
                                {
                                    t.ChangeType |= ChangeType.WriteTags;
                                }
                                TrackWriter.AddToUnsavedTracks(album);
                                TrackWriter.Start();
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        System.Diagnostics.Debug.WriteLine(ex.ToString());
                    }
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.ToString());
            }
            callback();
        }
Example #7
0
        protected override void ok()
        {
            if (createDir())
            {
                this.Enabled = false;

                saveSettings();

                string r = complexify(root());

                List <Track> outsideTracks = Database.FindAllTracks(t => !((oldRoot.Length > 0 && t.FilePath.StartsWith(oldRoot, StringComparison.OrdinalIgnoreCase)) || (t.FilePath.StartsWith(r, StringComparison.OrdinalIgnoreCase))));
                List <Track> tracks        = Database.LibrarySnapshot;

                foreach (Track t in tracks)
                {
                    t.ChangeType |= (ChangeType.Move | ChangeType.IgnoreContainment);
                }

                System.Diagnostics.Debug.WriteLine("num: " + tracks.Count(t => (t.ChangeType & ChangeType.IgnoreContainment) != 0));

                if (outsideTracks.Any(t => t.ConfirmExists))
                {
                    List <frmTaskDialog.Option> options = new List <frmTaskDialog.Option>();
                    options.Add(new frmTaskDialog.Option("Move all my files", "All files in your library will be relocated within the top folder. (Files on different drives than your top folder's drive will be copied instead of moved.)", 0));
                    options.Add(new frmTaskDialog.Option("Don't move outside files", "Only files already under the top folder will be organized.", 1));
                    options.Add(new frmTaskDialog.Option("Cancel", "Go back to the organizer panel.", 2));

                    frmTaskDialog td = new frmTaskDialog(Localization.Get(UI_Key.Organize_Move_Files_Title),
                                                         Localization.Get(UI_Key.Organize_Move_Files),
                                                         options);

                    System.Diagnostics.Debug.WriteLine("num: " + tracks.Count(t => (t.ChangeType & ChangeType.IgnoreContainment) != 0));

                    td.ShowDialog(this);

                    switch (td.ResultIndex)
                    {
                    case 0:
                        break;

                    case 1:
                        foreach (Track t in outsideTracks)
                        {
                            t.ChangeType &= ~ChangeType.IgnoreContainment;
                        }
                        break;

                    case 2:
                        this.Enabled = true;
                        txtDirectory.Focus();
                        return;
                    }
                }

                foreach (Track t in tracks)
                {
                    t.RenameFormat = renameFormat;
                    if (renameFormat != TrackWriter.RenameFormat.None)
                    {
                        t.ChangeType |= ChangeType.Rename;
                    }
                }

                TrackWriter.AddToUnsavedTracks(tracks);

                done();
            }
        }