private static void HandleWakeUpNas() { string hostName; bool isWakeOnLanEnabled; bool isAutoMacAddressEnabled; int intTimeOut; //Get settings from MediaPortal.xml using (Settings xmlreader = new MPSettings()) { hostName = xmlreader.GetValueAsString("nas", "hostname", ""); isWakeOnLanEnabled = xmlreader.GetValueAsBool("nas", "isWakeOnLanEnabled", false); isAutoMacAddressEnabled = xmlreader.GetValueAsBool("nas", "isAutoMacAddressEnabled", false); intTimeOut = xmlreader.GetValueAsInt("nas", "WOLTimeOut", 10); } if (isWakeOnLanEnabled) { WakeOnLanManager wakeOnLanManager = new WakeOnLanManager(); //isAutoMacAddressEnabled byte[] hwAddress; String macAddress; if (isAutoMacAddressEnabled) { IPAddress ipAddress = null; //Check if we already have a valid IP address stored in RemoteControl.HostName, otherwise try to resolve the IP address if (!IPAddress.TryParse(hostName, out ipAddress)) { //Get IP address of the NAS server try { IPAddress[] ips = Dns.GetHostAddresses(hostName); LogMyFilms.Debug("(HandleWakeUpNas) : WOL - GetHostAddresses({0}) returns:", hostName); foreach (IPAddress ip in ips) { LogMyFilms.Debug(" {0}", ip); } //Use first valid IP address ipAddress = ips[0]; } catch (Exception ex) { LogMyFilms.Error("(HandleWakeUpNas) : WOL - Failed GetHostAddress - {0}", ex.Message); } } //Check for valid IP address if (ipAddress != null) { //Update the MAC address if possible hwAddress = wakeOnLanManager.GetHardwareAddress(ipAddress); if (wakeOnLanManager.IsValidEthernetAddress(hwAddress)) { LogMyFilms.Debug("(HandleWakeUpNas) : WOL - Valid auto MAC address: {0:x}:{1:x}:{2:x}:{3:x}:{4:x}:{5:x}", hwAddress[0], hwAddress[1], hwAddress[2], hwAddress[3], hwAddress[4], hwAddress[5]); //Store MAC address macAddress = BitConverter.ToString(hwAddress).Replace("-", ":"); LogMyFilms.Debug("(HandleWakeUpNas) : WOL - Store MAC address: {0}", macAddress); using (Settings xmlwriter = new MPSettings()) { xmlwriter.SetValue("nas", "macAddress", macAddress); } } } } //Use stored MAC address using (MediaPortal.Profile.Settings xmlreader = new MPSettings()) { macAddress = xmlreader.GetValueAsString("nas", "macAddress", null); } LogMyFilms.Debug("(HandleWakeUpNas) : WOL - Use stored MAC address: {0}", macAddress); try { hwAddress = wakeOnLanManager.GetHwAddrBytes(macAddress); if (wakeOnLanManager.WakeupSystem(hwAddress, hostName, intTimeOut)) { LogMyFilms.Info("(HandleWakeUpNas) : WOL - The NAS server started successfully!"); } else { LogMyFilms.Error("(HandleWakeUpNas) : WOL - Failed to start the NAS server"); } } catch (Exception ex) { LogMyFilms.Error("(HandleWakeUpNas) : WOL - Failed to start the NAS server - {0}", ex.Message); } } }
public static void Launch_Movie(int selectItem, int getId, GUIAnimation mSearchAnimation, PlayerOption playeroption) //------------------------------------------------------------------------------------------- // Play Movie //------------------------------------------------------------------------------------------- { LogMyFilms.Debug("Launch_Movie() selectitem = '" + selectItem + "' - getID = '" + getId + "' - mSearchAnimation = '" + mSearchAnimation + "', playeroption = '" + Enum.GetName(typeof(PlayerOption), playeroption) + "'"); //enableNativeAutoplay(); // in case, other plugin disabled it - removed, as we now do start external player ourselves ... #region Version Select Dialog string filestorage = MyFilms.r[selectItem][MyFilms.conf.StrStorage].ToString(); if (Helper.FieldIsSet(MyFilms.conf.StrStorage)) { Regex filmver = new Regex(@"\[\[([^\#]*)##([^\]]*)\]\]"); MatchCollection filmverMatches = filmver.Matches(filestorage); if (filmverMatches.Count > 0) { GUIDialogMenu versionmenu = (GUIDialogMenu)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_MENU); versionmenu.Reset(); versionmenu.SetHeading("Select Version"); List<string> filestr = new List<string>(); for (int i = 0; i < filmverMatches.Count; i++) { versionmenu.Add(filmverMatches[i].Groups[2].Value); filestr.Add(filmverMatches[i].Groups[1].Value); } versionmenu.DoModal(getId); if (versionmenu.SelectedLabel == -1) return; filestorage = filestr[versionmenu.SelectedLabel]; } } #endregion #region handle WOL // Guzzi: Added WOL to start remote host before playing the files // Wake up the server, if required // HandleWakeUpNas(); // LogMyFilms.Info("Launched HandleWakeUpNas() to start movie'" + MyFilms.r[select_item][MyFilms.conf.StrSTitle.ToString()] + "'"); if (MyFilms.conf.StrCheckWOLenable) { WakeOnLanManager wakeOnLanManager = new WakeOnLanManager(); int wTimeout = MyFilms.conf.StrWOLtimeout; string UNCpath = filestorage; string NasServerName; string NasMACAddress; if (UNCpath.StartsWith("\\\\")) UNCpath = (UNCpath.Substring(2, UNCpath.Substring(2).IndexOf("\\") + 0)).ToLower(); if (UNCpath.Equals(MyFilms.conf.StrNasName1, StringComparison.InvariantCultureIgnoreCase) || UNCpath.Equals(MyFilms.conf.StrNasName2, StringComparison.InvariantCultureIgnoreCase) || UNCpath.Equals(MyFilms.conf.StrNasName3, StringComparison.InvariantCultureIgnoreCase)) { if (!WakeOnLanManager.Ping(UNCpath, wTimeout)) // Only if NAS server is not yet already running ! { if (MyFilms.conf.StrCheckWOLuserdialog) { if (!(GUIUtils.ShowYesNoDialog(GUILocalizeStrings.Get(107986), "Film : '" + MyFilms.r[selectItem][MyFilms.conf.StrSTitle] + "'" + "\n" + "Server : '" + UNCpath + "'" + "\n" + "Status : '" + GUILocalizeStrings.Get(10798742)))) // srv name + " - (offline) - start ?" return; } // Search the NAS where movie is located: if (UNCpath.Equals(MyFilms.conf.StrNasName1, StringComparison.InvariantCultureIgnoreCase) && (MyFilms.conf.StrNasMAC1.Length > 1)) { NasServerName = MyFilms.conf.StrNasName1; NasMACAddress = MyFilms.conf.StrNasMAC1; } else if (UNCpath.Equals(MyFilms.conf.StrNasName2, StringComparison.InvariantCultureIgnoreCase) && (MyFilms.conf.StrNasMAC2.Length > 1)) { NasServerName = MyFilms.conf.StrNasName2; NasMACAddress = MyFilms.conf.StrNasMAC2; } else if (UNCpath.Equals(MyFilms.conf.StrNasName3, StringComparison.InvariantCultureIgnoreCase) && (MyFilms.conf.StrNasMAC3.Length > 1)) { NasServerName = MyFilms.conf.StrNasName3; NasMACAddress = MyFilms.conf.StrNasMAC3; } else { NasServerName = String.Empty; NasMACAddress = String.Empty; } // Start NAS Server bool successFulStart = wakeOnLanManager.WakeupSystem(wakeOnLanManager.GetHwAddrBytes(NasMACAddress), NasServerName, wTimeout); if (MyFilms.conf.StrCheckWOLuserdialog) { if (successFulStart) GUIUtils.ShowNotifyDialog("'" + NasServerName + "' " + GUILocalizeStrings.Get(10798743)); //successfully started else GUIUtils.ShowOKDialog("'" + NasServerName + "' " + GUILocalizeStrings.Get(10798744)); // could not be started } } } else { GUIUtils.ShowOKDialog("", ("Server '" + UNCpath + "' " + GUILocalizeStrings.Get(10798746)), GUILocalizeStrings.Get(10798747), ""); // Automatic NAS start not possible ... return; } } #endregion SetProcessAnimationStatus(true, mSearchAnimation); #region Run externaly Program before Playing if defined in setup if (Helper.FieldIsSet(MyFilms.conf.CmdPar)) RunProgram(MyFilms.conf.CmdExe, MyFilms.r[MyFilms.conf.StrIndex][MyFilms.conf.CmdPar].ToString()); #endregion if (g_Player.Playing) g_Player.Stop(); // search all files var newItems = new ArrayList(); bool noResumeMovie = true; int movieIndex = 0; SearchAllFiles(MyFilms.r[selectItem], false, ref noResumeMovie, ref newItems, ref movieIndex, false, filestorage); // ToDo: add code to call population of trailers array and insert num of configured trailers into playlist // newItems.Insert(0, <trailers>); if (newItems.Count > 20) // Maximum 20 entries (limitation for MP dialogFileStacking) { GUIUtils.ShowOKDialog(MyFilms.r[selectItem][MyFilms.conf.StrSTitle].ToString(), "maximum 20 entries for the playlist", "", ""); LogMyFilms.Info("Too many entries found for movie '" + MyFilms.r[selectItem][MyFilms.conf.StrSTitle] + "', number of entries found = " + newItems.Count); return; } SetProcessAnimationStatus(false, mSearchAnimation); #region optional part selection dialog if (newItems.Count > 1) { if (noResumeMovie) { var dlg = (GUIDialogFileStacking)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_FILESTACKING); if (null != dlg) { dlg.SetNumberOfFiles(newItems.Count); dlg.DoModal(GUIWindowManager.ActiveWindow); int selectedFileIndex = dlg.SelectedFile; if (selectedFileIndex < 1) return; movieIndex = selectedFileIndex++; } } } #endregion if (newItems.Count > 0) { // Check, if the content returned is a BR playlist to supress internal player and dialogs bool isBRcontent = false; string mediapath = filestorage; if (newItems[0].ToString().ToLower().EndsWith("bdmv")) isBRcontent = true; bool isMpVideo = Utils.IsVideo(newItems[0].ToString()); LogMyFilms.Info("Launch_Movie() - starting playback: isBRcontent = '" + isBRcontent + "', isMpVideo = '" + isMpVideo + "', #items = '" + newItems.Count + "', first item = '" + newItems[0] + "'), filestorage = '" + filestorage + "'"); switch (playeroption) { case PlayerOption.External: try { LogMyFilms.Info("Launch_Movie() - start external player - path = '" + MyFilms.conf.ExternalPlayerPath + "', argument (filestorage) = '" + filestorage + "'"); LaunchExternalPlayer(filestorage); } catch (Exception ex) { LogMyFilms.Info("Launch_Movie() - calling external player ended with exception: " + ex); } break; case PlayerOption.BluRayPlayerLauncher: LogMyFilms.Info("Launch_Movie() - activate blurayplayer plugin"); GUIWindowManager.ActivateWindow((int)MyFilms.ExternalPluginWindows.BluRayPlayerLauncher); break; case PlayerOption.Internal: bool externalplayerextensiondetected = MyFilms.conf.ExternalPlayerExtensions.Split(new Char[] { ';' }, StringSplitOptions.RemoveEmptyEntries).Any(s => filestorage.ToLower().Contains(s.ToLower())); if (externalplayerextensiondetected && MyFilms.conf.ExternalPlayerPath.Length > 0) // check, if this is configured to use external player via Extensions in setup { #region external player playback (myfilms) LogMyFilms.Info("Launch_Movie() - extension for external player detected! - start external player - path = '" + MyFilms.conf.ExternalPlayerPath + "', argument (filestorage) = '" + filestorage + "'"); try { LaunchExternalPlayer(filestorage); } catch (Exception ex) { LogMyFilms.Info("Launch_Movie() - calling external player ended with exception: " + ex); } #endregion } else if (isMpVideo || (isBRcontent && Helper.IsBdHandlerAvailableAndEnabled)) // use internal playback, if suppoerted or BD handler is installed { #region internal playback LogMyFilms.Info("Launch_Movie() - start internal playback"); playlistPlayer.Reset(); playlistPlayer.CurrentPlaylistType = PlayListType.PLAYLIST_VIDEO_TEMP; PlayList playlist = playlistPlayer.GetPlaylist(PlayListType.PLAYLIST_VIDEO_TEMP); playlist.Clear(); foreach (object t in newItems) { var movieFileName = (string)t; // ToDo: Check, if that is necessary - from MP1.3.x to get e.g. Mediainfo registered AddFileToDatabase(movieFileName); var newitem = new PlayListItem(); newitem.FileName = movieFileName; newitem.Type = PlayListItem.PlayListItemType.Video; playlist.Add(newitem); } // ask for start movie Index MyFilms.conf.MyFilmsPlaybackActive = true; // Set Playbackhandler to active PlayMovieFromPlayList(noResumeMovie, movieIndex - 1); // play movie... #endregion } else if (isBRcontent && Helper.IsBluRayPlayerLauncherAvailableAndEnabled) // use BRplayerLauncher fir BR content, if installed { #region BluRayPlayerLauncher playback LogMyFilms.Info("Launch_Movie() - activate blurayplayer plugin"); GUIWindowManager.ActivateWindow((int)MyFilms.ExternalPluginWindows.BluRayPlayerLauncher); #endregion } else // playback not successful - notify user! { #region no playback option successful - notify user LogMyFilms.Info("Launch_Movie() - Internal Playback not successful - playback not started!"); GUIUtils.ShowOKDialog("No playback possible, please check your setup. \nInstall BR Player Launcher, BDhandler or external player for unsupported media."); #endregion } break; } } else { //if (first) //// ask for mounting file first time //{ var dlgYesNo = (GUIDialogYesNo)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_YES_NO); dlgYesNo.SetHeading(GUILocalizeStrings.Get(107986)); //my films dlgYesNo.SetLine(1, GUILocalizeStrings.Get(219)); //no disc if (Helper.FieldIsSet(MyFilms.conf.StrIdentItem)) if (MyFilms.conf.StrIdentLabel.Length > 0) dlgYesNo.SetLine(2, MyFilms.conf.StrIdentLabel + " = " + MyFilms.r[selectItem][MyFilms.conf.StrIdentItem]); //Label Identification for Media else dlgYesNo.SetLine(2, "'" + MyFilms.conf.StrIdentItem + "' = " + MyFilms.r[selectItem][MyFilms.conf.StrIdentItem]); //ANT Item Identification for Media else dlgYesNo.SetLine(2, "' disc n° = " + MyFilms.r[selectItem]["Number"]); //ANT Number for Identification Media dlgYesNo.DoModal(getId); if (dlgYesNo.IsConfirmed) Launch_Movie(selectItem, getId, mSearchAnimation, playeroption); //} else { GUIUtils.ShowOKDialog("", GUILocalizeStrings.Get(1036), MyFilms.r[selectItem][MyFilms.conf.StrSTitle].ToString(), ""); //no video found LogMyFilms.Info("File not found for movie '" + MyFilms.r[selectItem][MyFilms.conf.StrSTitle] + "'"); } } }