Ejemplo n.º 1
0
        /// <summary>
        /// AddSong with tree parameters adds a lyric to the treeView and the lyric database
        /// </summary>
        /// <param name="artist">artist</param>
        /// <param name="title">title</param>
        /// <param name="lyrics">lyircs</param>
        /// <param name="site">site</param>
        private bool AddSong(string artist, string title, string lyrics, string site)
        {
            var item = new LyricsItem(artist, title, lyrics, site);

            if (DatabaseUtil.IsSongInLyricsDatabase(CurrentLyricsDatabase, artist, title).Equals(DatabaseUtil.LyricNotFound))
            {
                CurrentLyricsDatabase.Add(DatabaseUtil.CorrectKeyFormat(artist, title), item);
                try
                {
                    AddSong(item);
                }
                catch
                {
                    ;
                }
                treeView.Update();
                DatabaseUtil.SerializeDB(CurrentLyricsDatabase);

                if (SettingManager.GetParamAsBool(SettingManager.AutomaticWriteToMusicTag, true))
                {
                    TagReaderUtil.WriteLyrics(artist, title, lyrics);
                }

                return(true);
            }
            return(false);
        }
Ejemplo n.º 2
0
        public void UpdateInfo()
        {
            _mCurrentArtist = "";
            _mCurrentTitle  = "";
            tbLyrics.Text   = "";
            lbTitle.Text    = "";
            lbLRCTest.Text  = "";

            tbLyrics.Enabled = false;

            // Selected a title
            if (treeView.SelectedNode != null && treeView.SelectedNode.Parent != null)
            {
                var artist = treeView.SelectedNode.Parent.Text;
                var title  = treeView.SelectedNode.Text;

                if (artist.Length != 0 && title.Length != 0)
                {
                    _mCurrentArtist = LyricUtil.CapatalizeString(artist);
                    _mCurrentTitle  = LyricUtil.CapatalizeString(title);

                    if (
                        DatabaseUtil.IsSongInLyricsDatabase(CurrentLyricsDatabase, _mCurrentArtist, _mCurrentTitle).Equals(DatabaseUtil.LyricFound))
                    {
                        var item       = CurrentLyricsDatabase[DatabaseUtil.CorrectKeyFormat(_mCurrentArtist, _mCurrentTitle)];
                        var lyricsText = item.Lyrics;

                        lyricsText = LyricUtil.ReturnEnvironmentNewLine(lyricsText);

                        _mOriginalLyric  = lyricsText;
                        tbLyrics.Text    = _mOriginalLyric;
                        tbLyrics.Enabled = true;

                        lbTitle.Text = "\"" + _mCurrentArtist + " - " + _mCurrentTitle + "\"" + (!item.Source.Equals("") ? " found at " + item.Source : "");

                        btSearchSingle.Enabled = true;
                    }
                }
            }
            // Selected an artist
            else if (treeView.SelectedNode != null)
            {
                var artist = treeView.SelectedNode.Text;
                _mCurrentArtist        = LyricUtil.CapatalizeString(artist);
                btSearchSingle.Enabled = false;
            }
            else
            {
                btSearchSingle.Enabled = false;
            }
        }
Ejemplo n.º 3
0
        private void bw_DoWork(object sender, DoWorkEventArgs e)
        {
            var mDB     = MusicDatabase.Instance;
            var counter = 0;

            for (var i = 0; i < _artists.Count; i++)
            {
                if (bw.CancellationPending)
                {
                    return;
                }

                var artist = (string)_artists[i];
                bw.ReportProgress(counter, artist);

                mDB.GetSongsByArtist(artist, ref _songs);

                foreach (var song in _songs)
                {
                    var tag = TagReader.ReadTag(song.FileName);
                    if (tag != null && tag.Lyrics != string.Empty)
                    {
                        var capArtist = LyricUtil.CapatalizeString(tag.Artist);
                        var capTitle  = LyricUtil.CapatalizeString(tag.Title);

                        if (
                            DatabaseUtil.IsSongInLyricsDatabase(MyLyricsUtils.LyricsDB, capArtist, capTitle).Equals(
                                DatabaseUtil.LyricFound))
                        {
                            // If lyric exists in LyricsDb then only import (and overwrite) if it isn't an LRC-file
                            var lyricsText = MyLyricsUtils.LyricsDB[DatabaseUtil.CorrectKeyFormat(capArtist, capTitle)].Lyrics;
                            var lrc        = new SimpleLRC(capArtist, capTitle, lyricsText);
                            if (!lrc.IsValid)
                            {
                                _tags.Add(tag);
                                ++counter;
                            }
                        }
                        else
                        {
                            _tags.Add(tag);
                            ++counter;
                        }
                    }
                }
            }
        }
