From: <sa...@us...> - 2007-05-23 16:10:33
|
Revision: 420 http://mp-plugins.svn.sourceforge.net/mp-plugins/?rev=420&view=rev Author: saamand Date: 2007-05-23 09:10:27 -0700 (Wed, 23 May 2007) Log Message: ----------- Added Paths: ----------- trunk/plugins/MyLyrics/My Lyrics/MyLyricsExternCode.cs Added: trunk/plugins/MyLyrics/My Lyrics/MyLyricsExternCode.cs =================================================================== --- trunk/plugins/MyLyrics/My Lyrics/MyLyricsExternCode.cs (rev 0) +++ trunk/plugins/MyLyrics/My Lyrics/MyLyricsExternCode.cs 2007-05-23 16:10:27 UTC (rev 420) @@ -0,0 +1,335 @@ +using System; +using System.Windows.Forms; +using System.Threading; +using System.Diagnostics; +using System.Text.RegularExpressions; +using System.IO; +using System.Runtime.Serialization; +using System.Runtime.Serialization.Formatters.Binary; +using System.Text; +using System.Collections.Generic; +using System.Timers; + +using LyricsEngine; + +using MediaPortal.GUI.Library; +using MediaPortal.Dialogs; +using MediaPortal.Player; +using MediaPortal.TagReader; +using MediaPortal.Music.Database; +using MediaPortal.Playlists; +using MediaPortal.Util; +using MediaPortal.GUI.Music; + +using System.Collections; + +namespace MyLyrics +{ + public partial class GUIMyLyrics : GUIWindow, ILyricForm, ISetupForm + { + public void getAlbumArt() + { + ImagePathContainer.Clear(); + CurrentTrackFileName = g_Player.CurrentFile; + GetTrackTags(); + + CurrentThumbFileName = GUIMusicFiles.GetCoverArt(false, CurrentTrackFileName, CurrentTrackTag); + if (CurrentThumbFileName.Length > 0) + { + // let us test if there is a larger cover art image + string strLarge = MediaPortal.Util.Utils.ConvertToLargeCoverArt(CurrentThumbFileName); + if (System.IO.File.Exists(strLarge)) + CurrentThumbFileName = strLarge; + AddImageToImagePathContainer(CurrentThumbFileName); + } + + CurrentThumbFileName = GUIMusicFiles.GetArtistCoverArtName(CurrentTrackTag.Artist); + if (CurrentThumbFileName.Length > 0) + { + // let us test if there is a larger cover art image + string strLarge = MediaPortal.Util.Utils.ConvertToLargeCoverArt(CurrentThumbFileName); + if (System.IO.File.Exists(strLarge)) + CurrentThumbFileName = strLarge; + AddImageToImagePathContainer(CurrentThumbFileName); + } + + UpdateImagePathContainer(); + } + + private void UpdateTrackPosition() + { + double trackDuration = g_Player.Duration; + double curTrackPostion = g_Player.CurrentPosition; + + int progPrecent = (int)(curTrackPostion / trackDuration * 100d); + + this.GUIelement_ProgTrack.Percentage = progPrecent; + GUIelement_ProgTrack.Visible = GUIelement_ProgTrack.Percentage > 0; + } + + private void OnImageTimerTickEvent(object trash_, ElapsedEventArgs args_) + { + FlipPictures(); + } + + private void FlipPictures() + { + //// Check if we should let the visualization window handle image flipping + //if (_usingBassEngine && _showVisualization) + // return; + + if (GUIelement_ImgCoverArt != null) + { + GUIelement_ImgCoverArt.FreeResources(); + if (ImagePathContainer.Count > 0) + { + if (ImagePathContainer.Count > 1) + { + int currentImage = 0; + // get the next image + foreach (string image in ImagePathContainer) + { + currentImage++; + if (GUIelement_ImgCoverArt.FileName == image) + break; + } + if (currentImage < ImagePathContainer.Count) + GUIelement_ImgCoverArt.SetFileName(ImagePathContainer[currentImage]); + else + // start loop again + GUIelement_ImgCoverArt.SetFileName(ImagePathContainer[0]); + } + else + GUIelement_ImgCoverArt.SetFileName(ImagePathContainer[0]); + } + GUIelement_ImgCoverArt.AllocResources(); + } + } + + + private void GetTrackTags() + { + bool isCurSongCdTrack = IsCdTrack(CurrentTrackFileName); + bool isNextSongCdTrack = IsCdTrack(NextTrackFileName); + MusicDatabase dbs = new MusicDatabase(); + + if (CurrentTrackTag != null) + PreviousTrackTag = CurrentTrackTag; + + if (!isCurSongCdTrack) + CurrentTrackTag = GetTrackTag(dbs, CurrentTrackFileName, UseID3); + + if (!isNextSongCdTrack) + NextTrackTag = GetTrackTag(dbs, NextTrackFileName, UseID3); + + if (isCurSongCdTrack || isNextSongCdTrack) + { + PlayList curPlaylist = PlaylistPlayer.GetPlaylist(PlayListType.PLAYLIST_MUSIC); + + int iCurItemIndex = PlaylistPlayer.CurrentSong; + PlayListItem curPlaylistItem = curPlaylist[iCurItemIndex]; + + if (curPlaylistItem == null) + { + CurrentTrackTag = null; + NextTrackTag = null; + return; + } + + int playListItemCount = curPlaylist.Count; + int nextItemIndex = 0; + + if (iCurItemIndex < playListItemCount - 1) + nextItemIndex = iCurItemIndex + 1; + + PlayListItem nextPlaylistItem = curPlaylist[nextItemIndex]; + + if (isCurSongCdTrack) + CurrentTrackTag = (MusicTag)curPlaylistItem.MusicTag; + + if (isNextSongCdTrack && nextPlaylistItem != null) + NextTrackTag = (MusicTag)nextPlaylistItem.MusicTag; + + // There's no MusicTag info in the Playlist so check is we have a valid + // GUIMusicFiles.MusicCD object + if ((CurrentTrackTag == null || NextTrackTag == null) && GUIMusicFiles.MusicCD != null) + { + int curCDTrackNum = GetCDATrackNumber(CurrentTrackFileName); + int nextCDTrackNum = GetCDATrackNumber(NextTrackFileName); + + if (curCDTrackNum < GUIMusicFiles.MusicCD.Tracks.Length) + { + MediaPortal.Freedb.CDTrackDetail curTrack = GUIMusicFiles.MusicCD.getTrack(curCDTrackNum); + CurrentTrackTag = GetTrackTag(curTrack); + } + if (nextCDTrackNum < GUIMusicFiles.MusicCD.Tracks.Length) + { + MediaPortal.Freedb.CDTrackDetail nextTrack = GUIMusicFiles.MusicCD.getTrack(nextCDTrackNum); + NextTrackTag = GetTrackTag(nextTrack); + } + } + } + } + + private bool IsCdTrack(string fileName) + { + return System.IO.Path.GetExtension(CurrentTrackFileName).ToLower() == ".cda"; + } + + int GetCDATrackNumber(string strFile) + { + string strTrack = string.Empty; + int pos = strFile.IndexOf(".cda"); + if (pos >= 0) + { + pos--; + while (Char.IsDigit(strFile[pos]) && pos > 0) + { + strTrack = strFile[pos] + strTrack; + pos--; + } + } + + try + { + int iTrack = Convert.ToInt32(strTrack); + return iTrack; + } + catch (Exception) + { + } + + return 1; + } + + private MusicTag GetTrackTag(MediaPortal.Freedb.CDTrackDetail cdTrack) + { + if (GUIMusicFiles.MusicCD == null) + return null; + MusicTag tag = new MusicTag(); + tag.Artist = GUIMusicFiles.MusicCD.Artist; + tag.Album = GUIMusicFiles.MusicCD.Title; + tag.Genre = GUIMusicFiles.MusicCD.Genre; + tag.Year = GUIMusicFiles.MusicCD.Year; + tag.Duration = cdTrack.Duration; + tag.Title = cdTrack.Title; + return tag; + } + + private MusicTag GetTrackTag(MusicDatabase dbs, string strFile, bool useID3) + { + MusicTag tag = null; + Song song = new Song(); + bool bFound = dbs.GetSongByFileName(strFile, ref song); + if (!bFound) + { + if (useID3) + tag = TagReader.ReadTag(strFile); + } + else + { + tag = new MusicTag(); + tag = BuildMusicTagFromSong(song); + } + return tag; + } + + private MusicTag BuildMusicTagFromSong(Song Song_) + { + MusicTag tmpTag = new MusicTag(); + + tmpTag.Title = Song_.Title; + tmpTag.Album = Song_.Album; + tmpTag.Artist = Song_.Artist; + tmpTag.Duration = Song_.Duration; + tmpTag.Genre = Song_.Genre; + tmpTag.Track = Song_.Track; + tmpTag.Year = Song_.Year; + tmpTag.Rating = Song_.Rating; + + return tmpTag; + } + + + private void UpdateImagePathContainer() + { + if (ImagePathContainer.Count <= 0) + { + try + { + GUIelement_ImgCoverArt.SetFileName(GUIGraphicsContext.Skin + @"\media\missing_coverart.png"); + } + catch (Exception ex) + { + Log.Debug("GUIMusicPlayingNow: could not set default image - {0}", ex.Message); + } + } + + if (g_Player.Duration > 0 && ImagePathContainer.Count > 1) + // ImageChangeTimer.Interval = (g_Player.Duration * 1000) / (ImagePathContainer.Count * 8); // change each cover 8x + ImageChangeTimer.Interval = 15 * 1000; // change covers every 15 seconds + else + ImageChangeTimer.Interval = 3600 * 1000; + + ImageChangeTimer.Stop(); + ImageChangeTimer.Start(); + } + + private bool AddImageToImagePathContainer(string newImage) + { + lock (_imageMutex) + { + string ImagePath = Convert.ToString(newImage); + if (ImagePath.IndexOf(@"missing_coverart") > 0)// && (ImagePathContainer.Count > 0)) + { + Log.Debug("GUIMusicPlayingNow: Found placeholder - not inserting image {0}", ImagePath); + return false; + } + + bool success = false; + if (ImagePathContainer != null) + { + if (ImagePathContainer.Contains(ImagePath)) + return false; + + //// check for placeholder + //int indexDel = 0; + //bool found = false; + //foreach (string pic in ImagePathContainer) + //{ + // indexDel++; + // if (pic.IndexOf("missing_coverart.png") > 0) + // { + // found = true; + // break; + // } + //} + //if (found) + // ImagePathContainer.RemoveAt(indexDel - 1); + + if (System.IO.File.Exists(ImagePath)) + { + try + { + Log.Debug("GUIMusicPlayingNow: adding image to container - {0}", ImagePath); + ImagePathContainer.Add(ImagePath); + success = true; + } + catch (Exception ex) + { + Log.Error("GUIMusicPlayingNow: error adding image ({0}) - {1}", ImagePath, ex.Message); + } + + // display the first pic automatically + if (ImagePathContainer.Count == 1) + FlipPictures(); + } + } + + return success; + } + } + + + } +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |