Пример #1
0
        private void FetchLyric(string artist, string title, bool automaticUpdate)
        {
            LockGui();
            tbLyrics.Text = "";
            lvSearchResults.Items.Clear();

            _counter = 0;

            _sitesToSearch.Clear();
            foreach (var site in singleRunSitesList.Items.Cast <object>().Where(site => singleRunSitesList.CheckedItems.Contains(site)))
            {
                _sitesToSearch.Add((string)site);
            }

            // If automaticUpdate is set then return after the first positive search
            _mEventStopThread = new ManualResetEvent(false);
            _lyricsController = new LyricsController(this, _mEventStopThread, _sitesToSearch.ToArray(), true, automaticUpdate, _mFind, _mReplace);

            ThreadStart job = delegate { _lyricsController.Run(); };

            _mLyricControllerThread      = new Thread(job);
            _mLyricControllerThread.Name = "lyricSearch Thread"; // looks nice in Output window
            _mLyricControllerThread.Start();

            _lyricsController.AddNewLyricSearch(artist, title, MediaPortalUtil.GetStrippedPrefixArtist(artist, _mStrippedPrefixStrings));
        }
        private void fetchLyric(string artist, string title)
        {
            lockGUI();
            tbLyrics.Text = "";
            lvSearchResults.Items.Clear();

            counter = 0;

            sitesToSearch = new List <string>();

            if (cbLyricWiki.Checked)
            {
                sitesToSearch.Add("LyricWiki");
            }
            if (cbEvilLabs.Checked)
            {
                sitesToSearch.Add("EvilLabs");
            }
            if (cbHotLyrics.Checked)
            {
                sitesToSearch.Add("HotLyrics");
            }
            if (cbLyrics007.Checked)
            {
                sitesToSearch.Add("Lyrics007");
            }
            if (cbLyricsOnDemand.Checked)
            {
                sitesToSearch.Add("LyricsOnDemand");
            }
            if (cbSeekLyrics.Checked)
            {
                sitesToSearch.Add("SeekLyrics");
            }

            lc = new LyricsController(this, m_EventStopThread, (string[])sitesToSearch.ToArray(), true);

            ThreadStart job = delegate
            {
                lc.Run();
            };

            m_LyricControllerThread      = new Thread(job);
            m_LyricControllerThread.Name = "lyricSearch Thread";        // looks nice in Output window
            m_LyricControllerThread.Start();

            lc.AddNewLyricSearch(artist, title);
        }
Пример #3
0
        private void fetchLyric(string artist, string title, bool automaticUpdate)
        {
            log.Trace(">>>");
            lockGUI();
            tbLyrics.Text = "";
            lvSearchResults.Items.Clear();

            counter = 0;

            sitesToSearch = new List <string>();

            if (Options.MainSettings.SearchLyricWiki)
            {
                sitesToSearch.Add("LyricWiki");
            }

            if (Options.MainSettings.SearchHotLyrics)
            {
                sitesToSearch.Add("HotLyrics");
            }

            if (Options.MainSettings.SearchLyrics007)
            {
                sitesToSearch.Add("Lyrics007");
            }

            if (Options.MainSettings.SearchLyricsOnDemand)
            {
                sitesToSearch.Add("LyricsOnDemand");
            }

            if (Options.MainSettings.SearchLyricsPlugin)
            {
                sitesToSearch.Add("LyricsPluginSite");
            }

            // If automaticUpdate is set then return after the first positive search
            lc = new LyricsController(this, m_EventStopThread, sitesToSearch.ToArray(), true, automaticUpdate, "", "");

            ThreadStart job = delegate { lc.Run(); };

            m_LyricControllerThread      = new Thread(job);
            m_LyricControllerThread.Name = "lyricSearch Thread"; // looks nice in Output window
            m_LyricControllerThread.Start();

            lc.AddNewLyricSearch(artist, title, GetStrippedPrefixArtist(artist, m_strippedPrefixStrings));
            log.Trace("<<<");
        }
