public string Get(int iSong) { if (_currentPlayList == PlayListType.PLAYLIST_NONE) { return(string.Empty); } PlayList playlist = GetPlaylist(_currentPlayList); if (playlist.Count <= 0) { return(string.Empty); } if (iSong >= playlist.Count) { // Is last element of video stacking playlist? if (_currentPlayList == PlayListType.PLAYLIST_VIDEO_TEMP) { return(string.Empty); } if (!_repeatPlayList) { return(string.Empty); ; } iSong = 0; } PlayListItem item = playlist[iSong]; return(item.FileName); }
public bool Load(PlayList playlist, string fileName) { playlist.Clear(); XmlNodeList nodeEntries; if (!LoadXml(fileName, out nodeEntries)) return false; try { string basePath = Path.GetDirectoryName(Path.GetFullPath(fileName)); foreach (XmlNode node in nodeEntries) { string file = ReadFileName(node); if (file == null) return false; string infoLine = ReadInfoLine(node, file); int duration = ReadLength(node); SetupTv.Utils.GetQualifiedFilename(basePath, ref file); PlayListItem newItem = new PlayListItem(infoLine, file, duration); playlist.Add(newItem); } return true; } catch (Exception) { return false; } }
private bool AddItem(string songName, int duration, string fileName) { if (fileName == null || fileName.Length == 0) { return(false); } PlayListItem newItem = new PlayListItem(songName, fileName, duration); if (fileName.ToLower().StartsWith("http:") || fileName.ToLower().StartsWith("https:") || fileName.ToLower().StartsWith("mms:") || fileName.ToLower().StartsWith("rtp:")) { newItem.Type = PlayListItem.PlayListItemType.AudioStream; } else { Util.Utils.GetQualifiedFilename(basePath, ref fileName); newItem.FileName = fileName; newItem.Type = PlayListItem.PlayListItemType.Audio; } if (songName.Length == 0) { newItem.Description = Path.GetFileName(fileName); } playlist.Add(newItem); return(true); }
/// <summary> /// Create playlist item from a file /// </summary> /// <param name="file">Path to file</param> /// <returns>Playlist item</returns> internal static MediaPortal.Playlists.PlayListItem CreatePlaylistItemFromMusicFile(string file) { FileInfo info = null; MediaPortal.Playlists.PlayListItem item = new MediaPortal.Playlists.PlayListItem(); try { info = new FileInfo(file); } catch (Exception e) { WifiRemote.LogMessage("Error loading music item from file: " + e.Message, WifiRemote.LogType.Error); } if (info != null) { item.Description = info.Name; item.FileName = info.FullName; item.Type = PlayListItem.PlayListItemType.Audio; MusicDatabase mpMusicDb = MusicDatabase.Instance; Song song = new Song(); bool inDb = mpMusicDb.GetSongByFileName(item.FileName, ref song); if (inDb) { item.Duration = song.Duration; } } return(item); }
public bool Save(PlayList playlist, string fileName) { try { using (StreamWriter writer = new StreamWriter(fileName, false, Encoding.UTF8)) { writer.WriteLine(START_PLAYLIST_MARKER); for (int i = 0; i < playlist.Count; i++) { PlayListItem item = playlist[i]; writer.WriteLine("File{0}={1}", i + 1, item.FileName); writer.WriteLine("Title{0}={1}", i + 1, item.Description); writer.WriteLine("Length{0}={1}", i + 1, item.Duration); } writer.WriteLine("NumberOfEntries={0}", playlist.Count); writer.WriteLine("Version=2"); } return(true); } catch (Exception e) { Log.Info("failed to save a playlist {0}. err: {1} stack: {2}", fileName, e.Message, e.StackTrace); return(false); } }
public void NewlyAddedSongsAreNotMarkedPlayed() { PlayList pl = new PlayList(); PlayListItem item = new PlayListItem("my song", "myfile.mp3"); pl.Add(item); Assert.IsFalse(pl.AllPlayed()); }
public void Add(PlayListItem item) { _playlist.Add(item); GUIListItem guiItem = new GUIListItem(); guiItem.Label = item.Description; _playlistDic.Add(guiItem, item); playlistControl.Add(guiItem); }
public void InsertItemButNotStartPlayingGivesNull() { PlayListPlayer player = new PlayListPlayer(); player.CurrentPlaylistType = PlayListType.PLAYLIST_MUSIC; PlayList playlist = player.GetPlaylist(PlayListType.PLAYLIST_MUSIC); PlayListItem item1 = new PlayListItem(); playlist.Add(item1); Assert.IsNull(player.GetCurrentItem()); }
public void GetNextReturnsFileName() { PlayListPlayer player = new PlayListPlayer(); player.CurrentPlaylistType = PlayListType.PLAYLIST_MUSIC; PlayList playlist = player.GetPlaylist(PlayListType.PLAYLIST_MUSIC); PlayListItem item1 = new PlayListItem("apa", "c:\\apa.mp3"); playlist.Add(item1); Assert.AreEqual("c:\\apa.mp3", player.GetNext()); }
public void RemoveReallyRemovesASong() { PlayList pl = new PlayList(); PlayListItem item = new PlayListItem("my song", "myfile.mp3"); pl.Add(item); pl.Remove("myfile.mp3"); Assert.AreEqual(0, pl.Count); }
public void PlayMovesCurrentToItem() { PlayListPlayer player = new PlayListPlayer(); player.g_Player = this; //fake g_Player player.CurrentPlaylistType = PlayListType.PLAYLIST_MUSIC; PlayList playlist = player.GetPlaylist(PlayListType.PLAYLIST_MUSIC); PlayListItem item1 = new PlayListItem(); playlist.Add(item1); player.PlayNext(); Assert.AreEqual(item1, player.GetCurrentItem()); Assert.IsTrue(hasPlayBeenCalled); }
public void AllPlayedReturnsTrueWhenAllArePlayed() { PlayList pl = new PlayList(); PlayListItem item = new PlayListItem("my song", "myfile.mp3"); item.Played = true; pl.Add(item); item = new PlayListItem("my 2:d song", "myfile2.mp3"); item.Played = true; pl.Add(item); Assert.IsTrue(pl.AllPlayed()); }
public string GetNext() { PlayListItem resultingItem = GetNextItem(); if (resultingItem != null) { return(resultingItem.FileName); } else { return(string.Empty); } }
public bool Load(PlayList playlist, string fileName) { playlist.Clear(); try { string basePath = Path.GetDirectoryName(Path.GetFullPath(fileName)); XmlDocument doc = new XmlDocument(); doc.Load(fileName); if (doc.DocumentElement == null) { return false; } XmlNode nodeRoot = doc.DocumentElement.SelectSingleNode("/asx"); if (nodeRoot == null) { return false; } XmlNodeList nodeEntries = nodeRoot.SelectNodes("entry"); foreach (XmlNode node in nodeEntries) { XmlNode srcNode = node.SelectSingleNode("ref"); if (srcNode != null) { XmlNode url = srcNode.Attributes.GetNamedItem("href"); if (url != null) { if (url.InnerText != null) { if (url.InnerText.Length > 0) { fileName = url.InnerText; if (!(fileName.ToLowerInvariant().StartsWith("http") || fileName.ToLowerInvariant().StartsWith("mms") || fileName.ToLowerInvariant().StartsWith("rtp"))) continue; PlayListItem newItem = new PlayListItem(fileName, fileName, 0); newItem.Type = PlayListItem.PlayListItemType.Audio; playlist.Add(newItem); } } } } } return true; } catch (Exception ex) { Log.Info("exception loading playlist {0} err:{1} stack:{2}", fileName, ex.Message, ex.StackTrace); } return false; }
public bool Load(PlayList playlist, string playlistFileName) { playlist.Clear(); try { var doc = new XmlDocument(); doc.Load(playlistFileName); if (doc.DocumentElement == null) { return(false); } XmlNode nodeRoot = doc.DocumentElement.SelectSingleNode("/smil/body/seq"); if (nodeRoot == null) { return(false); } XmlNodeList nodeEntries = nodeRoot.SelectNodes("media"); if (nodeEntries != null) { foreach (XmlNode node in nodeEntries) { XmlNode srcNode = node.Attributes.GetNamedItem("src"); if (srcNode != null) { if (srcNode.InnerText != null) { if (srcNode.InnerText.Length > 0) { var playlistUrl = srcNode.InnerText; var newItem = new PlayListItem(playlistUrl, playlistUrl, 0) { Type = PlayListItem.PlayListItemType.Audio }; string description = Path.GetFileName(playlistUrl); newItem.Description = description; playlist.Add(newItem); } } } } } return(true); } catch (Exception e) { Log.Error(e.StackTrace); } return(false); }
public bool Load(PlayList playlist, string fileName) { playlist.Clear(); try { string basePath = Path.GetDirectoryName(Path.GetFullPath(fileName)); XmlDocument doc = new XmlDocument(); doc.Load(fileName); if (doc.DocumentElement == null) { return(false); } XmlNode nodeRoot = doc.DocumentElement.SelectSingleNode("/smil/body/seq"); if (nodeRoot == null) { return(false); } XmlNodeList nodeEntries = nodeRoot.SelectNodes("media"); foreach (XmlNode node in nodeEntries) { XmlNode srcNode = node.Attributes.GetNamedItem("src"); if (srcNode != null) { if (srcNode.InnerText != null) { if (srcNode.InnerText.Length > 0) { fileName = srcNode.InnerText; Util.Utils.GetQualifiedFilename(basePath, ref fileName); PlayListItem newItem = new PlayListItem(fileName, fileName, 0); newItem.Type = PlayListItem.PlayListItemType.Audio; string description; description = Path.GetFileName(fileName); newItem.Description = description; playlist.Add(newItem); } } } } return(true); } catch (Exception ex) { Log.Info("exception loading playlist {0} err:{1} stack:{2}", fileName, ex.Message, ex.StackTrace); } return(false); }
public bool Load(PlayList playlist, string fileName) { playlist.Clear(); try { string basePath = Path.GetDirectoryName(Path.GetFullPath(fileName)); XmlDocument doc = new XmlDocument(); doc.Load(fileName); if (doc.DocumentElement == null) { return false; } XmlNode nodeRoot = doc.DocumentElement.SelectSingleNode("/smil/body/seq"); if (nodeRoot == null) { return false; } XmlNodeList nodeEntries = nodeRoot.SelectNodes("media"); foreach (XmlNode node in nodeEntries) { XmlNode srcNode = node.Attributes.GetNamedItem("src"); if (srcNode != null) { if (srcNode.InnerText != null) { if (srcNode.InnerText.Length > 0) { fileName = srcNode.InnerText; Util.Utils.GetQualifiedFilename(basePath, ref fileName); PlayListItem newItem = new PlayListItem(fileName, fileName, 0); newItem.Type = PlayListItem.PlayListItemType.Audio; string description; description = Path.GetFileName(fileName); newItem.Description = description; playlist.Add(newItem); } } } } return true; } catch (Exception ex) { Log.Info("exception loading playlist {0} err:{1} stack:{2}", fileName, ex.Message, ex.StackTrace); } return false; }
public void Save(PlayList playlist, string fileName) { using (StreamWriter writer = new StreamWriter(fileName, false, Encoding.UTF8)) { writer.WriteLine(START_PLAYLIST_MARKER); for (int i = 0; i < playlist.Count; i++) { PlayListItem item = playlist[i]; writer.WriteLine("File{0}={1}", i + 1, item.FileName); writer.WriteLine("Title{0}={1}", i + 1, item.Description); writer.WriteLine("Length{0}={1}", i + 1, item.Duration); } writer.WriteLine("NumberOfEntries={0}", playlist.Count); writer.WriteLine("Version=2"); } }
/// <summary> /// Add MpExtended information to playlist item /// </summary> /// <param name="item">MediaPortal playlist item</param> /// <param name="message">Playlist message item that is sent to client</param> internal static void AddMpExtendedInfo(MediaPortal.Playlists.PlayListItem item, PlaylistEntry message) { MusicDatabase mpMusicDb = MusicDatabase.Instance; Song song = new Song(); bool inDb = mpMusicDb.GetSongByFileName(item.FileName, ref song); if (inDb) { message.Name2 = song.Album; message.AlbumArtist = song.AlbumArtist; message.Title = song.Title; message.MpExtId = song.Id.ToString(); message.MpExtMediaType = (int)MpExtended.MpExtendedMediaTypes.MusicTrack; message.MpExtProviderId = (int)MpExtended.MpExtendedProviders.MPMusic; } }
public void ResetSetsAllItemsToFalse() { PlayList pl = new PlayList(); PlayListItem item = new PlayListItem("my song", "myfile.mp3"); pl.Add(item); PlayListItem item2 = new PlayListItem("my 2:d song", "myfile2.mp3"); pl.Add(item2); pl[0].Played = true; pl[1].Played = true; pl.ResetStatus(); Assert.IsFalse(pl[0].Played); Assert.IsFalse(pl[1].Played); }
/// <summary> /// Create playlist item from a file /// </summary> /// <param name="file">Path to file</param> /// <returns>Playlist item</returns> internal static MediaPortal.Playlists.PlayListItem CreatePlaylistItemFromVideoFile(string file) { FileInfo info = new FileInfo(file); MediaPortal.Playlists.PlayListItem item = new MediaPortal.Playlists.PlayListItem(); item.Description = info.Name; item.FileName = info.FullName; item.Type = PlayListItem.PlayListItemType.Video; //item.Duration IMDBMovie movie = new IMDBMovie(); int id = VideoDatabase.GetMovieInfo(file, ref movie); if (id > 0) { item.Duration = movie.RunTime; } return item; }
public string GetNextSong() { PlayListItem item = GetNextItem(); if (item == null) { return(string.Empty); } _currentItem++; GUIMessage msg = new GUIMessage(GUIMessage.MessageType.GUI_MSG_ITEM_FOCUS, 0, 0, 0, _currentItem, 0, null); msg.Label = item.FileName; GUIGraphicsContext.SendMessage(msg); return(item.FileName); }
public bool Load(PlayList playlist, string playlistFileName) { playlist.Clear(); try { var doc = new XmlDocument(); doc.Load(playlistFileName); if (doc.DocumentElement == null) return false; XmlNode nodeRoot = doc.DocumentElement.SelectSingleNode("/smil/body/seq"); if (nodeRoot == null) return false; XmlNodeList nodeEntries = nodeRoot.SelectNodes("media"); if (nodeEntries != null) foreach (XmlNode node in nodeEntries) { XmlNode srcNode = node.Attributes.GetNamedItem("src"); if (srcNode != null) { if (srcNode.InnerText != null) { if (srcNode.InnerText.Length > 0) { var playlistUrl = srcNode.InnerText; var newItem = new PlayListItem(playlistUrl, playlistUrl, 0) { Type = PlayListItem.PlayListItemType.Audio }; string description = Path.GetFileName(playlistUrl); newItem.Description = description; playlist.Add(newItem); } } } } return true; } catch (Exception e) { Log.Error(e.StackTrace); } return false; }
/// <summary> /// Create playlist item from a file /// </summary> /// <param name="file">Path to file</param> /// <returns>Playlist item</returns> internal static MediaPortal.Playlists.PlayListItem CreatePlaylistItemFromVideoFile(string file) { FileInfo info = new FileInfo(file); MediaPortal.Playlists.PlayListItem item = new MediaPortal.Playlists.PlayListItem(); item.Description = info.Name; item.FileName = info.FullName; item.Type = PlayListItem.PlayListItemType.Video; //item.Duration IMDBMovie movie = new IMDBMovie(); int id = VideoDatabase.GetMovieInfo(file, ref movie); if (id > 0) { item.Duration = movie.RunTime; } return(item); }
public void Play(string filename) { if (_currentPlayList == PlayListType.PLAYLIST_NONE) { return; } PlayList playlist = GetPlaylist(_currentPlayList); for (int i = 0; i < playlist.Count; ++i) { PlayListItem item = playlist[i]; if (item.FileName.Equals(filename)) { Play(i); return; } } }
public bool Load(PlayList playlist, string fileName) { playlist.Clear(); XmlNodeList nodeEntries; if (!LoadXml(fileName, out nodeEntries)) { return(false); } try { string basePath = Path.GetDirectoryName(Path.GetFullPath(fileName)); foreach (XmlNode node in nodeEntries) { string file = ReadFileName(node); if (file == null) { return(false); } string infoLine = ReadInfoLine(node, file); int duration = ReadLength(node); file = PathUtil.GetAbsolutePath(basePath, file); PlayListItem newItem = new PlayListItem(infoLine, file, duration); playlist.Add(newItem); } return(true); } catch (Exception ex) { Log.Info("exception loading playlist {0} err:{1} stack:{2}", fileName, ex.Message, ex.StackTrace); return(false); } }
public bool Load(PlayList playlist, string fileName) { playlist.Clear(); XmlNodeList nodeEntries; if (!LoadXml(fileName, out nodeEntries)) { return false; } try { string basePath = Path.GetDirectoryName(Path.GetFullPath(fileName)); foreach (XmlNode node in nodeEntries) { string file = ReadFileName(node); if (file == null) { return false; } string infoLine = ReadInfoLine(node, file); int duration = ReadLength(node); file = PathUtil.GetAbsolutePath(basePath, file); PlayListItem newItem = new PlayListItem(infoLine, file, duration); playlist.Add(newItem); } return true; } catch (Exception ex) { Log.Info("exception loading playlist {0} err:{1} stack:{2}", fileName, ex.Message, ex.StackTrace); return false; } }
public PlayListItem GetNextItem() { if (_currentPlayList == PlayListType.PLAYLIST_NONE) { return(null); } PlayList playlist = GetPlaylist(_currentPlayList); if (playlist.Count <= 0) { return(null); } int iSong = _currentItem; iSong++; if (iSong >= playlist.Count) { // Is last element of video stacking playlist? if (_currentPlayList == PlayListType.PLAYLIST_VIDEO_TEMP) { return(null); } if (!_repeatPlayList) { return(null); } iSong = 0; } PlayListItem item = playlist[iSong]; return(item); }
public bool Load(PlayList playlist, string fileName) { playlist.Clear(); XmlNodeList nodeEntries; if (!LoadXml(fileName, out nodeEntries)) { return(false); } try { string basePath = Path.GetDirectoryName(Path.GetFullPath(fileName)); foreach (XmlNode node in nodeEntries) { string file = ReadFileName(node); if (file == null) { return(false); } string infoLine = ReadInfoLine(node, file); int duration = ReadLength(node); Utils.GetQualifiedFilename(basePath, ref file); PlayListItem newItem = new PlayListItem(infoLine, file, duration); playlist.Add(newItem); } return(true); } catch (Exception) { return(false); } }
protected void OnPlayFiles(System.Collections.ArrayList filesList) { playlistPlayer.GetPlaylist(PlayListType.PLAYLIST_VIDEO_TEMP).Clear(); playlistPlayer.GetPlaylist(PlayListType.PLAYLIST_VIDEO).Clear(); foreach (string file in filesList) { PlayListItem item = new PlayListItem(); item.FileName = file; item.Type = PlayListItem.PlayListItemType.Video; item.Description = file; playlistPlayer.GetPlaylist(PlayListType.PLAYLIST_VIDEO).Add(item); } if (playlistPlayer.GetPlaylist(PlayListType.PLAYLIST_VIDEO).Count > 0) { GUIWindowManager.ActivateWindow((int)GUIWindow.Window.WINDOW_VIDEO_PLAYLIST); playlistPlayer.CurrentPlaylistType = PlayListType.PLAYLIST_VIDEO; playlistPlayer.Reset(); playlistPlayer.Play(0); } }
protected virtual void AddItemToPlayList(GUIListItem pItem) { if (!pItem.IsFolder) { //TODO if (Util.Utils.IsVideo(pItem.Path) && !PlayListFactory.IsPlayList(pItem.Path)) { PlayListItem playlistItem = new PlayListItem(); playlistItem.Type = PlayListItem.PlayListItemType.Video; playlistItem.FileName = pItem.Path; playlistItem.Description = pItem.Label; playlistItem.Duration = pItem.Duration; playlistPlayer.GetPlaylist(PlayListType.PLAYLIST_VIDEO).Add(playlistItem); } } }
void player_PlayBegin(YoutubePlaylistPlayer playlit, PlayListItem item) { try { //ClearLabels("NowPlaying"); VideoInfo info = item.MusicTag as VideoInfo; if (info == null) return; Log.Debug("YouTube.fm playback started"); YouTubeEntry en = info.Entry; if (en.Authors.Count == 0) { Uri videoEntryUrl = new Uri("http://gdata.youtube.com/feeds/api/videos/" + Youtube2MP.GetVideoId(en)); try { Video video = Youtube2MP.request.Retrieve<Video>(videoEntryUrl); en = video.YouTubeEntry; } catch (Exception) { //vid = null; } } en.Title.Text = item.Description; item.FileName = Youtube2MP.StreamPlaybackUrl(en, info); ClearLabels("NowPlaying",true); ClearLabels("Next", true); Youtube2MP.NowPlayingEntry = en; Youtube2MP.NextPlayingEntry = null; //ArtistManager.Instance.SetSkinProperties(Youtube2MP.NextPlayingEntry, "NowPlaying", false, false); if (playlit.GetNextItem() != null) { VideoInfo nextinfo = playlit.GetNextItem().MusicTag as VideoInfo; if (nextinfo != null) { Youtube2MP.NextPlayingEntry = nextinfo.Entry; //ArtistManager.Instance.SetSkinProperties(Youtube2MP.NextPlayingEntry, "Next", false, false); } } BackgroundWorker playBeginWorker = new BackgroundWorker(); playBeginWorker.DoWork += playBeginWorker_DoWork; playBeginWorker.RunWorkerAsync(); Youtube2MP.YouTubePlaying = true; GUIPropertyManager.SetProperty("#Youtube.fm.FullScreen.ShowTitle", "true"); GUIPropertyManager.SetProperty("#Youtube.fm.FullScreen.ShowNextTitle", Youtube2MP.NextPlayingEntry != null ? "true" : "false"); _labelTimer.Stop(); _labelTimer.Start(); } catch (Exception exception) { Log.Error("Youtube play begin exception"); Log.Error(exception); } }
private void SavePlayList() { string strNewFileName = playlistPlayer.CurrentPlaylistName; if (GetKeyboard(ref strNewFileName)) { string strPath = Path.GetFileNameWithoutExtension(strNewFileName); string strPlayListPath = string.Empty; using (Profile.Settings xmlreader = new Profile.MPSettings()) { strPlayListPath = xmlreader.GetValueAsString("music", "playlists", string.Empty); strPlayListPath = Util.Utils.RemoveTrailingSlash(strPlayListPath); } strPath += ".m3u"; if (strPlayListPath.Length != 0) { strPath = strPlayListPath + @"\" + strPath; } PlayList playlist = new PlayList(); for (int i = 0; i < facadeLayout.Count; ++i) { GUIListItem pItem = facadeLayout[i]; PlayListItem newItem = new PlayListItem(); newItem.FileName = pItem.Path; newItem.Description = pItem.Label; newItem.Duration = pItem.Duration; newItem.Type = PlayListItem.PlayListItemType.Audio; playlist.Add(newItem); } IPlayListIO saver = new PlayListM3uIO(); saver.Save(playlist, strPath); } }
private bool AddRandomSongToPlaylist(ref Song song) { //check duplication PlayList playlist = playlistPlayer.GetPlaylist(PlayListType.PLAYLIST_MUSIC); for (int i = 0; i < playlist.Count; i++) { PlayListItem item = playlist[i]; if (item.FileName == song.FileName) { return false; } } //add to playlist PlayListItem playlistItem = new PlayListItem(); playlistItem.Type = PlayListItem.PlayListItemType.Audio; StringBuilder sb = new StringBuilder(); playlistItem.FileName = song.FileName; sb.Append(song.Track); sb.Append(". "); sb.Append(song.Artist); sb.Append(" - "); sb.Append(song.Title); playlistItem.Description = sb.ToString(); playlistItem.Duration = song.Duration; MusicTag tag = new MusicTag(); tag = song.ToMusicTag(); playlistItem.MusicTag = tag; playlistPlayer.GetPlaylist(PlayListType.PLAYLIST_MUSIC).Add(playlistItem); return true; }
private void AddToPlayList(PlayList tmpPlayList, IEnumerable<object> sortedPlayList) { foreach (string file in sortedPlayList) { // Remove stop data if exists int idFile = VideoDatabase.GetFileId(file); if (idFile >= 0) { VideoDatabase.DeleteMovieStopTime(idFile); } // Add file to tmp playlist PlayListItem newItem = new PlayListItem(); newItem.FileName = file; // Set file description (for sorting by name -> DVD IFO file problem) string description = string.Empty; if (file.ToUpperInvariant().IndexOf(@"\VIDEO_TS\VIDEO_TS.IFO", StringComparison.InvariantCultureIgnoreCase) >= 0) { string dvdFolder = file.Substring(0, file.ToUpperInvariant().IndexOf(@"\VIDEO_TS\VIDEO_TS.IFO", StringComparison.InvariantCultureIgnoreCase)); description = Path.GetFileName(dvdFolder); } if (file.ToUpperInvariant().IndexOf(@"\BDMV\INDEX.BDMV", StringComparison.InvariantCultureIgnoreCase) >= 0) { string bdFolder = file.Substring(0, file.ToUpperInvariant().IndexOf(@"\BDMV\INDEX.BDMV", StringComparison.InvariantCultureIgnoreCase)); description = Path.GetFileName(bdFolder); } else { description = Path.GetFileName(file); } newItem.Description = description; newItem.Type = PlayListItem.PlayListItemType.Video; tmpPlayList.Add(newItem); } }
private void StartBackgroundMusic(string path) { if (g_Player.IsMusic || g_Player.IsRadio || g_Player.IsTV || g_Player.IsVideo) { return; } // Load Music related settings here, as the Loadsetting for pictures is called too late for the Backgroundmusic task using (Profile.Settings reader = new Profile.MPSettings()) { _musicFileExtensions = reader.GetValueAsString("music", "extensions", ".mp3,.pls,.wpl").Split(','); _autoShuffleMusic = reader.GetValueAsBool("musicfiles", "autoshuffle", false); } foreach (string extension in _musicFileExtensions) { string filename = string.Format(@"{0}\Folder{1}", path, extension); if (File.Exists(filename) == false) { continue; } try { PlayList playlist = playlistPlayer.GetPlaylist(PlayListType.PLAYLIST_MUSIC_TEMP); playlist.Clear(); playlistPlayer.Reset(); playlistPlayer.CurrentPlaylistType = PlayListType.PLAYLIST_MUSIC_TEMP; // Check, if we got a playlist to allow shuffle if (Util.Utils.IsPlayList(filename)) { IPlayListIO loader = PlayListFactory.CreateIO(filename); if (loader == null) { return; } if (!loader.Load(playlist, filename)) { return; } if (_autoShuffleMusic) { Random r = new Random((int)DateTime.Now.Ticks); int shuffleCount = r.Next() % 50; for (int i = 0; i < shuffleCount; ++i) { playlist.Shuffle(); } } } else { PlayListItem playlistItem = new PlayListItem(); playlistItem.Type = PlayListItem.PlayListItemType.Audio; playlistItem.FileName = filename; playlistPlayer.GetPlaylist(PlayListType.PLAYLIST_MUSIC_TEMP).Add(playlistItem); } playlistPlayer.Play(0); _isBackgroundMusicPlaying = true; } catch (Exception e) { Log.Info("GUISlideShow.StartBackgroundMusic", e.Message); } break; } }
public PlayListItem ToPlayListItem() { var pli = new PlayListItem { Type = PlayListItem.PlayListItemType.Audio, FileName = this.FileName, Description = this.Title, Duration = this.Duration }; MusicTag tag = this.ToMusicTag(); pli.MusicTag = tag; return pli; }
public bool Load(PlayList playlist, string fileName) { string extension = Path.GetExtension(fileName); extension.ToLowerInvariant(); playlist.Clear(); playlist.Name = Path.GetFileName(fileName); string basePath = Path.GetDirectoryName(Path.GetFullPath(fileName)); Encoding fileEncoding = Encoding.Default; FileStream stream = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.Read); StreamReader file = new StreamReader(stream, fileEncoding, true); string line = file.ReadLine(); if (line == null) { file.Close(); return(false); } string strLine = line.Trim(); //CUtil::RemoveCRLF(strLine); if (strLine != START_PLAYLIST_MARKER) { if (strLine.StartsWith("http") || strLine.StartsWith("HTTP") || strLine.StartsWith("mms") || strLine.StartsWith("MMS") || strLine.StartsWith("rtp") || strLine.StartsWith("RTP")) { PlayListItem newItem = new PlayListItem(strLine, strLine, 0); newItem.Type = PlayListItem.PlayListItemType.AudioStream; playlist.Add(newItem); file.Close(); return(true); } fileEncoding = Encoding.Default; // No unicode??? rtv stream = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.Read); file = new StreamReader(stream, fileEncoding, true); //file.Close(); //return false; } string infoLine = ""; string durationLine = ""; fileName = ""; line = file.ReadLine(); while (line != null) { strLine = line.Trim(); //CUtil::RemoveCRLF(strLine); int equalPos = strLine.IndexOf("="); if (equalPos > 0) { string leftPart = strLine.Substring(0, equalPos); equalPos++; string valuePart = strLine.Substring(equalPos); leftPart = leftPart.ToLowerInvariant(); if (leftPart.StartsWith("file")) { if (valuePart.Length > 0 && valuePart[0] == '#') { line = file.ReadLine(); continue; } if (fileName.Length != 0) { PlayListItem newItem = new PlayListItem(infoLine, fileName, 0); playlist.Add(newItem); infoLine = ""; durationLine = ""; } fileName = valuePart; } if (leftPart.StartsWith("title")) { infoLine = valuePart; } else { if (infoLine == "") { infoLine = Path.GetFileName(fileName); } } if (leftPart.StartsWith("length")) { durationLine = valuePart; } if (leftPart == "playlistname") { playlist.Name = valuePart; } if (durationLine.Length > 0 && infoLine.Length > 0 && fileName.Length > 0) { int duration = System.Int32.Parse(durationLine); duration *= 1000; string tmp = fileName.ToLowerInvariant(); PlayListItem newItem = new PlayListItem(infoLine, fileName, duration); if (tmp.IndexOf("http:") < 0 && tmp.IndexOf("mms:") < 0 && tmp.IndexOf("rtp:") < 0) { Utils.GetQualifiedFilename(basePath, ref fileName); newItem.Type = PlayListItem.PlayListItemType.AudioStream; } playlist.Add(newItem); fileName = ""; infoLine = ""; durationLine = ""; } } line = file.ReadLine(); } file.Close(); if (fileName.Length > 0) { new PlayListItem(infoLine, fileName, 0); } return(true); }
/// <summary> /// Save player state (when form was resized) /// </summary> protected void SavePlayerState() { if (!_wasPlayingVideo && (g_Player.Playing && (g_Player.IsTV || g_Player.IsVideo || g_Player.IsDVD))) { _wasPlayingVideo = true; // Some Audio/video is playing _currentPlayerPos = g_Player.CurrentPosition; _currentPlayListType = PlaylistPlayer.CurrentPlaylistType; _currentPlayList = new PlayList(); Log.Info("D3D: Saving fullscreen state for resume: {0}", Menu == null); var tempList = PlaylistPlayer.GetPlaylist(_currentPlayListType); if (tempList.Count == 0 && g_Player.IsDVD) { // DVD is playing var itemDVD = new PlayListItem {FileName = g_Player.CurrentFile, Played = true, Type = PlayListItem.PlayListItemType.DVD}; tempList.Add(itemDVD); } foreach (var itemNew in tempList) { _currentPlayList.Add(itemNew); } _currentFile = PlaylistPlayer.Get(PlaylistPlayer.CurrentSong); if (_currentFile.Equals(string.Empty) && g_Player.IsDVD) { _currentFile = g_Player.CurrentFile; } Log.Info("D3D: Stopping media - Current playlist: Type: {0} / Size: {1} / Current item: {2} / Filename: {3} / Position: {4}", _currentPlayListType, _currentPlayList.Count, PlaylistPlayer.CurrentSong, _currentFile, _currentPlayerPos); g_Player.Stop(); _lastActiveWindow = GUIWindowManager.ActiveWindow; } }
protected override void AddItemToPlayList(GUIListItem listItem) { if (listItem.IsFolder) { // recursive if (listItem.Label == "..") { return; } List<GUIListItem> itemlist = _virtualDirectory.GetDirectoryUnProtectedExt(listItem.Path, true); foreach (GUIListItem item in itemlist) { AddItemToPlayList(item); } } else { if (Util.Utils.IsVideo(listItem.Path) && !PlayListFactory.IsPlayList(listItem.Path)) { PlayListItem playlistItem = new PlayListItem(); playlistItem.FileName = listItem.Path; playlistItem.Description = listItem.Label; playlistItem.Duration = listItem.Duration; playlistItem.Type = PlayListItem.PlayListItemType.Video; _playlistPlayer.GetPlaylist(PlayListType.PLAYLIST_VIDEO).Add(playlistItem); } } }
public static void PlayMovie(int idMovie, bool requestPin) { int selectedFileIndex = 1; if (_isStacked) { selectedFileIndex = 0; } ArrayList movies = new ArrayList(); VideoDatabase.GetFiles(idMovie, ref movies); if (movies.Count <= 0) { return; } if (!CheckMovie(idMovie)) { return; } bool askForResumeMovie = true; int movieDuration = 0; //get all movies belonging to each other List<GUIListItem> items = new List<GUIListItem>(); // Pin protection if (!requestPin) { items = _virtualDirectory.GetDirectoryUnProtectedExt(Path.GetDirectoryName((string)movies[0]), false); } else { items = _virtualDirectory.GetDirectoryExt(Path.GetDirectoryName((string)movies[0])); } if (items.Count <= 1) { return; // first item always ".." so 1 item means protected share } //check if we can resume 1 of those movies int timeMovieStopped = 0; bool asked = false; ArrayList newItems = new ArrayList(); for (int i = 0; i < items.Count; ++i) { GUIListItem temporaryListItem = (GUIListItem)items[i]; bool found = false; // reduce number of items to movie files only foreach (var movie in movies) { if (movie.ToString() == items[i].Path) { found = true; break; } } if (!found) continue; if ((Util.Utils.ShouldStack(temporaryListItem.Path, (string)movies[0])) && (movies.Count > 1)) { if (!asked) { selectedFileIndex++; } IMDBMovie movieDetails = new IMDBMovie(); int idFile = VideoDatabase.GetFileId(temporaryListItem.Path); if ((idMovie >= 0) && (idFile >= 0)) { VideoDatabase.GetMovieInfo((string)movies[0], ref movieDetails); string title = Path.GetFileName((string)movies[0]); if ((VirtualDirectory.IsValidExtension((string)movies[0], Util.Utils.VideoExtensions, false))) { Util.Utils.RemoveStackEndings(ref title); } if (movieDetails.Title != string.Empty) { title = movieDetails.Title; } timeMovieStopped = VideoDatabase.GetMovieStopTime(idFile); if (timeMovieStopped > 0) { if (!asked) { asked = true; GUIResumeDialog.Result result = GUIResumeDialog.ShowResumeDialog(title, movieDuration + timeMovieStopped, GUIResumeDialog.MediaType.Video); if (result == GUIResumeDialog.Result.Abort) return; if (result == GUIResumeDialog.Result.PlayFromBeginning) { VideoDatabase.DeleteMovieStopTime(idFile); newItems.Add(temporaryListItem); } else { askForResumeMovie = false; newItems.Add(temporaryListItem); } } //if (!asked) else { newItems.Add(temporaryListItem); } } //if (timeMovieStopped>0) else { newItems.Add(temporaryListItem); } // Total movie duration movieDuration += VideoDatabase.GetMovieDuration(idFile); } else //if (idMovie >=0) { newItems.Add(temporaryListItem); } } //if ( MediaPortal.Util.Utils.ShouldStack(temporaryListItem.Path, item.Path)) } // If we have found stackable items, clear the movies array // so, that we can repopulate it. if (newItems.Count > 0) { movies.Clear(); } for (int i = 0; i < newItems.Count; ++i) { GUIListItem temporaryListItem = (GUIListItem)newItems[i]; if (Util.Utils.IsVideo(temporaryListItem.Path) && !PlayListFactory.IsPlayList(temporaryListItem.Path)) { movies.Add(temporaryListItem.Path); } } if (movies.Count > 1) { if (askForResumeMovie) { GUIDialogFileStacking dlg = (GUIDialogFileStacking)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_FILESTACKING); if (null != dlg) { dlg.SetFiles(movies); dlg.DoModal(GUIWindowManager.ActiveWindow); selectedFileIndex = dlg.SelectedFile; if (selectedFileIndex < 1) { return; } } } } _playlistPlayer.Reset(); _playlistPlayer.CurrentPlaylistType = PlayListType.PLAYLIST_VIDEO_TEMP; PlayList playlist = _playlistPlayer.GetPlaylist(PlayListType.PLAYLIST_VIDEO_TEMP); playlist.Clear(); for (int i = selectedFileIndex - 1; i < movies.Count; ++i) { string movieFileName = (string)movies[i]; PlayListItem newitem = new PlayListItem(); newitem.FileName = movieFileName; newitem.Type = PlayListItem.PlayListItemType.Video; playlist.Add(newitem); } // play movie... PlayMovieFromPlayList(askForResumeMovie, requestPin); }
public static void PlayMovie(int idMovie, bool requestPin) { int selectedFileIndex = 1; if (IsStacked) { selectedFileIndex = 0; } ArrayList movieFiles = new ArrayList(); VideoDatabase.GetFilesForMovie(idMovie, ref movieFiles); if (movieFiles.Count <= 0 || !CheckMovie(idMovie)) { return; } bool askForResumeMovie = true; int movieDuration = 0; List<GUIListItem> items = new List<GUIListItem>(); foreach (string file in movieFiles) { FileInformation fi = new FileInformation(); GUIListItem item = new GUIListItem(Util.Utils.GetFilename(file), "", file, false, fi); items.Add(item); if (!WakeUpSrv(item.Path)) { return; } } if (items.Count <= 0) { return; } if (requestPin) { string strDir = Path.GetDirectoryName(items[0].Path); if (strDir != null && strDir.EndsWith(@"\")) { strDir = strDir.Substring(0, strDir.Length - 1); } if (strDir == null || strDir.Length > 254) { Log.Warn("GUIVideoFiles.PlayTitleMovie: Received a path which contains too many chars"); return; } string iPincodeCorrect; if (_virtualDirectory.IsProtectedShare(strDir, out iPincodeCorrect)) { #region Pin protected bool retry = true; { while (retry) { //no, then ask user to enter the pincode GUIMessage msgGetPassword = new GUIMessage(GUIMessage.MessageType.GUI_MSG_GET_PASSWORD, 0, 0, 0, 0, 0, 0); GUIWindowManager.SendMessage(msgGetPassword); if (msgGetPassword.Label != iPincodeCorrect) { GUIMessage msgWrongPassword = new GUIMessage(GUIMessage.MessageType.GUI_MSG_WRONG_PASSWORD, 0, 0, 0, 0, 0, 0); GUIWindowManager.SendMessage(msgWrongPassword); if (!(bool)msgWrongPassword.Object) { return; } } else { retry = false; } } } #endregion } } //check if we can resume 1 of those movies if (items.Count > 1) { bool asked = false; for (int i = 0; i < items.Count; ++i) { GUIListItem temporaryListItem = (GUIListItem)items[i]; if (!asked) { selectedFileIndex++; } IMDBMovie movieDetails = new IMDBMovie(); int idFile = VideoDatabase.GetFileId(temporaryListItem.Path); if ((idMovie >= 0) && (idFile >= 0)) { VideoDatabase.GetMovieInfo((string)movieFiles[0], ref movieDetails); string title = Path.GetFileName((string)movieFiles[0]); if ((VirtualDirectory.IsValidExtension((string)movieFiles[0], Util.Utils.VideoExtensions, false))) { Util.Utils.RemoveStackEndings(ref title); } if (movieDetails.Title != string.Empty) { title = movieDetails.Title; } int timeMovieStopped = VideoDatabase.GetMovieStopTime(idFile); if (timeMovieStopped > 0) { if (!asked) { asked = true; GUIResumeDialog.Result result = GUIResumeDialog.ShowResumeDialog(title, movieDuration + timeMovieStopped, GUIResumeDialog.MediaType.Video); if (result == GUIResumeDialog.Result.Abort) { _playlistPlayer.Reset(); _playlistPlayer.CurrentPlaylistType = _currentPlaylistType; _playlistPlayer.CurrentSong = _currentPlaylistIndex; return; } if (result == GUIResumeDialog.Result.PlayFromBeginning) { VideoDatabase.DeleteMovieStopTime(idFile); } else { askForResumeMovie = false; } } } // Total movie duration movieDuration += VideoDatabase.GetVideoDuration(idFile); } } if (askForResumeMovie) { GUIDialogFileStacking dlg = (GUIDialogFileStacking)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_FILESTACKING); if (null != dlg) { dlg.SetFiles(movieFiles); dlg.DoModal(GUIWindowManager.ActiveWindow); selectedFileIndex = dlg.SelectedFile; if (selectedFileIndex < 1) { return; } } } } // Get current playlist _currentPlaylistType = new PlayListType(); _currentPlaylistType = _playlistPlayer.CurrentPlaylistType; _currentPlaylistIndex = _playlistPlayer.CurrentSong; _playlistPlayer.Reset(); _playlistPlayer.CurrentPlaylistType = PlayListType.PLAYLIST_VIDEO_TEMP; PlayList playlist = _playlistPlayer.GetPlaylist(PlayListType.PLAYLIST_VIDEO_TEMP); playlist.Clear(); for (int i = selectedFileIndex - 1; i < movieFiles.Count; ++i) { string movieFileName = (string)movieFiles[i]; PlayListItem newitem = new PlayListItem(); newitem.FileName = movieFileName; newitem.Type = PlayListItem.PlayListItemType.Video; playlist.Add(newitem); } // play movie... PlayMovieFromPlayList(askForResumeMovie, requestPin); }
protected override void OnClick(int iItem) { GUIListItem item = facadeLayout.SelectedListItem; _totalMovieDuration = 0; _isStacked = false; _stackedMovieFiles.Clear(); if (item == null) { return; } bool isFolderAMovie = false; string path = item.Path; if (item.IsFolder && !item.IsRemote) { // Check if folder is actually a DVD. If so don't browse this folder, but play the DVD! if ((File.Exists(path + @"\VIDEO_TS\VIDEO_TS.IFO")) && (item.Label != "..")) { isFolderAMovie = true; path = item.Path + @"\VIDEO_TS\VIDEO_TS.IFO"; } else { isFolderAMovie = false; } } if ((item.IsFolder && !isFolderAMovie)) //-- Mars Warrior @ 03-sep-2004 { _currentSelectedItem = -1; LoadDirectory(path); } else { if (!_virtualDirectory.RequestPin(path)) { return; } if (_virtualDirectory.IsRemote(path)) { if (!_virtualDirectory.IsRemoteFileDownloaded(path, item.FileInfo.Length)) { if (!_virtualDirectory.ShouldWeDownloadFile(path)) { return; } if (!_virtualDirectory.DownloadRemoteFile(path, item.FileInfo.Length)) { //show message that we are unable to download the file GUIMessage msg = new GUIMessage(GUIMessage.MessageType.GUI_MSG_SHOW_WARNING, 0, 0, 0, 0, 0, 0); msg.Param1 = 916; msg.Param2 = 920; msg.Param3 = 0; msg.Param4 = 0; GUIWindowManager.SendMessage(msg); return; } else { //download subtitle files Thread subLoaderThread = new Thread(new ThreadStart(this._downloadSubtitles)); subLoaderThread.IsBackground = true; subLoaderThread.Name = "SubtitleLoader"; subLoaderThread.Start(); } } } if (item.FileInfo != null) { if (!_virtualDirectory.IsRemoteFileDownloaded(path, item.FileInfo.Length)) { return; } } string movieFileName = path; movieFileName = _virtualDirectory.GetLocalFilename(movieFileName); // Set selected item _currentSelectedItem = facadeLayout.SelectedListItemIndex; if (PlayListFactory.IsPlayList(movieFileName)) { LoadPlayList(movieFileName); return; } if (!CheckMovie(movieFileName)) { return; } bool askForResumeMovie = true; if (_mapSettings.Stack) { int selectedFileIndex = 0; int movieDuration = 0; ArrayList movies = new ArrayList(); #region Is all this really neccessary?! //get all movies belonging to each other List<GUIListItem> items = _virtualDirectory.GetDirectoryUnProtectedExt(_currentFolder, true); //check if we can resume 1 of those movies int timeMovieStopped = 0; bool asked = false; ArrayList newItems = new ArrayList(); for (int i = 0; i < items.Count; ++i) { GUIListItem temporaryListItem = (GUIListItem)items[i]; if (Util.Utils.ShouldStack(temporaryListItem.Path, path)) { _isStacked = true; _stackedMovieFiles.Add(temporaryListItem.Path); if (!asked) { selectedFileIndex++; } IMDBMovie movieDetails = new IMDBMovie(); int idFile = VideoDatabase.GetFileId(temporaryListItem.Path); int idMovie = VideoDatabase.GetMovieId(path); if ((idMovie >= 0) && (idFile >= 0)) { VideoDatabase.GetMovieInfo(path, ref movieDetails); string title = Path.GetFileName(path); if ((VirtualDirectory.IsValidExtension(path, Util.Utils.VideoExtensions, false))) { Util.Utils.RemoveStackEndings(ref title); } if (movieDetails.Title != string.Empty) { title = movieDetails.Title; } timeMovieStopped = VideoDatabase.GetMovieStopTime(idFile); if (timeMovieStopped > 0) { if (!asked) { asked = true; GUIResumeDialog.Result result = GUIResumeDialog.ShowResumeDialog(title, movieDuration + timeMovieStopped, GUIResumeDialog.MediaType.Video); if (result == GUIResumeDialog.Result.Abort) return; if (result == GUIResumeDialog.Result.PlayFromBeginning) { VideoDatabase.DeleteMovieStopTime(idFile); newItems.Add(temporaryListItem); } else { askForResumeMovie = false; newItems.Add(temporaryListItem); } } //if (!asked) else { newItems.Add(temporaryListItem); } } //if (timeMovieStopped>0) else { newItems.Add(temporaryListItem); } // Total movie duration movieDuration += VideoDatabase.GetMovieDuration(idFile); _totalMovieDuration = movieDuration; } else //if (idMovie >=0) { newItems.Add(temporaryListItem); } } //if ( MediaPortal.Util.Utils.ShouldStack(temporaryListItem.Path, path)) } for (int i = 0; i < newItems.Count; ++i) { GUIListItem temporaryListItem = (GUIListItem)newItems[i]; if (Util.Utils.IsVideo(temporaryListItem.Path) && !PlayListFactory.IsPlayList(temporaryListItem.Path)) { if (Util.Utils.ShouldStack(temporaryListItem.Path, path)) { movies.Add(temporaryListItem.Path); } } } if (movies.Count == 0) { movies.Add(movieFileName); } #endregion if (movies.Count <= 0) { return; } if (movies.Count > 1) { //TODO movies.Sort(); for (int i = 0; i < movies.Count; ++i) { AddFileToDatabase((string)movies[i]); } // Stacked movies duration if (_totalMovieDuration == 0) { MovieDuration(movies); _stackedMovieFiles = movies; } if (askForResumeMovie) { GUIDialogFileStacking dlg = (GUIDialogFileStacking)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_FILESTACKING); if (null != dlg) { dlg.SetFiles(movies); dlg.DoModal(GetID); selectedFileIndex = dlg.SelectedFile; if (selectedFileIndex < 1) { return; } } } } else if (movies.Count == 1) { AddFileToDatabase((string)movies[0]); MovieDuration(movies); } _playlistPlayer.Reset(); _playlistPlayer.CurrentPlaylistType = PlayListType.PLAYLIST_VIDEO_TEMP; PlayList playlist = _playlistPlayer.GetPlaylist(PlayListType.PLAYLIST_VIDEO_TEMP); playlist.Clear(); for (int i = 0; i < (int)movies.Count; ++i) { movieFileName = (string)movies[i]; PlayListItem itemNew = new PlayListItem(); itemNew.FileName = movieFileName; itemNew.Type = PlayListItem.PlayListItemType.Video; playlist.Add(itemNew); } // play movie... PlayMovieFromPlayList(askForResumeMovie, selectedFileIndex - 1, true); return; } // play movie... AddFileToDatabase(movieFileName); _playlistPlayer.Reset(); _playlistPlayer.CurrentPlaylistType = PlayListType.PLAYLIST_VIDEO_TEMP; PlayList newPlayList = _playlistPlayer.GetPlaylist(PlayListType.PLAYLIST_VIDEO_TEMP); newPlayList.Clear(); PlayListItem NewItem = new PlayListItem(); NewItem.FileName = movieFileName; NewItem.Type = PlayListItem.PlayListItemType.Video; newPlayList.Add(NewItem); PlayMovieFromPlayList(true, true); /* //TODO if (g_Player.Play(movieFileName)) { if ( MediaPortal.Util.Utils.IsVideo(movieFileName)) { GUIGraphicsContext.IsFullScreenVideo = true; GUIWindowManager.ActivateWindow((int)GUIWindow.Window.WINDOW_FULLSCREEN_VIDEO); } }*/ } }
protected override void OnClick(int iItem) { GUIListItem item = facadeLayout.SelectedListItem; TotalMovieDuration = 0; IsStacked = false; StackedMovieFiles.Clear(); if (item == null) { _playClicked = false; return; } if (!WakeUpSrv(item.Path)) { return; } string path = item.Path; if (item.IsBdDvdFolder) { // Check if folder is actually a DVD. If so don't browse this folder, but play the DVD! if (File.Exists(path + @"\VIDEO_TS\VIDEO_TS.IFO")) { path = item.Path + @"\VIDEO_TS\VIDEO_TS.IFO"; } // Then it's a Blu-Ray. Play the Blu-Ray! else { path = item.Path + @"\BDMV\index.bdmv"; } } if ((item.IsFolder && !item.IsBdDvdFolder)) { // Play all in folder if (_playClicked) { if (!item.IsRemote && item.Label != ".." && !VirtualDirectory.IsImageFile(Path.GetExtension(item.Path))) { if (!_virtualDirectory.RequestPin(item.Path)) { _playClicked = false; return; } OnPlayAll(item.Path); _playClicked = false; } } else { _currentSelectedItem = -1; if (facadeLayout != null) { _history.Set(facadeLayout.SelectedListItemIndex.ToString(), _currentFolder); } LoadDirectory(path, true); } } else { if (!_virtualDirectory.RequestPin(path)) { _playClicked = false; return; } if (_virtualDirectory.IsRemote(path)) { if (!_virtualDirectory.IsRemoteFileDownloaded(path, item.FileInfo.Length)) { if (!_virtualDirectory.ShouldWeDownloadFile(path)) { _playClicked = false; return; } if (!_virtualDirectory.DownloadRemoteFile(path, item.FileInfo.Length)) { //show message that we are unable to download the file GUIMessage msg = new GUIMessage(GUIMessage.MessageType.GUI_MSG_SHOW_WARNING, 0, 0, 0, 0, 0, 0); msg.Param1 = 916; msg.Param2 = 920; msg.Param3 = 0; msg.Param4 = 0; GUIWindowManager.SendMessage(msg); _playClicked = false; return; } //download subtitle files Thread subLoaderThread = new Thread(DownloadSubtitles); subLoaderThread.IsBackground = true; subLoaderThread.Name = "SubtitleLoader"; subLoaderThread.Start(); } } if (item.FileInfo != null) { if (!_virtualDirectory.IsRemoteFileDownloaded(path, item.FileInfo.Length)) { _playClicked = false; return; } } string movieFileName = path; movieFileName = _virtualDirectory.GetLocalFilename(movieFileName); if (PlayListFactory.IsPlayList(movieFileName)) { LoadPlayList(movieFileName); _playClicked = false; return; } if (!CheckMovie(movieFileName)) { _playClicked = false; return; } if (_videoInfoInShare && VideoDatabase.HasMovieInfo(movieFileName) && !_playClicked) { OnInfo(facadeLayout.SelectedListItemIndex); return; } bool askForResumeMovie = true; _playClicked = false; #region StackEnabled and file is stackable // Proceed to file stack check if file is stackable if (_mapSettings.Stack && IsFileStackable(movieFileName)) { IsStacked = true; int selectedFileIndex = 0; int movieDuration = 0; ArrayList movies = new ArrayList(); List<GUIListItem> items = new List<GUIListItem>(); IMDBMovie movie = item.AlbumInfoTag as IMDBMovie; // This will return all stackable files for current clicked item // Also will add all stackable files to videodatabase if they are not exist StackedMovieFiles = AddFileToDatabase(movieFileName); // Add movie files to list foreach (string file in StackedMovieFiles) { FileInformation fi = new FileInformation(); GUIListItem itemMovie = new GUIListItem(Util.Utils.GetFilename(file), "", file, false, fi); items.Add(itemMovie); } // In the list must be at least 2 files so we check stackable movie for resume // (which file have a stop time) bool asked = false; string title = item.Label; // Dlg title if (movie != null && !movie.IsEmpty) { title = movie.Title; } for (int i = 0; i < items.Count; ++i) { IMDBMovie.SetMovieData(items[i]); // This will set IMDBMovie object and it will never be null movie = items[i].AlbumInfoTag as IMDBMovie; if (!asked) { selectedFileIndex++; } int idFile = VideoDatabase.GetFileId(movie.VideoFileName); if (idFile != -1) { int timeMovieStopped = VideoDatabase.GetMovieStopTime(idFile); if (timeMovieStopped > 0) { if (!asked) { asked = true; GUIResumeDialog.Result result = GUIResumeDialog.ShowResumeDialog(title, movieDuration + timeMovieStopped, GUIResumeDialog.MediaType.Video); if (result == GUIResumeDialog.Result.Abort) { _playlistPlayer.Reset(); _playlistPlayer.CurrentPlaylistType = _currentPlaylistType; _playlistPlayer.CurrentSong = _currentPlaylistIndex; return; } if (result == GUIResumeDialog.Result.PlayFromBeginning) { VideoDatabase.DeleteMovieStopTime(idFile); } else { askForResumeMovie = false; } } } // Total movie duration movieDuration += VideoDatabase.GetVideoDuration(idFile); TotalMovieDuration = movieDuration; } } for (int i = 0; i < items.Count; ++i) { GUIListItem temporaryListItem = (GUIListItem)items[i]; movie = (IMDBMovie)temporaryListItem.AlbumInfoTag; if (Util.Utils.IsVideo(movie.VideoFileName) && !PlayListFactory.IsPlayList(movie.VideoFileName)) { movies.Add(movie.VideoFileName); } } if (movies.Count == 0) { movies.Add(movieFileName); } if (movies.Count > 1) { movies.Sort(); // Stacked movies duration if (TotalMovieDuration == 0) { MovieDuration(movies, false); StackedMovieFiles = movies; } // Ask for resume if (askForResumeMovie) { GUIDialogFileStacking dlg = (GUIDialogFileStacking) GUIWindowManager.GetWindow((int) Window.WINDOW_DIALOG_FILESTACKING); if (null != dlg) { dlg.SetFiles(movies); dlg.DoModal(GetID); selectedFileIndex = dlg.SelectedFile; if (selectedFileIndex < 1) { return; } } } } // This can happen if user have one file and it is stackable (filename ends with CDx...) else { MovieDuration(movies, false); } // Get current playlist _currentPlaylistType = new PlayListType(); _currentPlaylistType = _playlistPlayer.CurrentPlaylistType; _currentPlaylistIndex = _playlistPlayer.CurrentSong; _playlistPlayer.Reset(); _playlistPlayer.CurrentPlaylistType = PlayListType.PLAYLIST_VIDEO_TEMP; PlayList playlist = _playlistPlayer.GetPlaylist(PlayListType.PLAYLIST_VIDEO_TEMP); playlist.Clear(); for (int i = 0; i < (int) movies.Count; ++i) { movieFileName = (string) movies[i]; PlayListItem itemNew = new PlayListItem(); itemNew.FileName = movieFileName; itemNew.Type = PlayListItem.PlayListItemType.Video; playlist.Add(itemNew); } // play movie...(2 or more files) PlayMovieFromPlayList(askForResumeMovie, selectedFileIndex - 1, true); return; } #endregion #region StackDisabled or file not stackable // play movie...(only 1 file) AddFileToDatabase(movieFileName); // Get current playlist _currentPlaylistType = new PlayListType(); _currentPlaylistType = _playlistPlayer.CurrentPlaylistType; _currentPlaylistIndex = _playlistPlayer.CurrentSong; _playlistPlayer.Reset(); _playlistPlayer.CurrentPlaylistType = PlayListType.PLAYLIST_VIDEO_TEMP; PlayList newPlayList = _playlistPlayer.GetPlaylist(PlayListType.PLAYLIST_VIDEO_TEMP); newPlayList.Clear(); PlayListItem NewItem = new PlayListItem(); NewItem.FileName = movieFileName; NewItem.Type = PlayListItem.PlayListItemType.Video; newPlayList.Add(NewItem); PlayMovieFromPlayList(true, true); #endregion } }
public void OnMessage(GUIMessage message) { switch (message.Message) { case GUIMessage.MessageType.GUI_MSG_PLAYBACK_STOPPED: { PlayListItem item = GetCurrentItem(); if (item != null) { if (item.Type != PlayListItem.PlayListItemType.AudioStream) { Reset(); _currentPlayList = PlayListType.PLAYLIST_NONE; } } GUIMessage msg = new GUIMessage(GUIMessage.MessageType.GUI_MSG_ITEM_FOCUS, 0, 0, 0, -1, 0, null); GUIGraphicsContext.SendMessage(msg); } break; // SV Allows BassMusicPlayer to continuously play case GUIMessage.MessageType.GUI_MSG_PLAYBACK_CROSSFADING: { // This message is only sent by BASS in gapless/crossfading mode PlayNext(); } break; case GUIMessage.MessageType.GUI_MSG_PLAYBACK_ENDED: { // This message is sent by both the internal and BASS player // In case of gapless/crossfading it is only sent after the last song PlayNext(false); if (!g_Player.Playing) { g_Player.Release(); // Clear focus when playback ended GUIMessage msg = new GUIMessage(GUIMessage.MessageType.GUI_MSG_ITEM_FOCUS, 0, 0, 0, -1, 0, null); GUIGraphicsContext.SendMessage(msg); } } break; case GUIMessage.MessageType.GUI_MSG_PLAY_FILE: { Log.Info("Playlistplayer: Start file ({0})", message.Label); g_Player.Play(message.Label); if (!g_Player.Playing) { g_Player.Stop(); } } break; case GUIMessage.MessageType.GUI_MSG_STOP_FILE: { Log.Info("Playlistplayer: Stop file"); g_Player.Stop(); } break; case GUIMessage.MessageType.GUI_MSG_SEEK_FILE_PERCENTAGE: { Log.Info("Playlistplayer: SeekPercent ({0}%)", message.Param1); g_Player.SeekAsolutePercentage(message.Param1); Log.Debug("Playlistplayer: SeekPercent ({0}%) done", message.Param1); } break; case GUIMessage.MessageType.GUI_MSG_SEEK_FILE_END: { double duration = g_Player.Duration; double position = g_Player.CurrentPosition; if (position < duration - 1d) { Log.Info("Playlistplayer: SeekEnd ({0})", duration); g_Player.SeekAbsolute(duration - 2d); Log.Debug("Playlistplayer: SeekEnd ({0}) done", g_Player.CurrentPosition); } } break; case GUIMessage.MessageType.GUI_MSG_SEEK_POSITION: { g_Player.SeekAbsolute(message.Param1); } break; } }
public bool Load(PlayList playlist, string fileName, string label) { string basePath = String.Empty; Stream stream; if (fileName.ToLower().StartsWith("http")) { // We've got a URL pointing to a pls WebClient client = new WebClient(); client.Proxy.Credentials = CredentialCache.DefaultCredentials; byte[] buffer = client.DownloadData(fileName); stream = new MemoryStream(buffer); } else { // We've got a plain pls file basePath = Path.GetDirectoryName(Path.GetFullPath(fileName)); stream = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.Read); } playlist.Clear(); playlist.Name = Path.GetFileName(fileName); Encoding fileEncoding = Encoding.Default; StreamReader file = new StreamReader(stream, fileEncoding, true); try { if (file == null) { return(false); } string line; line = file.ReadLine(); if (line == null) { file.Close(); return(false); } string strLine = line.Trim(); //CUtil::RemoveCRLF(strLine); if (strLine != START_PLAYLIST_MARKER) { if (strLine.StartsWith("http") || strLine.StartsWith("HTTP") || strLine.StartsWith("mms") || strLine.StartsWith("MMS") || strLine.StartsWith("rtp") || strLine.StartsWith("RTP")) { PlayListItem newItem = new PlayListItem(strLine, strLine, 0); newItem.Type = PlayListItem.PlayListItemType.AudioStream; playlist.Add(newItem); file.Close(); return(true); } fileEncoding = Encoding.Default; stream = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.Read); file = new StreamReader(stream, fileEncoding, true); //file.Close(); //return false; } string infoLine = ""; string durationLine = ""; fileName = ""; line = file.ReadLine(); while (line != null) { strLine = line.Trim(); //CUtil::RemoveCRLF(strLine); int equalPos = strLine.IndexOf("="); if (equalPos > 0) { string leftPart = strLine.Substring(0, equalPos); equalPos++; string valuePart = strLine.Substring(equalPos); leftPart = leftPart.ToLower(); if (leftPart.StartsWith("file")) { if (valuePart.Length > 0 && valuePart[0] == '#') { line = file.ReadLine(); continue; } if (fileName.Length != 0) { PlayListItem newItem = new PlayListItem(infoLine, fileName, 0); playlist.Add(newItem); fileName = ""; infoLine = ""; durationLine = ""; } fileName = valuePart; } if (leftPart.StartsWith("title")) { infoLine = valuePart; } else { if (infoLine == "") { // For a URL we need to set the label in for the Playlist name, in order to be played. if (label != null && fileName.ToLower().StartsWith("http")) { infoLine = label; } else { infoLine = Path.GetFileName(fileName); } } } if (leftPart.StartsWith("length")) { durationLine = valuePart; } if (leftPart == "playlistname") { playlist.Name = valuePart; } if (durationLine.Length > 0 && infoLine.Length > 0 && fileName.Length > 0) { int duration = Int32.Parse(durationLine); // Remove trailing slashes. Might cause playback issues if (fileName.EndsWith("/")) { fileName = fileName.Substring(0, fileName.Length - 1); } PlayListItem newItem = new PlayListItem(infoLine, fileName, duration); if (fileName.ToLower().StartsWith("http:") || fileName.ToLower().StartsWith("https:") || fileName.ToLower().StartsWith("mms:") || fileName.ToLower().StartsWith("rtp:")) { newItem.Type = PlayListItem.PlayListItemType.AudioStream; } else { Util.Utils.GetQualifiedFilename(basePath, ref fileName); newItem.FileName = fileName; newItem.Type = PlayListItem.PlayListItemType.Audio; } playlist.Add(newItem); fileName = ""; infoLine = ""; durationLine = ""; } } line = file.ReadLine(); } file.Close(); if (fileName.Length > 0) { PlayListItem newItem = new PlayListItem(infoLine, fileName, 0); } } finally { if (file != null) { file.Close(); } } return(true); }
public bool Play(int iSong, bool setFullScreenVideo) { // if play returns false PlayNext is called but this does not help against selecting an invalid track bool skipmissing = false; do { if (_currentPlayList == PlayListType.PLAYLIST_NONE) { Log.Debug("PlaylistPlayer.Play() no playlist selected"); return(false); } PlayList playlist = GetPlaylist(_currentPlayList); if (playlist.Count <= 0) { Log.Debug("PlaylistPlayer.Play() playlist is empty"); return(false); } if (iSong < 0) { iSong = 0; } if (iSong >= playlist.Count) { if (skipmissing) { return(false); } else { if (_entriesNotFound < playlist.Count) { iSong = playlist.Count - 1; } else { return(false); } } } //int previousItem = _currentItem; _currentItem = iSong; PlayListItem item = playlist[_currentItem]; GUIMessage msg = new GUIMessage(GUIMessage.MessageType.GUI_MSG_ITEM_FOCUS, 0, 0, 0, _currentItem, 0, null); msg.Label = item.FileName; GUIGraphicsContext.SendMessage(msg); if (playlist.AllPlayed()) { playlist.ResetStatus(); } //Log.Debug("PlaylistPlayer: Play - {0}", item.FileName); bool playResult = false; if (_currentPlayList == PlayListType.PLAYLIST_MUSIC_VIDEO) { playResult = g_Player.PlayVideoStream(item.FileName, item.Description); } else if (item.Type == PlayListItem.PlayListItemType.AudioStream) // Internet Radio { playResult = g_Player.PlayAudioStream(item.FileName); } else { playResult = g_Player.Play(item.FileName); } if (!playResult) { // Count entries in current playlist // that couldn't be played _entriesNotFound++; Log.Error("PlaylistPlayer: *** unable to play - {0} - skipping track!", item.FileName); // do not try to play the next movie or internetstream in the list if (Util.Utils.IsVideo(item.FileName) || Util.Utils.IsLastFMStream(item.FileName)) { skipmissing = false; } else { skipmissing = true; } iSong++; } else { item.Played = true; skipmissing = false; if (Util.Utils.IsVideo(item.FileName) && setFullScreenVideo) { if (g_Player.HasVideo) { g_Player.ShowFullScreenWindow(); } } } } while (skipmissing); return(g_Player.Playing); }
/// <summary> /// Add or enque a song to the current playlist - call OnSongInserted() after this!!! /// </summary> /// <param name="song">the song to add</param> /// <returns>if the action was successful</returns> private bool AddSongToPlaylist(ref Song song) { PlayList playlist; if (PlaylistPlayer.CurrentPlaylistType == PlayListType.PLAYLIST_MUSIC_TEMP) { playlist = PlaylistPlayer.GetPlaylist(PlayListType.PLAYLIST_MUSIC_TEMP); } else { playlist = PlaylistPlayer.GetPlaylist(PlayListType.PLAYLIST_MUSIC); } if (playlist == null) { return false; } //add to playlist PlayListItem playlistItem = new PlayListItem(); playlistItem.Type = PlayListItem.PlayListItemType.Audio; StringBuilder sb = new StringBuilder(); playlistItem.FileName = song.FileName; sb.Append(song.Track); sb.Append(". "); sb.Append(song.Artist); sb.Append(" - "); sb.Append(song.Title); playlistItem.Description = sb.ToString(); playlistItem.Duration = song.Duration; playlistItem.MusicTag = song.ToMusicTag(); playlist.Add(playlistItem); OnSongInserted(); return true; }
public PlayListItem ToPlayListItem() { PlayListItem pli = new PlayListItem(); pli.Type = PlayListItem.PlayListItemType.Audio; pli.FileName = this.FileName; pli.Description = this.Title; pli.Duration = this.Duration; MusicTag tag = this.ToMusicTag(); pli.MusicTag = tag; return pli; }