private void buttonNeighboursFilter_Click(object sender, EventArgs e)
        {
            //      buttonNeighboursFilter.Enabled = false;
            listViewNeighbours.Clear();
            tabControlLiveFeeds.Enabled = false;
            ArrayList artistsInDB = new ArrayList();

            songList = new List <Song>();
            songList = lastFmLookup.getNeighboursArtists(false);
            listViewNeighbours.Columns.Add("Artist", 250);
            for (int i = 0; i < songList.Count; i++)
            {
                MusicDatabase mdb = MusicDatabase.Instance;
                if (mdb.GetArtists(4, songList[i].Artist, ref artistsInDB))
                {
                    bool foundDoubleEntry = false;
                    for (int j = 0; j < listViewNeighbours.Items.Count; j++)
                    {
                        if (listViewNeighbours.Items[j].Text == songList[i].Artist)
                        {
                            foundDoubleEntry = true;
                            break;
                        }
                    }
                    if (!foundDoubleEntry)
                    {
                        listViewNeighbours.Items.Add(BuildListViewArtist(songList[i], false, false));
                    }
                }
                //else
                //  MessageBox.Show("Artist " + songList[i].Artist + " already in DB!");
            }
            tabControlLiveFeeds.Enabled = true;
        }
Example #2
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
        }