Пример #1
0
        private int GetTimeStopped(string fileName)
        {
            IMDBMovie movieDetails = new IMDBMovie();

            VideoDatabase.GetMovieInfo(fileName, ref movieDetails);
            int idFile  = VideoDatabase.GetFileId(fileName);
            int idMovie = VideoDatabase.GetMovieId(fileName);

            byte[] resumeData = null;

            if ((idMovie >= 0) && (idFile >= 0))
            {
                return(VideoDatabase.GetMovieStopTimeAndResumeData(idFile, out resumeData));
            }

            return(0);
        }
Пример #2
0
        protected virtual void SetLabels()
        {
            bool isShareView = false;

            if (GUIWindowManager.ActiveWindow == (int)Window.WINDOW_VIDEOS)
            {
                isShareView = true;
            }

            bool _stackedFolder = true;

            if (isShareView)
            {
                _currentFolder = GUIVideoFiles.GetCurrentFolder;
                object o;
                MediaPortal.Database.FolderSettings.GetFolderSetting(_currentFolder, "VideoFiles", typeof(GUIVideoFiles.MapSettings), out o);

                if (o != null)
                {
                    GUIVideoFiles.MapSettings mapSettings = o as GUIVideoFiles.MapSettings;

                    _stackedFolder = mapSettings.Stack;
                }
            }
            else
            {
                _currentFolder = GUIVideoTitle.GetCurrentView;
                object o;
                // MediaPortal.Database.FolderSettings.GetFolderSetting(_currentFolder, "VideoViews", typeof(GUIVideoTitle.MapSettings), out o);
                MediaPortal.Database.FolderSettings.GetViewSetting(_currentFolder, "VideoViews", typeof(GUIVideoTitle.MapSettings), out o);
                if (o != null)
                {
                    GUIVideoTitle.MapSettings mapSettings = o as GUIVideoTitle.MapSettings;
                    if (mapSettings != null)
                    {
                        CurrentSortMethod = (VideoSort.SortMethod)mapSettings.SortBy;
                        CurrentSortAsc    = mapSettings.SortAscending;
                    }
                }
            }

            for (int i = 0; i < facadeLayout.Count; ++i)
            {
                GUIListItem item  = facadeLayout[i];
                IMDBMovie   movie = item.AlbumInfoTag as IMDBMovie;

                if (movie != null && movie.ID > 0 && !isShareView &&
                    (!item.IsFolder || CurrentSortMethod == VideoSort.SortMethod.NameAll))
                {
                    if (CurrentSortMethod == VideoSort.SortMethod.Name || CurrentSortMethod == VideoSort.SortMethod.NameAll ||
                        CurrentSortMethod == VideoSort.SortMethod.Name_With_Duration)
                    {
                        if (item.IsFolder)
                        {
                            item.Label2 = string.Empty;
                        }
                        else
                        {
                            // Show real movie duration (from video file)
                            int mDuration = VideoDatabase.GetMovieDuration(movie.ID);

                            if (mDuration <= 0)
                            {
                                ArrayList mFiles = new ArrayList();
                                VideoDatabase.GetFilesForMovie(movie.ID, ref mFiles);
                                mDuration = GUIVideoFiles.MovieDuration(mFiles, true);

                                if (mDuration <= 0)
                                {
                                    item.Label2 = Util.Utils.SecondsToHMString(movie.RunTime * 60);
                                }
                                else
                                {
                                    item.Label2 = Util.Utils.SecondsToHMString(mDuration);
                                }
                            }
                            else
                            {
                                item.Label2 = Util.Utils.SecondsToHMString(mDuration);
                            }
                        }
                    }
                    else if (CurrentSortMethod == VideoSort.SortMethod.Year)
                    {
                        item.Label2 = movie.Year.ToString();
                    }
                    else if (CurrentSortMethod == VideoSort.SortMethod.Rating)
                    {
                        item.Label2 = movie.Rating.ToString();
                    }
                    else if (CurrentSortMethod == VideoSort.SortMethod.Label)
                    {
                        item.Label2 = movie.DVDLabel.ToString();
                    }
                    else if (CurrentSortMethod == VideoSort.SortMethod.Size)
                    {
                        if (item.FileInfo != null)
                        {
                            item.Label2 = Util.Utils.GetSize(item.FileInfo.Length);
                        }
                        else
                        {
                            item.Label2 = Util.Utils.SecondsToHMString(movie.RunTime * 60);
                        }
                    }
                    else if (!isShareView && CurrentSortMethod == VideoSort.SortMethod.Date)
                    {
                        string strDate = string.Empty;

                        if (!item.IsFolder && movie != null)
                        {
                            if (movie.DateAdded != "0001-01-01 00:00:00")
                            {
                                strDate = movie.DateAdded;
                            }
                            else
                            {
                                strDate = movie.LastUpdate;
                            }
                        }
                        item.Label2 = strDate;
                    }
                }
                else
                {
                    string strSize1 = string.Empty, strDate = string.Empty;

                    if (item.FileInfo != null && !item.IsFolder)
                    {
                        strSize1 = Util.Utils.GetSize(item.FileInfo.Length);
                    }

                    if (item.FileInfo != null && !item.IsFolder)
                    {
                        if (CurrentSortMethod == VideoSort.SortMethod.Modified)
                        {
                            strDate = item.FileInfo.ModificationTime.ToShortDateString() + " " +
                                      item.FileInfo.ModificationTime.ToString("t", CultureInfo.CurrentCulture.DateTimeFormat);
                        }
                        else
                        {
                            strDate = item.FileInfo.CreationTime.ToShortDateString() + " " +
                                      item.FileInfo.CreationTime.ToString("t", CultureInfo.CurrentCulture.DateTimeFormat);
                        }
                    }

                    if (CurrentSortMethod == VideoSort.SortMethod.Name || CurrentSortMethod == VideoSort.SortMethod.NameAll)
                    {
                        if (item.IsFolder)
                        {
                            item.Label2 = string.Empty;
                        }
                        else
                        {
                            item.Label2 = strSize1;
                        }
                    }

                    if (CurrentSortMethod == VideoSort.SortMethod.Name_With_Duration && !item.IsFolder && item.Label != "..")
                    {
                        if (_stackedFolder)
                        {
                            int newMovieId = VideoDatabase.GetMovieId(item.Path);
                            item.Duration = VideoDatabase.GetMovieDuration(newMovieId);
                        }
                        else
                        {
                            int fileID = VideoDatabase.GetFileId(item.Path);
                            item.Duration = VideoDatabase.GetVideoDuration(fileID);
                        }

                        if (item.Duration > 0)
                        {
                            item.Label2 = Util.Utils.SecondsToShortHMSString(item.Duration);
                        }
                        else
                        {
                            item.Label2 = string.Empty;
                        }
                    }
                    else if (CurrentSortMethod == VideoSort.SortMethod.Created || CurrentSortMethod == VideoSort.SortMethod.Date || CurrentSortMethod == VideoSort.SortMethod.Modified)
                    {
                        if (!isShareView && CurrentSortMethod == VideoSort.SortMethod.Date && string.IsNullOrWhiteSpace(strDate))
                        {
                            if (!item.IsFolder && movie != null)
                            {
                                if (movie.DateAdded != "0001-01-01 00:00:00")
                                {
                                    strDate = movie.DateAdded;
                                }
                                else
                                {
                                    strDate = movie.LastUpdate;
                                }
                            }
                        }
                        item.Label2 = strDate;
                    }
                    else
                    {
                        if (item.IsFolder)
                        {
                            item.Label2 = string.Empty;
                        }
                        else
                        {
                            item.Label2 = strSize1;
                        }
                    }
                }
            }
        }
        public bool OnPlayDVD(String drive, int parentId)
        {
            Log.Info("SelectDVDHandler: OnPlayDVD() playing DVD {0}", drive);
            if (g_Player.Playing && g_Player.IsDVD)
            {
                if (g_Player.CurrentFile.Equals(drive + @"\VIDEO_TS\VIDEO_TS.IFO"))
                {
                    return(true);
                }
            }

            if (Util.Utils.getDriveType(drive) == 5) //cd or dvd drive
            {
                string driverLetter = drive.Substring(0, 1);
                string fileName     = String.Format(@"{0}:\VIDEO_TS\VIDEO_TS.IFO", driverLetter);
                if (!VirtualDirectories.Instance.Movies.RequestPin(fileName))
                {
                    return(false);
                }
                if (File.Exists(fileName))
                {
                    IMDBMovie movieDetails = new IMDBMovie();
                    VideoDatabase.GetMovieInfo(fileName, ref movieDetails);
                    int    idFile           = VideoDatabase.GetFileId(fileName);
                    int    idMovie          = VideoDatabase.GetMovieId(fileName);
                    int    timeMovieStopped = 0;
                    byte[] resumeData       = null;
                    if ((idMovie >= 0) && (idFile >= 0))
                    {
                        timeMovieStopped = VideoDatabase.GetMovieStopTimeAndResumeData(idFile, out resumeData);
                        //Log.Info("GUIVideoFiles: OnPlayBackStopped for DVD - idFile={0} timeMovieStopped={1} resumeData={2}", idFile, timeMovieStopped, resumeData);
                        if (timeMovieStopped > 0)
                        {
                            string title = Path.GetFileName(fileName);
                            VideoDatabase.GetMovieInfoById(idMovie, ref movieDetails);
                            if (movieDetails.Title != string.Empty)
                            {
                                title = movieDetails.Title;
                            }

                            GUIResumeDialog.Result result =
                                GUIResumeDialog.ShowResumeDialog(title, timeMovieStopped,
                                                                 GUIResumeDialog.MediaType.DVD);

                            if (result == GUIResumeDialog.Result.Abort)
                            {
                                return(false);
                            }

                            if (result == GUIResumeDialog.Result.PlayFromBeginning)
                            {
                                timeMovieStopped = 0;
                            }
                        }
                    }

                    if (g_Player.Playing)
                    {
                        g_Player.Stop();
                    }

                    g_Player.PlayDVD(drive + @"\VIDEO_TS\VIDEO_TS.IFO");
                    g_Player.ShowFullScreenWindow();
                    if (g_Player.Playing && timeMovieStopped > 0)
                    {
                        if (g_Player.IsDVD)
                        {
                            g_Player.Player.SetResumeState(resumeData);
                        }
                        else
                        {
                            Log.Debug("SelectDVDHandler.OnPlayDVD - skipping");
                            g_Player.SeekAbsolute(timeMovieStopped);
                        }
                    }
                    return(true);
                }
            }
            //no disc in drive...
            GUIDialogOK dlgOk = (GUIDialogOK)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_OK);

            dlgOk.SetHeading(3);   //my videos
            Log.Error("SelectDVDHandler: OnPlayDVD() Plz Insert Disk (ShowSelectDriveDialog)");
            dlgOk.SetLine(1, 219); //no disc
            dlgOk.DoModal(parentId);
            return(false);
        }