Пример #4
0
        private void bgWorkerLyrics_DoWork(object sender, DoWorkEventArgs e)
        {
            if (lyricsQueue.Count > 0)
            {
                // start running the lyricController
                lc = new LyricsController(this, m_EventStopThread, sitesToSearch.ToArray(), false, false, "", "");

                lc.NoOfLyricsToSearch = lyricsQueue.Count;
                ThreadStart runLyricController = delegate { lc.Run(); };
                m_LyricControllerThread = new Thread(runLyricController);
                m_LyricControllerThread.Start();

                lc.StopSearches = false;


                int row = 0;
                while (lyricsQueue.Count != 0)
                {
                    if (lc == null)
                    {
                        return;
                    }

                    if (lc.NoOfCurrentSearches < m_NoOfCurrentSearchesAllowed && lc.StopSearches == false)
                    {
                        string[] lyricID = (string[])lyricsQueue.Dequeue();

                        if (Options.MainSettings.SwitchArtist)
                        {
                            lyricID[0] = SwitchArtist(lyricID[0]);
                        }

                        lc.AddNewLyricSearch(lyricID[0], lyricID[1], GetStrippedPrefixArtist(lyricID[0], m_strippedPrefixStrings),
                                             row);
                        row++;
                    }

                    Thread.Sleep(100);
                }
            }
            else
            {
                ThreadFinished = new[] { "", "", localisation.ToString("lyricssearch", "NothingToSearch"), "" };
            }
        }
Пример #5
0
        private void btCancel_Click(object sender, EventArgs e)
        {
            stopCollectingOfTitles = true;

            if (lc != null)
            {
                lc.FinishThread(m_artist, m_track, "The search has been cancelled by the user.", "none");
                lc.Dispose();
                lc = null;
            }
            else
            {
                m_EventStopThread.Set();
                ThreadFinishedMethod(m_artist, m_track, "The search has been cancelled by the user.", "none");
            }

            bgWorkerSearch.CancelAsync();
            progressBar.ResetText();
            progressBar.Value       = 0;
            m_LyricControllerThread = null;
        }
Пример #6
0
        private void SearchOnline()
        {
            // After the tag search is completed, we now recalculate the number of lyrics to search for during online search
            _mNoOfSearchesToComplete -= _mNoOfSearchesCompleted;
            _mNoOfSearchesCompleted   = 0;
            _mNoOfCurrentlySearches   = 0;

            if (bwOnlineSearch.IsBusy)
            {
                Thread.Sleep(2000);
            }

            var lyricsSitesNames = LyricsSiteFactory.LyricsSitesNames();

            _mFind    = SettingManager.GetParamAsString(SettingManager.Find, "");
            _mReplace = SettingManager.GetParamAsString(SettingManager.Replace, "");


            _mStrippedPrefixStrings = MediaPortalUtil.GetStrippedPrefixStringArray();

            _mEventStopThread = new ManualResetEvent(false);

            // If automaticUpdate is set then return after the first positive search
            _lyricsController = new LyricsController(this, _mEventStopThread, lyricsSitesNames.Where(site => SettingManager.GetParamAsBool(SettingManager.SitePrefix + site, false)).ToArray(), false,
                                                     false,
                                                     _mFind, _mReplace);

            _lyricsController.NoOfLyricsToSearch = _mNoOfSearchesToComplete;

            ThreadStart job = delegate { _lyricsController.Run(); };

            _mLyricControllerThread = new Thread(job);
            _mLyricControllerThread.Start();

            _lyricsController.StopSearches = false;

            bwOnlineSearch.RunWorkerAsync();
        }
Пример #7
0
        private void btCancel_Click(object sender, EventArgs e)
        {
            if (_lyricsController != null)
            {
                _lyricsController.FinishThread(_mSelectedArtist, string.Empty, "The search has been cancelled by the user.", "none");
                _lyricsController.Dispose();
                _lyricsController = null;
            }
            else if (_mEventStopThread != null)
            {
                _mEventStopThread.Set();
                ThreadFinishedMethod(_mSelectedArtist, string.Empty, "The search has been cancelled by the user.", "none");
            }

            bwMusicTagSearch.CancelAsync();
            bwOnlineSearch.CancelAsync();
            ChangeButtonsEnableState();
            _mSearching = false;
            Thread.Sleep(500);
            RefreshSongsListView();
            RefreshArtistStats();
            ChangeStatusOnSubItems(true);
        }
