|
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.
|