private void SetMovieIDProperty(string file, bool isFolder) { VirtualDirectory vDir = new VirtualDirectory(); int pin = 0; vDir.LoadSettings("movies"); if (isFolder && !vDir.IsProtectedShare(file, out pin)) { ArrayList mList = new ArrayList(); VideoDatabase.GetMoviesByPath(file, ref mList); if (mList.Count > 0) { Random rnd = new Random(); int r = rnd.Next(mList.Count); IMDBMovie movieDetails = (IMDBMovie)mList[r]; mList.Clear(); VideoDatabase.GetFilesForMovie(movieDetails.ID, ref mList); if (mList.Count > 0 && System.IO.File.Exists(mList[0].ToString())) { GUIPropertyManager.SetProperty("#movieid", movieDetails.ID.ToString()); } else { GUIPropertyManager.SetProperty("#movieid", "-1"); } } else { GUIPropertyManager.SetProperty("#movieid", "-1"); } } else if (isFolder && vDir.IsProtectedShare(file, out pin)) { GUIPropertyManager.SetProperty("#movieid", "-1"); } else { GUIPropertyManager.SetProperty("#movieid", ID.ToString()); } }
/// <summary> /// saves last active module. /// </summary> private void SaveLastActiveModule() { // persist the currently selected module to XML for later use. Log.Debug("Main: SaveLastActiveModule - enabled {0}", _showLastActiveModule); bool currentmodulefullscreen = Currentmodulefullscreen(); string currentmodulefullscreenstate = GUIPropertyManager.GetProperty("#currentmodulefullscreenstate"); string currentmoduleid = GUIPropertyManager.GetProperty("#currentmoduleid"); if (_showLastActiveModule && !Utils.IsGUISettingsWindow(GUIWindowManager.GetPreviousActiveWindow())) { using (Settings xmlreader = new MPSettings()) { if (currentmodulefullscreen) { currentmoduleid = Convert.ToString(GUIWindowManager.GetPreviousActiveWindow()); } if (!currentmodulefullscreen && currentmodulefullscreenstate == "True") { currentmodulefullscreen = true; } if (currentmoduleid.Length == 0) { currentmoduleid = "0"; } string section; switch (GUIWindowManager.ActiveWindow) { case (int)GUIWindow.Window.WINDOW_PICTURES: section = "pictures"; break; case (int)GUIWindow.Window.WINDOW_MUSIC: section = "music"; break; case (int)GUIWindow.Window.WINDOW_VIDEOS: section = "movies"; break; default: section = ""; break; } bool rememberLastFolder = xmlreader.GetValueAsBool(section, "rememberlastfolder", false); string lastFolder = xmlreader.GetValueAsString(section, "lastfolder", ""); var virtualDir = new VirtualDirectory(); virtualDir.LoadSettings(section); int pincode; bool lastFolderPinProtected = virtualDir.IsProtectedShare(lastFolder, out pincode); if (rememberLastFolder && lastFolderPinProtected) { lastFolder = "root"; xmlreader.SetValue(section, "lastfolder", lastFolder); Log.Debug("Main: reverting to root folder, pin protected folder was open, SaveLastFolder {0}", lastFolder); } xmlreader.SetValue("general", "lastactivemodule", currentmoduleid); xmlreader.SetValueAsBool("general", "lastactivemodulefullscreen", currentmodulefullscreen); Log.Debug("Main: SaveLastActiveModule - module {0}", currentmoduleid); Log.Debug("Main: SaveLastActiveModule - fullscreen {0}", currentmodulefullscreen); } } }
// Check if item is pin protected and if it exists within unlocked shares // Returns true if item is valid or if item is not within protected shares private bool IsItemPinProtected(GUIListItem item, VirtualDirectory vDir) { string directory = Path.GetDirectoryName(item.Path); // item path if (directory != null) { //VirtualDirectory vDir = new VirtualDirectory(); //// Get protected share paths for videos //vDir.LoadSettings("movies"); // Check if item belongs to protected shares int pincode = 0; bool folderPinProtected = vDir.IsProtectedShare(directory, out pincode); bool success = false; // User unlocked share/shares with PIN and item is within protected shares if (folderPinProtected && _ageConfirmed) { // Iterate unlocked shares against current item path foreach (string share in _currentProtectedShare) { if (!directory.ToUpperInvariant().Contains(share.ToUpperInvariant())) { continue; } success = true; break; } // current item is not within unlocked shares, // don't show item and go to the next item if (!success) { return false; } return true; } // Nothing unlocked and item belongs to protected shares, // don't show item and go to the next item if (folderPinProtected && !_ageConfirmed) { return false; } } // Item is not inside protected shares, show it return true; }
private IMDBMovie GetRandomMovie(ArrayList mList) { try { ArrayList movies = new ArrayList(mList); ArrayList pShares = new ArrayList(); foreach (string p in _protectedShares) { char[] splitter = { '|' }; string[] pin = p.Split(splitter); // Only add shares which are unlocked if (Convert.ToInt32(pin[0]) == _currentPin) { pShares.Add(pin[1]); } } // Do not show fanart for unlocked protected movies foreach (IMDBMovie m in movies) { ArrayList files = new ArrayList(); VideoDatabase.GetFilesForMovie(m.ID, ref files); if (string.IsNullOrEmpty(files[0].ToString())) { continue; } string directory = Path.GetDirectoryName(files[0].ToString()); if (string.IsNullOrEmpty(directory)) continue; VirtualDirectory vDir = new VirtualDirectory(); vDir.LoadSettings("movies"); int pincode = 0; bool folderPinProtected = vDir.IsProtectedShare(directory, out pincode); // No PIN entered, remove all protected conetnt if (folderPinProtected && !_ageConfirmed) { mList.Remove(m); continue; } // PIN entered, check for corresponding shares if (folderPinProtected && _ageConfirmed) { bool found = false; foreach (string share in pShares) { if (directory.ToLowerInvariant().Contains(share.ToLowerInvariant())) { // Movie belongs to unlocked share found = true; break; } } // If movie is not from unlocked shares, don't show fanart if (!found) { mList.Remove(m); } } } if (mList.Count > 0) { Random rnd = new Random(); int r = rnd.Next(mList.Count); IMDBMovie movieDetails = (IMDBMovie)mList[r]; return movieDetails; } else { return null; } } catch (Exception) { return null; } }
protected override void LoadSettings() { base.LoadSettings(); using (Profile.Settings xmlreader = new Profile.MPSettings()) { currentLayout = (Layout)xmlreader.GetValueAsInt(SerializeName, "layout", (int)Layout.List); m_bSortAscending = xmlreader.GetValueAsBool(SerializeName, "sortasc", true); VideoState.StartWindow = xmlreader.GetValueAsInt("movies", "startWindow", GetID); VideoState.View = xmlreader.GetValueAsString("movies", "startview", "369"); // Prevent unaccesible My Videos from corrupted config if (!IsVideoWindow(VideoState.StartWindow)) { VideoState.StartWindow = GetID; VideoState.View = "369"; } _isFuzzyMatching = xmlreader.GetValueAsBool("movies", "fuzzyMatching", false); _scanSkipExisting = xmlreader.GetValueAsBool("moviedatabase", "scanskipexisting", false); _getActors = xmlreader.GetValueAsBool("moviedatabase", "getactors", true); _markWatchedFiles = xmlreader.GetValueAsBool("movies", "markwatched", true); _eachFolderIsMovie = xmlreader.GetValueAsBool("movies", "eachFolderIsMovie", false); _fileMenuEnabled = xmlreader.GetValueAsBool("filemenu", "enabled", true); _fileMenuPinCode = Util.Utils.DecryptPin(xmlreader.GetValueAsString("filemenu", "pincode", string.Empty)); _howToPlayAll = xmlreader.GetValueAsInt("movies", "playallinfolder", 3); _virtualDirectory = VirtualDirectories.Instance.Movies; if (_virtualStartDirectory == string.Empty) { if (_virtualDirectory.DefaultShare != null) { if (_virtualDirectory.DefaultShare.IsFtpShare) { //remote:hostname?port?login?password?folder _currentFolder = _virtualDirectory.GetShareRemoteURL(_virtualDirectory.DefaultShare); _virtualStartDirectory = _currentFolder; } else { _currentFolder = _virtualDirectory.DefaultShare.Path; _virtualStartDirectory = _virtualDirectory.DefaultShare.Path; } } } _askBeforePlayingDVDImage = xmlreader.GetValueAsBool("daemon", "askbeforeplaying", false); if (xmlreader.GetValueAsBool("movies", "rememberlastfolder", false)) { string lastFolder = xmlreader.GetValueAsString("movies", "lastfolder", _currentFolder); if (VirtualDirectory.IsImageFile(Path.GetExtension(lastFolder))) { lastFolder = "root"; } if (lastFolder != "root") { _currentFolder = lastFolder; } } _switchRemovableDrives = xmlreader.GetValueAsBool("movies", "SwitchRemovableDrives", true); } if (_currentFolder.Length > 0 && _currentFolder == _virtualStartDirectory) { VirtualDirectory vDir = new VirtualDirectory(); vDir.LoadSettings("movies"); int pincode = 0; bool FolderPinProtected = vDir.IsProtectedShare(_currentFolder, out pincode); if (FolderPinProtected) { _currentFolder = string.Empty; } } if (_currentFolder.Length > 0 && !_virtualDirectory.IsRemote(_currentFolder)) { DirectoryInfo dirInfo = new DirectoryInfo(_currentFolder); while (dirInfo.Parent != null) { string dirName = dirInfo.Name; dirInfo = dirInfo.Parent; string currentParentFolder = @dirInfo.FullName; _history.Set(dirName, currentParentFolder); } } }
/// <summary> /// saves last active module. /// </summary> private void SaveLastActiveModule() { // persist the currently selected module to XML for later use. Log.Debug("Main: SaveLastActiveModule - enabled {0}", showLastActiveModule); bool currentmodulefullscreen = Currentmodulefullscreen(); string currentmodulefullscreenstate = GUIPropertyManager.GetProperty("#currentmodulefullscreenstate"); string currentmoduleid = GUIPropertyManager.GetProperty("#currentmoduleid"); if (showLastActiveModule && !Utils.IsGUISettingsWindow(GUIWindowManager.GetPreviousActiveWindow())) { using (Settings xmlreader = new MPSettings()) { // if MP was closed/hibernated by the use of remote control, we have to retrieve the fullscreen state in an alternative manner. //if currentmoduleid is TV fullscreen, then set currentmoduleid to tvhome. /*switch GUIWindowManager.ActiveWindow { case (int) WINDOW_FULLSCREEN_VIDEO: currentmoduleid = Convert.ToString( (int) GUIWindow.Window.WINDOW_TV); break; case (int) WINDOW_FULLSCREEN_VIDEO: currentmoduleid = Convert.ToString( (int) GUIWindow.Window.WINDOW_TV); break; } */ if (currentmodulefullscreen) { currentmoduleid = Convert.ToString(GUIWindowManager.GetPreviousActiveWindow()); } if (!currentmodulefullscreen && currentmodulefullscreenstate == "True") { currentmodulefullscreen = true; } if (currentmoduleid.Length == 0) { currentmoduleid = "0"; } string section; switch (GUIWindowManager.ActiveWindow) { case (int)GUIWindow.Window.WINDOW_PICTURES: { section = "pictures"; break; } case (int)GUIWindow.Window.WINDOW_MUSIC: { section = "music"; break; } case (int)GUIWindow.Window.WINDOW_VIDEOS: { section = "movies"; break; } default: { section = ""; break; } } bool rememberLastFolder = xmlreader.GetValueAsBool(section, "rememberlastfolder", false); string lastFolder = xmlreader.GetValueAsString(section, "lastfolder", ""); VirtualDirectory VDir = new VirtualDirectory(); VDir.LoadSettings(section); int pincode = 0; bool lastFolderPinProtected = VDir.IsProtectedShare(lastFolder, out pincode); if (rememberLastFolder && lastFolderPinProtected) { lastFolder = "root"; xmlreader.SetValue(section, "lastfolder", lastFolder); Log.Debug("Main: reverting to root folder, pin protected folder was open, SaveLastFolder {0}", lastFolder); } xmlreader.SetValue("general", "lastactivemodule", currentmoduleid); xmlreader.SetValueAsBool("general", "lastactivemodulefullscreen", currentmodulefullscreen); Log.Debug("Main: SaveLastActiveModule - module {0}", currentmoduleid); Log.Debug("Main: SaveLastActiveModule - fullscreen {0}", currentmodulefullscreen); } } }
/// <summary> /// Use only in share view /// </summary> /// <param name="item"></param> public static void SetMovieData(GUIListItem item) { IMDBMovie info = new IMDBMovie(); if (item == null) { return; } try { string path = string.Empty; string fileName = string.Empty; if (Util.Utils.IsVideo(item.Path)) { Util.Utils.Split(item.Path, out path, out fileName); } else { path = item.Path; } if (item.Path != ".." && System.IO.File.Exists(item.Path + @"\VIDEO_TS\VIDEO_TS.IFO")) { fileName = item.Path + @"\VIDEO_TS\VIDEO_TS.IFO"; } else if (item.Path != ".." && System.IO.File.Exists(item.Path + @"\BDMV\index.bdmv")) { fileName = item.Path + @"\BDMV\index.bdmv"; } else { fileName = item.Path; } // Set VideoFilesMediaInfo mInfo = new VideoFilesMediaInfo(); if (path == ".." || string.IsNullOrEmpty(path) || (!Directory.Exists(path) && !Util.Utils.IsVideo(fileName))) { info.MediaInfo = mInfo; item.AlbumInfoTag = info; return; } if (Directory.Exists(path) && !Util.Utils.IsVideo(fileName)) { int rndMovieId = -1; VirtualDirectory vDir = new VirtualDirectory(); string pin = string.Empty; vDir.LoadSettings("movies"); if (!vDir.IsProtectedShare(path, out pin)) { ArrayList mList = new ArrayList(); VideoDatabase.GetRandomMoviesByPath(path, ref mList, 1); if (mList.Count > 0) { IMDBMovie movieDetails = (IMDBMovie)mList[0]; mList.Clear(); rndMovieId = movieDetails.ID; if (Util.Utils.IsFolderDedicatedMovieFolder(path)) { VideoDatabase.GetMovieInfoById(rndMovieId,ref info); int percent = 0; int watchedCount = 0; VideoDatabase.GetmovieWatchedStatus(rndMovieId, out percent, out watchedCount); info.WatchedPercent = percent; info.WatchedCount = watchedCount; ArrayList fList = new ArrayList(); VideoDatabase.GetFilesForMovie(rndMovieId,ref fList); if (fList.Count > 0) { VideoDatabase.GetVideoFilesMediaInfo((string)fList[0], ref mInfo, false); info.VideoFileName = (string)fList[0]; } } } else { // User fanart (only for videos which do not have movie info in db -> not scanned) try { GetUserFanart(item, ref info); } catch (Exception ex) { Log.Error("IMDBMovie Set user fanart file property error: {0}", ex.Message); } } } info.ID = rndMovieId; info.MediaInfo = mInfo; item.AlbumInfoTag = info; return; } try { VideoDatabase.GetMovieInfo(fileName, ref info); // Get recording/nfo xml if (info.IsEmpty) { FetchMatroskaInfo(fileName, false, ref info); if (info.IsEmpty) { FetchMovieNfo(path, fileName, ref info); } } VideoDatabase.GetVideoFilesMediaInfo(fileName, ref mInfo, false); info.VideoFileName = fileName; if (string.IsNullOrEmpty(info.VideoFilePath) || info.VideoFilePath == Strings.Unknown) { string tmpFile = string.Empty; Util.Utils.Split(fileName, out path, out tmpFile); info.VideoFilePath = path; } info.Path = path; info.MediaInfo = mInfo; if (info.ID > 0) { info.Duration = VideoDatabase.GetMovieDuration(info.ID); } else { ArrayList files = new ArrayList(); VideoDatabase.GetFilesForMovie(VideoDatabase.GetMovieId(info.VideoFileName), ref files); foreach (string file in files) { info.Duration += VideoDatabase.GetVideoDuration(VideoDatabase.GetFileId(file)); } } int percent = 0; int watchedCount = 0; VideoDatabase.GetmovieWatchedStatus(VideoDatabase.GetMovieId(fileName), out percent, out watchedCount); info.WatchedPercent = percent; info.WatchedCount = watchedCount; // User fanart (only for videos which do not have movie info in db -> not scanned) try { if (info.ID < 1) { GetUserFanart(item, ref info); } } catch (ThreadAbortException) { Log.Debug("IMDBMovie.ThreadAbortException SetMovieData (GetMovieInfo) error."); } catch (Exception ex) { Log.Error("IMDBMovie Set user fanart file property error: {0}", ex.Message); } item.AlbumInfoTag = info; } catch (ThreadAbortException) { Log.Debug("IMDBMovie.ThreadAbortException SetMovieData (GetMovieInfo) error."); } catch (Exception ex) { Log.Error("IMDBMovie SetMovieData (GetMovieInfo) error: {0}", ex.Message); item.AlbumInfoTag = info; } } catch (ThreadAbortException) { Log.Debug("IMDBMovie.ThreadAbortException SetMovieData error."); } catch (Exception ex) { Log.Error("IMDBMovie SetMovieData error: {0}", ex.Message); item.AlbumInfoTag = info; } }
// Check if item is pin protected and if it exists within unlocked shares // Returns true if item is valid or if item is not within protected shares private bool CheckItem(GUIListItem item) { string directory = Path.GetDirectoryName(item.Path); // item path VirtualDirectory vDir = new VirtualDirectory(); // Get protected share paths for videos vDir.LoadSettings("movies"); // Check if item belongs to protected shares int pincode = 0; bool folderPinProtected = vDir.IsProtectedShare(directory, out pincode); bool success = false; // User unlocked share/shares with PIN and item is within protected shares if (folderPinProtected && ageConfirmed) { // Iterate unlocked shares against current item path foreach (string share in currentProtectedShare) { if (!directory.ToLower().Contains(share.ToLower())) { continue; } else // item belongs to unlocked shares and will be displayed { success = true; break; } } // current item is not within unlocked shares, // don't show item and go to the next item if (!success) { return false; } else // current item is within unlocked shares, show it { return true; } } // Nothing unlocked and item belongs to protected shares, // don't show item and go to the next item else if (folderPinProtected && !ageConfirmed) { return false; } // Item is not inside protected shares, show it return true; }
/// <summary> /// Use only in share view /// </summary> /// <param name="item"></param> public static void SetMovieData(GUIListItem item) { IMDBMovie info = new IMDBMovie(); if (item == null) { return; } try { string path = string.Empty; string fileName = string.Empty; if (Util.Utils.IsVideo(item.Path)) { Util.Utils.Split(item.Path, out path, out fileName); } else { path = item.Path; } if (item.Path != ".." && System.IO.File.Exists(item.Path + @"\VIDEO_TS\VIDEO_TS.IFO")) { fileName = item.Path + @"\VIDEO_TS\VIDEO_TS.IFO"; } else if (item.Path != ".." && System.IO.File.Exists(item.Path + @"\BDMV\index.bdmv")) { fileName = item.Path + @"\BDMV\index.bdmv"; } else { fileName = item.Path; } // Set VideoFilesMediaInfo mInfo = new VideoFilesMediaInfo(); if (path == ".." || string.IsNullOrEmpty(path) || (!Directory.Exists(path) && !Util.Utils.IsVideo(fileName))) { info.MediaInfo = mInfo; item.AlbumInfoTag = info; return; } if (Directory.Exists(path) && !Util.Utils.IsVideo(fileName)) { int rndMovieId = -1; VirtualDirectory vDir = new VirtualDirectory(); int pin = 0; vDir.LoadSettings("movies"); if (!vDir.IsProtectedShare(path, out pin)) { ArrayList mList = new ArrayList(); VideoDatabase.GetRandomMoviesByPath(path, ref mList, 1); if (mList.Count > 0) { IMDBMovie movieDetails = (IMDBMovie)mList[0]; mList.Clear(); rndMovieId = movieDetails.ID; } } info.ID = rndMovieId; info.MediaInfo = mInfo; item.AlbumInfoTag = info; return; } try { VideoDatabase.GetMovieInfo(fileName, ref info); // Get recording/nfo xml if (info.IsEmpty) { FetchMatroskaInfo(fileName, false, ref info); if (info.IsEmpty) { FetchMovieNfo(path, fileName, ref info); } } VideoDatabase.GetVideoFilesMediaInfo(fileName, ref mInfo, false); info.VideoFileName = fileName; if (string.IsNullOrEmpty(info.VideoFilePath) || info.VideoFilePath == Strings.Unknown) { string tmpFile = string.Empty; Util.Utils.Split(fileName, out path, out tmpFile); info.VideoFilePath = path; } info.Path = path; info.MediaInfo = mInfo; info.Duration = VideoDatabase.GetMovieDuration(info.ID); int percent = 0; int watchedCount = 0; VideoDatabase.GetmovieWatchedStatus(VideoDatabase.GetMovieId(fileName), out percent, out watchedCount); info.WatchedPercent = percent; info.WatchedCount = watchedCount; item.AlbumInfoTag = info; } catch (Exception ex) { Log.Error("IMDBMovie SetMovieData (GetMovieInfo) error: {0}", ex.Message); item.AlbumInfoTag = info; } } catch (Exception ex) { Log.Error("IMDBMovie SetMovieData error: {0}", ex.Message); item.AlbumInfoTag = info; } }