Ejemplo n.º 4
0
        private void MoveLyricToOtherDatabase()
        {
            var artist = "";
            var title  = "";

            if (treeView.SelectedNode != null)
            {
                var temp = treeView.SelectedNode.Text;

                if (treeView.SelectedNode.Parent != null)
                {
                    artist = treeView.SelectedNode.Parent.Text;
                    title  = temp;
                }
                else
                {
                    artist = temp;
                }
            }

            if (artist.Length == 0 && title.Length == 0)
            {
                MessageBox.Show("No artist or track selected");
            }
            else if (title.Length == 0)
            {
                var artistNode = treeView.SelectedNode;

                LyricsDatabase otherDatabase;
                if (CurrentLyricsDatabase.Equals(MyLyricsUtils.LyricsDB))
                {
                    otherDatabase = MyLyricsUtils.LyricsMarkedDB;
                }
                else
                {
                    otherDatabase = MyLyricsUtils.LyricsDB;
                }

                foreach (TreeNode node in artistNode.Nodes)
                {
                    var key  = DatabaseUtil.CorrectKeyFormat(artist, node.Text);
                    var item = CurrentLyricsDatabase[key];
                    CurrentLyricsDatabase.Remove(key);

                    if (!DatabaseUtil.IsSongInLyricsDatabase(otherDatabase, artist, item.Title).Equals(DatabaseUtil.LyricNotFound))
                    {
                        otherDatabase.Add(key, item);
                    }
                    else
                    {
                        otherDatabase[key] = item;
                    }
                }
                UpdateLyricsTree(false);
                DatabaseUtil.SerializeDBs();
            }
            else
            {
                var key  = DatabaseUtil.CorrectKeyFormat(artist, title);
                var item = CurrentLyricsDatabase[key];

                // remove song from treeview and current database
                RemoveSong(artist, title, true);

                // add song to other database and serialize it
                if (CurrentLyricsDatabase.Equals(MyLyricsUtils.LyricsDB))
                {
                    MyLyricsUtils.LyricsMarkedDB.Add(key, item);
                    DatabaseUtil.SerializeDB(MyLyricsUtils.LyricsMarkedDB);
                }
                else
                {
                    MyLyricsUtils.LyricsDB.Add(key, item);
                    DatabaseUtil.SerializeDB(MyLyricsUtils.LyricsDB);
                }
                UpdateLyricDatabaseStats();
            }

            treeView.Focus();
        }