Пример #8
0
        private void btCancel_Click(object sender, EventArgs e)
        {
            _stopCollectingOfTitles = true;

            if (_lyricsController != null)
            {
                _lyricsController.FinishThread(_mArtist, _mTrack, "The search has been stopped by the user.", "none");
                _lyricsController.Dispose();
                _lyricsController = null;
            }
            else
            {
                _mEventStopThread.Set();
                ThreadFinishedMethod(_mArtist, _mTrack, "The search has been stopped by the user.", "none");
            }

            bgWorkerSearch.CancelAsync();
            progressBar.ResetText();
            progressBar.Value       = 0;
            _mLyricControllerThread = null;

            Update();
        }
        private void stopSearch()
        {
            Monitor.Enter(this);
            try
            {
                if (lc != null)
                {
                    lc.FinishThread(originalArtist, originalTitle, "", "");
                    lc.Dispose();
                    lc = null;
                }
                else
                {
                    m_EventStopThread.Set();
                    ThreadFinishedMethod(originalArtist, originalTitle, "", "");
                }

                m_LyricControllerThread = null;
            }
            finally
            {
                Monitor.Exit(this);
            }
        }
Пример #10
0
        private void StopSearch()
        {
            Monitor.Enter(this);
            try
            {
                if (_lyricsController != null)
                {
                    _lyricsController.FinishThread(_originalArtist, _originalTitle, "", "");
                    _lyricsController.Dispose();
                    _lyricsController = null;
                }
                else
                {
                    _mEventStopThread.Set();
                    ThreadFinishedMethod(_originalArtist, _originalTitle, "", "");
                }

                _mLyricControllerThread = null;
            }
            finally
            {
                Monitor.Exit(this);
            }
        }