Пример #4
0
        // Image play method
        public bool OnPlayBD(String drive, int parentId)
        {
            Log.Info("SelectBDHandler: OnPlayBD() playing BD {0}", drive);

            string currentFile = g_Player.CurrentFile;

            if (g_Player.Playing && Util.Utils.IsISOImage(currentFile) && IsBDPlayList(ref currentFile))
            //if (g_Player.Playing && IsBDPlayList(ref currentFile))
            {
                return(true);
            }

            if (Util.Utils.getDriveType(drive) == 5) //cd or dvd drive
            {
                string driverLetter = drive.Substring(0, 1);
                string fileName     = String.Format(@"{0}:\BDMV\index.bdmv", driverLetter);

                if (File.Exists(fileName))
                {
                    IMDBMovie movieDetails = new IMDBMovie();

                    //string name = DaemonTools._MountedIsoFile;

                    int idFileImg  = VideoDatabase.GetFileId(fileName);
                    int idMovieImg = VideoDatabase.GetMovieId(fileName);

                    ///*
                    int    timeMovieStopped = 0;
                    byte[] resumeData       = null;

                    if ((idMovieImg >= 0) && (idFileImg >= 0))
                    {
                        timeMovieStopped = VideoDatabase.GetMovieStopTimeAndResumeData(idFileImg, out resumeData, g_Player.SetResumeBDTitleState);

                        if (timeMovieStopped > 0)
                        {
                            string title = Path.GetFileName(fileName);
                            VideoDatabase.GetMovieInfoById(idMovieImg, ref movieDetails);

                            if (movieDetails.Title != string.Empty)
                            {
                                title = movieDetails.Title;
                            }

                            GUIResumeDialog.Result result =
                                GUIResumeDialog.ShowResumeDialog(title, timeMovieStopped,
                                                                 GUIResumeDialog.MediaType.DVD);

                            if (result == GUIResumeDialog.Result.Abort)
                            {
                                return(false);
                            }

                            if (result == GUIResumeDialog.Result.PlayFromBeginning)
                            {
                                timeMovieStopped = 0;
                            }
                        }
                    }
                    //*/

                    if (g_Player.Playing)
                    {
                        g_Player.Stop();
                    }

                    g_Player.PlayBD(drive + @"\BDMV\index.bdmv");
                    g_Player.ShowFullScreenWindow();

                    ///*
                    if (g_Player.Playing && timeMovieStopped > 0)
                    {
                        g_Player.SeekAbsolute(timeMovieStopped);
                    }
                    //*/

                    return(true);
                }
            }
            //no disc in drive...
            GUIDialogOK dlgOk = (GUIDialogOK)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_OK);

            dlgOk.SetHeading(3);   //my videos
            Log.Error("SelectBDHandler: OnPlayBD() Plz Insert Disk");
            dlgOk.SetLine(1, 219); //no disc
            dlgOk.DoModal(parentId);
            return(true);
        }
        // Changed - cover for movies with the same name
        public void SetIMDBThumbs(IList items, bool markWatchedFiles, bool eachMovieHasDedicatedFolder)
        {
            GUIListItem pItem;
            IMDBMovie   movieDetails = new IMDBMovie();

            for (int x = 0; x < items.Count; x++)
            {
                string strThumb = string.Empty;
                pItem = (GUIListItem)items[x];
                string file = string.Empty;
                bool   isFolderPinProtected = (pItem.IsFolder && IsFolderPinProtected(pItem.Path));
                // Skip DVD backup folder
                if (pItem.IsFolder && !IsDvdDirectory(pItem.Path))
                {
                    if (pItem.Label == "..")
                    {
                        continue;
                    }

                    if (isFolderPinProtected)
                    {
                        // hide maybe rated content
                        Util.Utils.SetDefaultIcons(pItem);
                        continue;
                    }

                    // If this is enabled you'll see the thumb of the first movie in that dir - but if you put serveral movies into that dir you'll be irritated...
                    else
                    {
                        if (eachMovieHasDedicatedFolder)
                        {
                            file = GetFolderVideoFile(pItem.Path);
                        }
                    }
                }
                // If folder is DVD backup folder then take it for watched status
                else if (pItem.IsFolder && IsDvdDirectory(pItem.Path))
                {
                    file = GetFolderVideoFile(pItem.Path);
                }

                else if (!pItem.IsFolder ||
                         (pItem.IsFolder && VirtualDirectory.IsImageFile(Path.GetExtension(pItem.Path).ToLower())))
                {
                    file = pItem.Path;
                }

                else
                {
                    continue;
                }

                if (!string.IsNullOrEmpty(file))
                {
                    int  fileId       = VideoDatabase.GetFileId(file);
                    int  id           = VideoDatabase.GetMovieInfo(file, ref movieDetails);
                    bool foundWatched = false;
                    // Set thumb for movies
                    if (id >= 0)
                    {
                        if (Util.Utils.IsDVD(pItem.Path))
                        {
                            pItem.Label = String.Format("({0}:) {1}", pItem.Path.Substring(0, 1), movieDetails.Title);
                        }

                        string titleExt = movieDetails.Title + "{" + movieDetails.ID + "}";
                        strThumb = Util.Utils.GetCoverArt(Thumbs.MovieTitle, titleExt);
                    }
                    // Find watched status for videos
                    if (fileId >= 0 && markWatchedFiles)
                    {
                        if (VideoDatabase.GetmovieWatchedStatus(VideoDatabase.GetMovieId(file)))
                        {
                            foundWatched = true;
                        }
                    }
                    // Set watched status for list item
                    if (!pItem.IsFolder || (IsDvdDirectory(pItem.Path) && foundWatched))
                    {
                        pItem.IsPlayed = foundWatched;
                    }

                    if (!Util.Utils.FileExistsInCache(strThumb) || string.IsNullOrEmpty(strThumb))
                    {
                        strThumb = string.Format(@"{0}\{1}", Thumbs.MovieTitle,
                                                 Util.Utils.MakeFileName(Util.Utils.SplitFilename(Path.ChangeExtension(file, ".jpg"))));
                        if (!Util.Utils.FileExistsInCache(strThumb))
                        {
                            continue;
                        }
                    }

                    pItem.ThumbnailImage = strThumb;
                    pItem.IconImageBig   = strThumb;
                    pItem.IconImage      = strThumb;

                    strThumb = Util.Utils.ConvertToLargeCoverArt(strThumb);
                    if (Util.Utils.FileExistsInCache(strThumb))
                    {
                        pItem.ThumbnailImage = strThumb;
                    }
                } // <-- file == empty
            }     // of for (int x = 0; x < items.Count; ++x)
        }
        // Changed - covers and the same movie name
        protected override void OnClicked(int controlId, GUIControl control, Action.ActionType actionType)
        {
            base.OnClicked(controlId, control, actionType);
            if (control == btnRefresh)
            {
                // Check Internet connection
                if (!Win32API.IsConnectedToInternet())
                {
                    GUIDialogOK dlgOk = (GUIDialogOK)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_OK);
                    dlgOk.SetHeading(257);
                    dlgOk.SetLine(1, GUILocalizeStrings.Get(703));
                    dlgOk.DoModal(GUIWindowManager.ActiveWindow);
                    return;
                }
                string title = currentMovie.Title;
                int    id    = currentMovie.ID;
                string file  = currentMovie.Path + "\\" + currentMovie.File;
                // Delete covers
                FanArt.DeleteCovers(title, id);
                //Delete fanarts
                FanArt.DeleteFanarts(file, title);

                if (IMDBFetcher.RefreshIMDB(this, ref currentMovie, false, false, true))
                {
                    if ((imageSearchThread != null) && (imageSearchThread.IsAlive))
                    {
                        imageSearchThread.Abort();
                        imageSearchThread = null;
                    }

                    imdbCoverArtUrl = currentMovie.ThumbURL;
                    coverArtUrls    = new string[1];
                    coverArtUrls[0] = imdbCoverArtUrl;

                    ResetSpinControl();

                    Refresh(false);
                    Update();
                    // Start images search thread
                    SearchImages();
                }
                return;
            }

            if (control == spinImages)
            {
                int item = spinImages.Value - 1;
                if (item < 0 || item >= coverArtUrls.Length)
                {
                    item = 0;
                }
                if (currentMovie.ThumbURL == coverArtUrls[item])
                {
                    return;
                }

                currentMovie.ThumbURL = coverArtUrls[item];
                // Title suffix for problem with covers and movie with the same name
                string titleExt           = currentMovie.Title + "{" + currentMovie.ID + "}";
                string coverArtImage      = Util.Utils.GetCoverArtName(Thumbs.MovieTitle, titleExt);
                string largeCoverArtImage = Util.Utils.GetLargeCoverArtName(Thumbs.MovieTitle, titleExt);
                Util.Utils.FileDelete(coverArtImage);
                //
                // 07.11.2010 Deda: Cache entry Flag change for cover thumb file
                //
                Util.Utils.DoInsertNonExistingFileIntoCache(coverArtImage);
                //
                Util.Utils.FileDelete(largeCoverArtImage);
                Refresh(false);
                Update();
                int idMovie = currentMovie.ID;
                if (idMovie >= 0)
                {
                    VideoDatabase.SetThumbURL(idMovie, currentMovie.ThumbURL);
                }
                return;
            }

            if (control == btnCast)
            {
                viewmode = ViewMode.Cast;
                Update();
            }

            if (control == btnPlot)
            {
                viewmode = ViewMode.Plot;
                Update();
            }

            if (control == btnReview)
            {
                viewmode = ViewMode.Review;
                Update();
            }

            if (control == btnWatched)
            {
                if (currentMovie.Watched > 0)
                {
                    GUIPropertyManager.SetProperty("#iswatched", "no");
                    currentMovie.Watched = 0;
                    VideoDatabase.SetMovieWatchedStatus(currentMovie.ID, false);
                    ArrayList files = new ArrayList();
                    VideoDatabase.GetFiles(currentMovie.ID, ref files);

                    foreach (string file in files)
                    {
                        int fileId = VideoDatabase.GetFileId(file);
                        VideoDatabase.DeleteMovieStopTime(fileId);
                    }
                }
                else
                {
                    GUIPropertyManager.SetProperty("#iswatched", "yes");
                    currentMovie.Watched = 1;
                    VideoDatabase.SetMovieWatchedStatus(currentMovie.ID, true);
                }
                VideoDatabase.SetWatched(currentMovie);
            }

            if (control == spinDisc)
            {
                string selectedItem = spinDisc.GetLabel();
                int    idMovie      = currentMovie.ID;
                if (idMovie > 0)
                {
                    if (selectedItem != "HD" && selectedItem != "share")
                    {
                        VideoDatabase.SetDVDLabel(idMovie, selectedItem);
                    }
                    else
                    {
                        VideoDatabase.SetDVDLabel(idMovie, "HD");
                    }
                }
            }

            if (control == btnPlay)
            {
                int id = currentMovie.ID;

                ArrayList files = new ArrayList();
                VideoDatabase.GetFiles(id, ref files);

                if (files.Count > 1)
                {
                    GUIVideoFiles._stackedMovieFiles = files;
                    GUIVideoFiles._isStacked         = true;
                    GUIVideoFiles.MovieDuration(files);
                }

                GUIVideoFiles.PlayMovie(id, false);
                return;
            }
        }