Ejemplo n.º 5
0
        private void bw_DoWork(object sender, DoWorkEventArgs e)
        {
            var mDB     = MusicDatabase.Instance;
            var counter = 0;

            for (var i = 0; i < _artists.Count; i++)
            {
                if (bw.CancellationPending)
                {
                    return;
                }

                var artist = (string)_artists[i];
                Thread.Sleep(100); // Give the GUI thread some time to update
                bw.ReportProgress(counter, artist);
                try
                {
                    mDB.GetSongsByArtist(artist, ref _songs);

                    foreach (var song in _songs)
                    {
                        var capArtist = LyricUtil.CapatalizeString(song.Artist);
                        var capTitle  = LyricUtil.CapatalizeString(song.Title);

                        if (DatabaseUtil.IsSongInLyricsDatabase(MyLyricsUtils.LyricsDB, capArtist, capTitle).Equals(DatabaseUtil.LyricFound))
                        {
                            var lyric         = MyLyricsUtils.LyricsDB[DatabaseUtil.CorrectKeyFormat(capArtist, capTitle)].Lyrics;
                            var lrcInLyricsDb = new SimpleLRC(capArtist, capTitle, lyric);

                            // If the lyricsDB lyric is LRC always export
                            if (lrcInLyricsDb.IsValid)
                            {
                                if (TagReaderUtil.WriteLyrics(song.FileName, lyric))
                                {
                                    ++counter;
                                }
                                continue;
                            }

                            var tag = TagReader.ReadTag(song.FileName);

                            // If there is a musictag lyric
                            if (tag != null && !tag.Lyrics.Equals(string.Empty))
                            {
                                // if there is no LRC lyric in the tag, then simple export
                                var lrcInTag = new SimpleLRC(capArtist, capTitle, tag.Lyrics);
                                if (!lrcInTag.IsValid)
                                {
                                    if (TagReaderUtil.WriteLyrics(song.FileName, lyric))
                                    {
                                        ++counter;
                                    }
                                }
                            }
                            // Al if no lyric in musictag simple export
                            else
                            {
                                if (TagReaderUtil.WriteLyrics(song.FileName, lyric))
                                {
                                    ++counter;
                                }
                            }
                        }
                    }
                }
                catch (Exception)
                {
                    ;
                }
            }
        }
Ejemplo n.º 6
0
        private void listViewArtists_SelectedIndexChanged(object sender, EventArgs e)
        {
            var mdb   = MusicDatabase.Instance;
            var songs = new List <Song>();

            _mSelectedArtist = ((ListView)(sender)).SelectedItems.Count > 0 ? ((ListView)(sender)).SelectedItems[0].Text : "";
            mdb.GetSongsByArtist(_mSelectedArtist, ref songs);

            lbSelectedArtist.Text = String.Format("Artist: {0}", _mSelectedArtist);
            lvSongs.Items.Clear();

            foreach (var song in songs)
            {
                var capatalizedArtist = LyricUtil.CapatalizeString(song.Artist);
                var capatalizedTitle  = LyricUtil.CapatalizeString(song.Title);

                var lvi = new ListViewItem(capatalizedTitle);
                lvi.Tag = capatalizedTitle;

                var status = DatabaseUtil.IsSongInLyricsDatabase(MyLyricsUtils.LyricsDB, capatalizedArtist, capatalizedTitle);
                switch (status)
                {
                case DatabaseUtil.LyricFound:
                    lvi.ImageIndex = 0;
                    lvi.SubItems.Add("LyricsDB");
                    lvi.SubItems.Add("-");
                    break;

                case DatabaseUtil.LyricMarked:
                    lvi.SubItems.Add("MarkedDB");
                    lvi.SubItems.Add("-");
                    break;

                case DatabaseUtil.LyricNotFound:
                    if (
                        DatabaseUtil.IsSongInLyricsMarkedDatabase(MyLyricsUtils.LyricsMarkedDB, capatalizedArtist, capatalizedTitle).Equals(DatabaseUtil.LyricMarked))
                    {
                        lvi.SubItems.Add("MarkedDB");
                        lvi.SubItems.Add("-");
                    }
                    else
                    {
                        lvi.SubItems.Add("-");
                        lvi.SubItems.Add("-");
                    }
                    break;

                default:
                    lvi.SubItems.Add("no");
                    lvi.SubItems.Add("-");
                    break;
                }

                var alreadyInCollection = false;

                foreach (ListViewItem lviColl in lvSongs.Items)
                {
                    if (lvi.Tag.Equals(lviColl.Tag))
                    {
                        alreadyInCollection = true;
                        break;
                    }
                }

                if (!alreadyInCollection)
                {
                    lvSongs.Items.Add(lvi);
                }
            }
            RefreshArtistStats();
        }
Ejemplo n.º 7
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
        }