Пример #11
0
        private void bgWorkerSearch_DoWork(object sender, DoWorkEventArgs e)
        {
//            Thread.CurrentThread.Name = "bgWorker - Search";

            #region 1. Sorting song
            lyricConfigInfosQueue = new Queue();

            if (m_SearchOnlyMarkedSongs == false)
            {
                //System.IO.Directory.SetCurrentDirectory(@"C:\Program Files\Team MediaPortal\MediaPortal");
                //string test = System.IO.Directory.GetCurrentDirectory();

                MusicDatabase dbs = new MusicDatabase();

                dbs.GetArtists(ref artists);

                m_noOfArtistsToSearch = artists.Count;

                for (int albumIndex = 0; albumIndex < artists.Count; albumIndex++)
                {
                    // If the user has cancelled the search => end this
                    if (stopCollectingOfTitles)
                    {
                        bgWorkerSearch.CancelAsync();
                        return;
                    }

                    string currentArtist = (string)artists[albumIndex];
                    dbs.GetSongsByArtist(currentArtist, ref songs);

                    for (int i = 0; i < songs.Count; i++)
                    {
                        // if song isn't known in lyric database the progressbar should not be incremented
                        int  songNotKnown = -1;
                        Song song         = (Song)songs[i];

                        /* Don't include song if one of the following is true
                         * 1. The artist isn't known (MP issue - should be deleted?)
                         * 2. Various artister should not be considered and the artist is "various artist"
                         * 3. Song with a lyric in the tag should not be considered, but instead include the file to the database right away */

                        MusicTag tag = null;

                        if (song.Artist.Equals("unknown") ||
                            (m_DisregardVariousArtist && (song.Artist.ToLower().Equals("various artists") || song.Artist.ToLower().Equals("diverse kunstnere"))))
                        {
                            m_DisregardedSongs += 1;
                        }
                        else if ((m_DisregardSongWithLyricInTag == false && ((tag = MediaPortal.TagReader.TagReader.ReadTag(song.FileName)) != null) && tag.Lyrics.Length > 0))
                        {
                            m_SongsWithLyric += 1;

                            string capArtist = LyricUtil.CapatalizeString(tag.Artist);
                            string capTitle  = LyricUtil.CapatalizeString(tag.Title);

                            if (DatabaseUtil.IsTrackInLyricsDatabase(MyLyricsSettings.LyricsDB, capArtist, capTitle).Equals(DatabaseUtil.LYRIC_NOT_FOUND))
                            {
                                MyLyricsSettings.LyricsDB.Add(DatabaseUtil.CorrectKeyFormat(capArtist, capTitle), new LyricsItem(capArtist, capTitle, tag.Lyrics, "Tag"));
                            }

                            if (DatabaseUtil.IsTrackInLyricsMarkedDatabase(MyLyricsSettings.LyricsMarkedDB, capArtist, capTitle).Equals(DatabaseUtil.LYRIC_MARKED))
                            {
                                MyLyricsSettings.LyricsMarkedDB.Remove(DatabaseUtil.CorrectKeyFormat(capArtist, capTitle));
                            }
                        }
                        else
                        {
                            int  status = DatabaseUtil.IsTrackInLyricsDatabase(MyLyricsSettings.LyricsDB, song.Artist, song.Title);
                            bool isTrackInLyricsMarkedDatabase = true;

                            if (!m_DisregardKnownLyric && status.Equals(DatabaseUtil.LYRIC_FOUND) ||
                                (!m_DisregardMarkedLyric && ((isTrackInLyricsMarkedDatabase = DatabaseUtil.IsTrackInLyricsMarkedDatabase(MyLyricsSettings.LyricsMarkedDB, song.Artist, song.Title).Equals(DatabaseUtil.LYRIC_MARKED)) || status.Equals(DatabaseUtil.LYRIC_MARKED))) ||
                                (status.Equals(DatabaseUtil.LYRIC_NOT_FOUND) && !DatabaseUtil.IsTrackInLyricsMarkedDatabase(MyLyricsSettings.LyricsMarkedDB, song.Artist, song.Title).Equals(DatabaseUtil.LYRIC_MARKED)))
                            {
                                songNotKnown = 1;
                                if (++m_SongsNotKnown > m_Limit)
                                {
                                    songNotKnown = 0;
                                    bgWorkerSearch.ReportProgress(songNotKnown);
                                    goto startSearch;
                                }

                                string[] lyricId = new string[2] {
                                    song.Artist, song.Title
                                };
                                lyricConfigInfosQueue.Enqueue(lyricId);

                                m_SongsToSearch = lyricConfigInfosQueue.Count;
                                bgWorkerSearch.ReportProgress(songNotKnown);
                            }
                            else if (status.Equals(DatabaseUtil.LYRIC_FOUND))
                            {
                                m_SongsWithLyric += 1;
                            }
                            else //if (status.Equals(MyLyricsUtil.LYRIC_MARKED))
                            {
                                m_SongsWithMark += 1;
                            }
                        }
                        bgWorkerSearch.ReportProgress(songNotKnown);
                    }
                }
            }
            else
            {
                foreach (KeyValuePair <string, LyricsItem> kvp in MyLyricsSettings.LyricsMarkedDB)
                {
                    int songNotKnown = 1;
                    if (++m_SongsNotKnown > m_Limit)
                    {
                        songNotKnown = 0;
                        bgWorkerSearch.ReportProgress(-1);
                        goto startSearch;
                    }
                    string[] lyricId = new string[2] {
                        kvp.Value.Artist, kvp.Value.Title
                    };
                    lyricConfigInfosQueue.Enqueue(lyricId);
                    m_SongsToSearch = lyricConfigInfosQueue.Count;
                    bgWorkerSearch.ReportProgress(songNotKnown);
                }
            }

startSearch:



            # endregion

            #region 2. Searching for lyrics
            // create worker thread instance
            if (lyricConfigInfosQueue.Count > 0)
            {
                // start running the lyricController
                lc = new LyricsController(this, m_EventStopThread, sitesToSearchArray, false);

                lc.NoOfLyricsToSearch = lyricConfigInfosQueue.Count;
                ThreadStart runLyricController = delegate
                {
                    lc.Run();
                };
                m_LyricControllerThread = new Thread(runLyricController);
                m_LyricControllerThread.Start();

                lc.StopSearches = false;


                while (lyricConfigInfosQueue.Count != 0)
                {
                    // If the user has cancelled the search => end this
                    if (stopCollectingOfTitles && lc != null)
                    {
                        bgWorkerSearch.CancelAsync();
                        return;
                    }
                    else if (lc == null)
                    {
                        return;
                    }

                    if (m_noOfCurrentlySearches < m_NoOfCurrentSearchesAllowed && lc.StopSearches == false)
                    {
                        m_noOfCurrentlySearches += 1;
                        string[] lyricID = (string[])lyricConfigInfosQueue.Dequeue();
                        lc.AddNewLyricSearch(lyricID[0], lyricID[1]);
                    }

                    Thread.Sleep(100);
                }
            }
            else
            {
                ThreadFinished = new string[] { "", "", "There is no titles to search", "" };
            }
            #endregion
        }
