Пример #1
0
        public frmFileInfo(Track Track) : base(Track.ToShortString(), ButtonCreateType.OKOnly)
        {
            this.ClientSize = new System.Drawing.Size(550, 400);

            SPACING = 4;

            this.KeyPreview = true;

            btnOK.Text = Localization.Get(UI_Key.File_Info_Done);

            track = Track;
            track.Load();

            art = new Artwork();
            art.CurrentTrack = track;
            art.Size         = new Size(ART_SIZE, ART_SIZE);
            art.Location     = new Point(this.ClientRectangle.Width - ART_SIZE - MARGIN, MARGIN);
            this.Controls.Add(art);

            if (track.ConfirmExists)
            {
                btnEdit = new QButton(Localization.Get(UI_Key.File_Info_Edit), false, false);
                btnEdit.ButtonPressed += (s) => { edit(); };
                this.Controls.Add(btnEdit);
            }

            this.EditFile = false;
        }
Пример #2
0
        private static bool importM3U(List <Track> Tracks, string relativePath, System.IO.StreamReader sr)
        {
            while (!sr.EndOfStream)
            {
                string s = sr.ReadLine();

                if (s.Contains("#"))
                {
                    s = s.Substring(0, s.IndexOf('#'));
                }

                if (File.Exists(s) && Track.IsValidExtension(Path.GetExtension(s)))
                {
                    if (!Path.IsPathRooted(s))
                    {
                        s = Path.Combine(relativePath, s);
                    }

                    if (File.Exists(s))
                    {
                        Track t = Track.Load(s);
                        if (t != null)
                        {
                            Tracks.Add(t);
                        }
                    }
                }
            }
            return(false);
        }
Пример #3
0
        private static bool importPLS(List <Track> Tracks, System.IO.StreamReader sr, bool MaxOneURL)
        {
            bool urlsFound = false;

            List <string> lines = new List <string>();

            while (!sr.EndOfStream)
            {
                lines.Add(sr.ReadLine());
            }

            string noe = lines.FirstOrDefault(l => l.StartsWith("numberofentries=", StringComparison.OrdinalIgnoreCase));

            if (noe != null)
            {
                int numLines;
                if (Int32.TryParse(noe.Substring("numberofentries=".Length), out numLines))
                {
                    for (int i = 1; i <= numLines; i++)
                    {
                        string prefix = "file" + i.ToString() + "=";
                        string line   = lines.FirstOrDefault(l => l.StartsWith(prefix, StringComparison.OrdinalIgnoreCase));
                        if (line == null)
                        {
                            return(urlsFound);
                        }

                        line = line.Substring(prefix.Length).Trim();

                        if (line.StartsWith("http://"))
                        {
                            if (!urlsFound || !MaxOneURL)
                            {
                                string prefix2 = "title" + i.ToString() + "=";
                                string line2   = lines.FirstOrDefault(l => l.StartsWith(prefix2, StringComparison.OrdinalIgnoreCase));
                                if (line2 != null)
                                {
                                    Radio.AddStation(line, line2.Substring(prefix2.Length), MaxOneURL);
                                }
                                else
                                {
                                    Radio.AddStation(line, String.Empty, MaxOneURL);
                                }
                                urlsFound = true;
                            }
                        }
                        else if (File.Exists(line) && Track.IsValidExtension(Path.GetExtension(line)))
                        {
                            Track t = Track.Load(line);
                            if (t != null)
                            {
                                Tracks.Add(t);
                            }
                        }
                    }
                }
            }
            return(urlsFound);
        }
Пример #4
0
        public static void AddTracksToList(DirectoryInfo DI, List <Track> Tracks, MessageDelegate ShowMessage)
        {
            string adding = Localization.Get(UI_Key.Lib_Adding) + " ";

            foreach (FileInfo fi in DI.GetFiles())
            {
                Track t = Track.Load(fi.FullName);
                if (t != null)
                {
                    Tracks.Add(t);
                    ShowMessage(adding + Tracks.Count.ToString() + ": " + t.ToString());
                    Lib.DoEvents();
                }
            }
            foreach (DirectoryInfo di in DI.GetDirectories())
            {
                AddTracksToList(di, Tracks, ShowMessage);
            }
        }
Пример #5
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();
        }
Пример #6
0
        public static Track Load(string FilePath)
        {
            if (!IsValidExtension(Path.GetExtension(FilePath)))
            {
                return(null);
            }

            if (File.Exists(FilePath))
            {
                Track t = Database.GetTrackWithFilePath(FilePath);

                if (t == null)
                {
                    t         = new Track(FilePath);
                    t.AddDate = DateTime.Now;

                    if (!t.Load())
                    {
                        return(null);
                    }
                }
                else if (t.FileDate != File.GetLastWriteTime(FilePath))
                {
                    if (!t.Load())
                    {
                        return(null);
                    }
                }

                return(t);
            }
            else
            {
                return(null);
            }
        }
Пример #7
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();
        }
Пример #8
0
        private static void start()
        {
            running = true;
            cancel  = false;

            try
            {
                if (directories.Count > 0)
                {
                    Random r = new Random();

                    IOrderedEnumerable <string> dirs = directories.OrderBy(d => r.Next());

                    Stack <string> paths = new Stack <string>(dirs);

                    while (paths.Count > 0 && paths.Peek() != null && !cancel)
                    {
                        string s = paths.Pop();
                        if (Directory.Exists(s))
                        {
                            foreach (string ss in (Directory.GetDirectories(s)).OrderBy(x => r.Next()))
                            {
                                paths.Push(ss);
                            }
                            foreach (string ss in (Directory.GetFiles(s).Reverse()))
                            {
                                paths.Push(ss);
                            }
                        }
                        else if (File.Exists(s))
                        {
                            Track t = Track.Load(s);
                            if (t != null)
                            {
                                lock (@lock)
                                {
                                    newTracks.Add(t);
                                }

                                Thread.Sleep(100);
                                if (addIfNeeded(30))
                                {
                                    Thread.Sleep(200);
                                }
                            }
                            Thread.Sleep(50);
                        }
                    }
                    while (!cancel && !addIfNeeded(0))
                    {
                        Thread.Sleep(200);
                    }
                    ;
                }
            }
            catch (Exception e)
            {
                System.Diagnostics.Debug.WriteLine(e.ToString());
            }

            running = false;

            if (cancel)
            {
                newTracks.Clear();
            }
            else
            {
                cancel = true;
                Clock.DoOnMainThread(sendTracks, 50);

                // get back to UI thread
                Clock.DoOnMainThread(Controller.GetInstance().RefreshAll, 500);
            }

            resetRestartAlarm();
        }