Пример #12
0
        private void bgWorkerSearch_DoWork(object sender, DoWorkEventArgs e)
        {
            #region 1. Sorting song

            _lyricConfigInfosQueue = new Queue();

            _mMusicDatabase = MusicDatabase.Instance;

            if (_mSearchOnlyMarkedSongs == false)
            {
                //System.IO.Directory.SetCurrentDirectory(@"C:\Program Files\Team MediaPortal\MediaPortal");
                //string test = System.IO.Directory.GetCurrentDirectory();

                _mMusicDatabase.GetAllArtists(ref _artists);

                var canStartSearch = false;

                foreach (var artist in _artists)
                {
                    // If the user has cancelled the search => end this
                    if (_stopCollectingOfTitles)
                    {
                        bgWorkerSearch.CancelAsync();
                        return;
                    }

                    // Reached the limit
                    if (canStartSearch)
                    {
                        break;
                    }

                    var currentArtist = (string)artist;
                    _mMusicDatabase.GetSongsByArtist(currentArtist, ref _songs);

                    foreach (var song in _songs)
                    {
                        if (canStartSearch)
                        {
                            break;
                        }

                        /* Don't include song if one of the following is true
                         * 1. The artist is unknown or empty
                         * 2. The title is empty
                         * 3. Various artister should not be considered and the artist is "various artist"
                         * 4. Song with a lyric in the tag should not be considered, but instead include the file to the database right away */

                        MusicTag tag;

                        if (song.Artist.Equals("unknown") || string.IsNullOrEmpty(song.Artist) ||
                            string.IsNullOrEmpty(song.Title) ||
                            (_mDisregardVariousArtist && (song.Artist.ToLower().Equals("various artists"))))
                        {
                        }
                        else if ((_mDisregardSongWithLyricInTag && ((tag = TagReader.ReadTag(song.FileName)) != null) &&
                                  tag.Lyrics.Length > 0))
                        {
                            _mSongsWithLyric += 1;

                            var capArtist = LyricUtil.CapatalizeString(tag.Artist);
                            var capTitle  = LyricUtil.CapatalizeString(tag.Title);

                            if (
                                DatabaseUtil.IsSongInLyricsDatabase(MyLyricsUtils.LyricsDB, capArtist, capTitle).
                                Equals(DatabaseUtil.LyricNotFound))
                            {
                                MyLyricsUtils.LyricsDB.Add(DatabaseUtil.CorrectKeyFormat(capArtist, capTitle),
                                                           new LyricsItem(capArtist, capTitle, tag.Lyrics,
                                                                          "music tag"));
                            }

                            if (
                                DatabaseUtil.IsSongInLyricsMarkedDatabase(MyLyricsUtils.LyricsMarkedDB, capArtist,
                                                                          capTitle)
                                .Equals(DatabaseUtil.LyricMarked))
                            {
                                MyLyricsUtils.LyricsMarkedDB.Remove(DatabaseUtil.CorrectKeyFormat(capArtist,
                                                                                                  capTitle));
                            }
                        }
                        else
                        {
                            var status = DatabaseUtil.IsSongInLyricsDatabase(MyLyricsUtils.LyricsDB, song.Artist,
                                                                             song.Title);

                            if (!_mDisregardKnownLyric && status.Equals(DatabaseUtil.LyricFound)
                                ||
                                (!_mDisregardMarkedLyric &&
                                 ((DatabaseUtil.IsSongInLyricsMarkedDatabase(MyLyricsUtils.LyricsMarkedDB,
                                                                             song.Artist, song.Title).Equals(
                                       DatabaseUtil.LyricMarked)) ||
                                  status.Equals(DatabaseUtil.LyricMarked)))
                                ||
                                (status.Equals(DatabaseUtil.LyricNotFound) &&
                                 !DatabaseUtil.IsSongInLyricsMarkedDatabase(MyLyricsUtils.LyricsMarkedDB,
                                                                            song.Artist, song.Title).Equals(
                                     DatabaseUtil.LyricMarked)))
                            {
                                if (++_mSongsNotKnown > _mLimit)
                                {
                                    bgWorkerSearch.ReportProgress(0);
                                    canStartSearch = true;
                                    continue;
                                }

                                var lyricId = new[] { song.Artist, song.Title };
                                _lyricConfigInfosQueue.Enqueue(lyricId);

                                _mSongsToSearch = _lyricConfigInfosQueue.Count;
                            }
                            else if (status.Equals(DatabaseUtil.LyricFound))
                            {
                                _mSongsWithLyric += 1;
                            }
                            else //if (status.Equals(MyLyricsUtil.LYRIC_MARKED))
                            {
                                _mSongsWithMark += 1;
                            }
                        }
                        bgWorkerSearch.ReportProgress(-1);
                    }
                }
            }
            else
            {
                foreach (var kvp in MyLyricsUtils.LyricsMarkedDB)
                {
                    if (++_mSongsNotKnown > _mLimit)
                    {
                        break;
                    }
                    var lyricId = new[] { kvp.Value.Artist, kvp.Value.Title };
                    _lyricConfigInfosQueue.Enqueue(lyricId);
                    _mSongsToSearch = _lyricConfigInfosQueue.Count;

                    bgWorkerSearch.ReportProgress(-1);
                }
            }
            bgWorkerSearch.ReportProgress(0);

            #endregion

            #region 2. Search music tags for lyrics

            // only if user wants to read from music tag and the music tags already aren't disregarded in the search
            if (_mAutomaticReadFromToMusicTag && !_mDisregardSongWithLyricInTag)
            {
                var mSongsToSearchOnline = new Queue();

                foreach (string[] song in _lyricConfigInfosQueue)
                {
                    if (!LyricFoundInMusicTag(song[0], song[1]))
                    {
                        mSongsToSearchOnline.Enqueue(new[] { song[0], song[1] });
                    }

                    if (_stopCollectingOfTitles)
                    {
                        bgWorkerSearch.CancelAsync();
                        return;
                    }
                }

                _lyricConfigInfosQueue = mSongsToSearchOnline;
            }

            #endregion

            #region 3. Searching for lyrics

            // create worker thread instance
            if (_lyricConfigInfosQueue.Count > 0)
            {
                _mFind    = SettingManager.GetParamAsString(SettingManager.Find, "");
                _mReplace = SettingManager.GetParamAsString(SettingManager.Replace, "");

                _mEventStopThread = new ManualResetEvent(false);
                _lyricsController = new LyricsController(this, _mEventStopThread, _sitesToSearchArray, false, false, _mFind, _mReplace);

                _lyricsController.NoOfLyricsToSearch = _lyricConfigInfosQueue.Count;
                ThreadStart runLyricController = delegate { _lyricsController.Run(); };
                _mLyricControllerThread = new Thread(runLyricController);
                _mLyricControllerThread.Start();

                _lyricsController.StopSearches = false;


                while (_lyricConfigInfosQueue.Count != 0)
                {
                    // If the user has cancelled the search => end this
                    if (_stopCollectingOfTitles && _lyricsController != null)
                    {
                        bgWorkerSearch.CancelAsync();
                        return;
                    }
                    if (_lyricsController == null)
                    {
                        return;
                    }

                    if (_lyricsController.NoOfCurrentSearches < NumberOfCurrentSearchesAllowed && _lyricsController.StopSearches == false)
                    {
                        var lyricID = (string[])_lyricConfigInfosQueue.Dequeue();
                        //TODO: if there is a lyric in the music tag of the file, then include this in the db and don't search online

                        var artist = lyricID[0];
                        var title  = lyricID[1];

                        BatchLogger.Info("New!: Looking for {0} - {1}.", artist, title);

                        _lyricsController.AddNewLyricSearch(artist, title,
                                                            MediaPortalUtil.GetStrippedPrefixArtist(artist, _mStrippedPrefixStrings));
                    }

                    Thread.Sleep(100);
                }
            }
            else
            {
                ThreadFinished = new[] { "", "", "No titles left for online search", "" };
            }

            #endregion
        }