protected override void OnShowContextMenu()
        {
            var selectedItem = this.Facade.SelectedListItem;

            if (selectedItem == null)
            {
                return;
            }

            var selectedListItem = selectedItem.TVTag as TraktListItem;

            if (selectedListItem == null)
            {
                return;
            }

            var dlg = (IDialogbox)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_MENU);

            if (dlg == null)
            {
                return;
            }

            dlg.Reset();
            dlg.SetHeading(GUIUtils.PluginName());

            GUIListItem listItem = null;

            if (SelectedType == TraktItemType.movie || SelectedType == TraktItemType.episode)
            {
                // Mark As Watched
                if (!selectedListItem.IsWatched())
                {
                    listItem = new GUIListItem(Translation.MarkAsWatched);
                    dlg.Add(listItem);
                    listItem.ItemId = (int)ContextMenuItem.MarkAsWatched;
                }

                // Mark As UnWatched
                if (selectedListItem.IsWatched())
                {
                    listItem = new GUIListItem(Translation.MarkAsUnWatched);
                    dlg.Add(listItem);
                    listItem.ItemId = (int)ContextMenuItem.MarkAsUnWatched;
                }
            }

            if (SelectedType != TraktItemType.season && SelectedType != TraktItemType.person)
            {
                // Add/Remove Watchlist
                if (!selectedListItem.IsWatchlisted())
                {
                    listItem = new GUIListItem(Translation.AddToWatchList);
                    dlg.Add(listItem);
                    listItem.ItemId = (int)ContextMenuItem.AddToWatchList;
                }
                else
                {
                    listItem = new GUIListItem(Translation.RemoveFromWatchList);
                    dlg.Add(listItem);
                    listItem.ItemId = (int)ContextMenuItem.RemoveFromWatchList;
                }
            }

            // Add to Custom list
            listItem = new GUIListItem(Translation.AddToList);
            dlg.Add(listItem);
            listItem.ItemId = (int)ContextMenuItem.AddToList;

            // Remove from Custom list (only if current user is the active user)
            if (TraktSettings.Username == CurrentUser)
            {
                listItem = new GUIListItem(Translation.RemoveFromList);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.RemoveFromList;
            }

            if (SelectedType == TraktItemType.movie || SelectedType == TraktItemType.episode)
            {
                // Add to Collection
                // Don't allow if it will be removed again on next sync
                // movie could be part of a DVD collection
                if (!selectedListItem.IsCollected() && !TraktSettings.KeepTraktLibraryClean)
                {
                    listItem = new GUIListItem(Translation.AddToLibrary);
                    dlg.Add(listItem);
                    listItem.ItemId = (int)ContextMenuItem.AddToLibrary;
                }

                if (selectedListItem.IsCollected())
                {
                    listItem = new GUIListItem(Translation.RemoveFromLibrary);
                    dlg.Add(listItem);
                    listItem.ItemId = (int)ContextMenuItem.RemoveFromLibrary;
                }
            }

            // Related Movies/Shows
            if (SelectedType != TraktItemType.person)
            {
                listItem = new GUIListItem(SelectedType == TraktItemType.movie ? Translation.RelatedMovies : Translation.RelatedShows);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.Related;
            }

            if (SelectedType != TraktItemType.season && SelectedType != TraktItemType.person)
            {
                // Rate
                listItem = new GUIListItem(Translation.Rate + "...");
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.Rate;

                // Shouts
                listItem = new GUIListItem(Translation.Comments);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.Shouts;
            }

            // Cast and Crew
            if (SelectedType == TraktItemType.movie || SelectedType == TraktItemType.show)
            {
                listItem = new GUIListItem(Translation.Cast);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.Cast;

                listItem = new GUIListItem(Translation.Crew);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.Crew;
            }

            // Trailers
            if (SelectedType != TraktItemType.person)
            {
                if (TraktHelper.IsTrailersAvailableAndEnabled)
                {
                    listItem = new GUIListItem(Translation.Trailers);
                    dlg.Add(listItem);
                    listItem.ItemId = (int)ContextMenuItem.Trailers;
                }
            }

            // Search with mpNZB
            if (TraktHelper.IsMpNZBAvailableAndEnabled)
            {
                if ((selectedListItem.Movie != null && !selectedListItem.Movie.IsCollected()) || selectedListItem.Episode != null)
                {
                    listItem = new GUIListItem(Translation.SearchWithMpNZB);
                    dlg.Add(listItem);
                    listItem.ItemId = (int)ContextMenuItem.SearchWithMpNZB;
                }
            }

            // Search with MyTorrents
            if (TraktHelper.IsMyTorrentsAvailableAndEnabled)
            {
                if ((selectedListItem.Movie != null && !selectedListItem.Movie.IsCollected()) || selectedListItem.Episode != null)
                {
                    listItem = new GUIListItem(Translation.SearchTorrent);
                    dlg.Add(listItem);
                    listItem.ItemId = (int)ContextMenuItem.SearchTorrent;
                }
            }

            // Change Layout
            listItem = new GUIListItem(Translation.ChangeLayout);
            dlg.Add(listItem);
            listItem.ItemId = (int)ContextMenuItem.ChangeLayout;

            // Show Context Menu
            dlg.DoModal(GUIWindowManager.ActiveWindow);
            if (dlg.SelectedId < 0)
            {
                return;
            }

            switch (dlg.SelectedId)
            {
            case ((int)ContextMenuItem.MarkAsWatched):
                AddItemToWatchedHistory(selectedListItem);
                selectedItem.IsPlayed = true;
                OnItemSelected(selectedItem, Facade);
                if (SelectedType == TraktItemType.movie)
                {
                    (Facade.SelectedListItem as GUICustomListItem).Images.NotifyPropertyChanged("MoviePoster");
                }
                else
                {
                    (Facade.SelectedListItem as GUICustomListItem).Images.NotifyPropertyChanged("ShowPoster");
                }
                break;

            case ((int)ContextMenuItem.MarkAsUnWatched):
                RemoveItemFromWatchedHistory(selectedListItem);
                selectedItem.IsPlayed = false;
                OnItemSelected(selectedItem, Facade);
                if (SelectedType == TraktItemType.movie)
                {
                    (Facade.SelectedListItem as GUICustomListItem).Images.NotifyPropertyChanged("MoviePoster");
                }
                else
                {
                    (Facade.SelectedListItem as GUICustomListItem).Images.NotifyPropertyChanged("ShowPoster");
                }
                break;

            case ((int)ContextMenuItem.AddToWatchList):
                AddItemToWatchList(selectedListItem);
                OnItemSelected(selectedItem, Facade);
                if (SelectedType == TraktItemType.movie)
                {
                    (Facade.SelectedListItem as GUICustomListItem).Images.NotifyPropertyChanged("MoviePoster");
                }
                else
                {
                    (Facade.SelectedListItem as GUICustomListItem).Images.NotifyPropertyChanged("ShowPoster");
                }

                GUIWatchListMovies.ClearCache(TraktSettings.Username);
                break;

            case ((int)ContextMenuItem.RemoveFromWatchList):
                RemoveItemFromWatchList(selectedListItem);
                OnItemSelected(selectedItem, Facade);
                if (SelectedType == TraktItemType.movie)
                {
                    (Facade.SelectedListItem as GUICustomListItem).Images.NotifyPropertyChanged("MoviePoster");
                }
                else
                {
                    (Facade.SelectedListItem as GUICustomListItem).Images.NotifyPropertyChanged("ShowPoster");
                }

                GUIWatchListMovies.ClearCache(TraktSettings.Username);
                break;

            case ((int)ContextMenuItem.AddToList):
                if (SelectedType == TraktItemType.movie)
                {
                    TraktHelper.AddRemoveMovieInUserList(selectedListItem.Movie, false);
                }
                else if (SelectedType == TraktItemType.show)
                {
                    TraktHelper.AddRemoveShowInUserList(selectedListItem.Show, false);
                }
                else if (SelectedType == TraktItemType.season)
                {
                    TraktHelper.AddRemoveSeasonInUserList(selectedListItem.Season, false);
                }
                else if (SelectedType == TraktItemType.episode)
                {
                    TraktHelper.AddRemoveEpisodeInUserList(selectedListItem.Episode, false);
                }
                else if (SelectedType == TraktItemType.person)
                {
                    TraktHelper.AddRemovePersonInUserList(selectedListItem.Person, false);
                }
                break;

            case ((int)ContextMenuItem.RemoveFromList):
                if (!GUIUtils.ShowYesNoDialog(Translation.DeleteListItem, Translation.ConfirmDeleteListItem))
                {
                    break;
                }

                // Only do remove from current list
                // We could do same as Add (ie remove from multiple lists) but typically you only remove from the current list
                TraktHelper.AddRemoveItemInList((int)CurrentList.Ids.Trakt, GetSyncItems(selectedListItem), true);

                // clear the list item cache
                TraktLists.ClearListItemCache(CurrentUser, CurrentList.Ids.Trakt.ToString());

                // remove item from collection
                CurrentListItems.RemoveAll(l => ListItemMatch(l, selectedListItem));

                // clear the cache
                TraktLists.ClearListItemCache(TraktSettings.Username, CurrentList.Ids.Trakt.ToString());

                // Remove from view
                if (Facade.Count > 1)
                {
                    PreviousSelectedIndex = Facade.SelectedListItemIndex;
                    SendListItemsToFacade(CurrentListItems);
                }
                else
                {
                    // no more items left
                    GUIControl.ClearControl(GetID, Facade.GetID);
                    ClearProperties();
                    GUIWindowManager.Process();

                    // nothing left, exit
                    GUIWindowManager.ShowPreviousWindow();
                    return;
                }
                break;

            case ((int)ContextMenuItem.AddToLibrary):
                AddItemToCollection(selectedListItem);
                OnItemSelected(selectedItem, Facade);
                if (SelectedType == TraktItemType.movie)
                {
                    (Facade.SelectedListItem as GUICustomListItem).Images.NotifyPropertyChanged("MoviePoster");
                }
                else
                {
                    (Facade.SelectedListItem as GUICustomListItem).Images.NotifyPropertyChanged("ShowPoster");
                }
                break;

            case ((int)ContextMenuItem.RemoveFromLibrary):
                RemoveItemFromCollection(selectedListItem);
                OnItemSelected(selectedItem, Facade);
                if (SelectedType == TraktItemType.movie)
                {
                    (Facade.SelectedListItem as GUICustomListItem).Images.NotifyPropertyChanged("MoviePoster");
                }
                else
                {
                    (Facade.SelectedListItem as GUICustomListItem).Images.NotifyPropertyChanged("ShowPoster");
                }
                break;

            case ((int)ContextMenuItem.Related):
                if (SelectedType == TraktItemType.movie)
                {
                    TraktHelper.ShowRelatedMovies(selectedListItem.Movie);
                }
                else
                {
                    //series, season & episode
                    TraktHelper.ShowRelatedShows(selectedListItem.Show);
                }
                break;

            case ((int)ContextMenuItem.Rate):
                RateItem(selectedListItem);
                OnItemSelected(selectedItem, Facade);
                if (SelectedType == TraktItemType.movie)
                {
                    (Facade.SelectedListItem as GUICustomListItem).Images.NotifyPropertyChanged("MoviePoster");
                }
                else
                {
                    (Facade.SelectedListItem as GUICustomListItem).Images.NotifyPropertyChanged("ShowPoster");
                }
                break;

            case ((int)ContextMenuItem.Shouts):
                if (SelectedType == TraktItemType.movie)
                {
                    TraktHelper.ShowMovieShouts(selectedListItem.Movie);
                }
                else if (SelectedType == TraktItemType.show)
                {
                    TraktHelper.ShowTVShowShouts(selectedListItem.Show);
                }
                else
                {
                    TraktHelper.ShowEpisodeShouts(selectedListItem.Show, selectedListItem.Episode);
                }
                break;

            case ((int)ContextMenuItem.Cast):
                if (SelectedType == TraktItemType.movie)
                {
                    GUICreditsMovie.Movie  = selectedListItem.Movie;
                    GUICreditsMovie.Type   = GUICreditsMovie.CreditType.Cast;
                    GUICreditsMovie.Fanart = TmdbCache.GetMovieBackdropFilename((selectedItem as GUIMovieListItem).Images.MovieImages);
                    GUIWindowManager.ActivateWindow((int)TraktGUIWindows.CreditsMovie);
                }
                else if (SelectedType == TraktItemType.show)
                {
                    GUICreditsShow.Show   = selectedListItem.Show;
                    GUICreditsShow.Type   = GUICreditsShow.CreditType.Cast;
                    GUICreditsShow.Fanart = TmdbCache.GetShowBackdropFilename((selectedItem as GUIShowListItem).Images.ShowImages);
                    GUIWindowManager.ActivateWindow((int)TraktGUIWindows.CreditsShow);
                }
                break;

            case ((int)ContextMenuItem.Crew):
                if (SelectedType == TraktItemType.movie)
                {
                    GUICreditsMovie.Movie  = selectedListItem.Movie;
                    GUICreditsMovie.Type   = GUICreditsMovie.CreditType.Crew;
                    GUICreditsMovie.Fanart = TmdbCache.GetMovieBackdropFilename((selectedItem as GUIMovieListItem).Images.MovieImages);
                    GUIWindowManager.ActivateWindow((int)TraktGUIWindows.CreditsMovie);
                }
                else if (SelectedType == TraktItemType.show)
                {
                    GUICreditsShow.Show   = selectedListItem.Show;
                    GUICreditsShow.Type   = GUICreditsShow.CreditType.Crew;
                    GUICreditsShow.Fanart = TmdbCache.GetShowBackdropFilename((selectedItem as GUIShowListItem).Images.ShowImages);
                    GUIWindowManager.ActivateWindow((int)TraktGUIWindows.CreditsShow);
                }
                break;

            case ((int)ContextMenuItem.Trailers):
                if (SelectedType == TraktItemType.movie)
                {
                    GUICommon.ShowMovieTrailersMenu(selectedListItem.Movie);
                }
                else if (SelectedType == TraktItemType.episode)
                {
                    GUICommon.ShowTVShowTrailersMenu(selectedListItem.Show, selectedListItem.Episode);
                }
                else if (SelectedType == TraktItemType.season && TraktHelper.IsTrailersAvailableAndEnabled)
                {
                    GUICommon.ShowTVSeasonTrailersPluginMenu(selectedListItem.Show, selectedListItem.Season.Number);
                }
                break;

            case ((int)ContextMenuItem.SearchWithMpNZB):
                string loadingParam = String.Empty;
                if (selectedListItem.Movie != null)
                {
                    loadingParam = string.Format("search:{0}", selectedListItem.Movie.Title);
                }
                else if (selectedListItem.Episode != null)
                {
                    loadingParam = string.Format("search:{0} S{1}E{2}", selectedListItem.Show.Title, selectedListItem.Episode.Season.ToString("D2"), selectedListItem.Episode.Number.ToString("D2"));
                }
                GUIWindowManager.ActivateWindow((int)ExternalPluginWindows.MpNZB, loadingParam);
                break;

            case ((int)ContextMenuItem.SearchTorrent):
                string loadPar = String.Empty;
                if (selectedListItem.Movie != null)
                {
                    loadPar = selectedListItem.Movie.Title;
                }
                else if (selectedListItem.Episode != null)
                {
                    loadPar = string.Format("{0} S{1}E{2}", selectedListItem.Show.Title, selectedListItem.Episode.Season.ToString("D2"), selectedListItem.Episode.Number.ToString("D2"));
                }
                GUIWindowManager.ActivateWindow((int)ExternalPluginWindows.MyTorrents, loadPar);
                break;

            case ((int)ContextMenuItem.ChangeLayout):
                CurrentLayout = GUICommon.ShowLayoutMenu(CurrentLayout, PreviousSelectedIndex);
                break;

            default:
                break;
            }

            base.OnShowContextMenu();
        }
        private ShareData FolderInfo(GUIListItem item)
        {
            ShareData folderInfo = item.AlbumInfoTag as ShareData;

            return(folderInfo);
        }
Beispiel #3
0
        protected override void OnShowContextMenu()
        {
            if (GUIBackgroundTask.Instance.IsBusy)
            {
                return;
            }

            var selectedItem = this.Facade.SelectedListItem;

            if (selectedItem == null)
            {
                return;
            }

            var selectedUser = selectedItem.TVTag as TraktUser;

            if (selectedUser == null)
            {
                return;
            }

            var dlg = (IDialogbox)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_MENU);

            if (dlg == null)
            {
                return;
            }

            dlg.Reset();
            dlg.SetHeading(GUIUtils.PluginName());

            GUIListItem listItem = null;

            // Follow User
            // Only show menu item if user has an account as this is an unprotected area.
            if (!string.IsNullOrEmpty(TraktSettings.Username) && !string.IsNullOrEmpty(TraktSettings.Password) && !((selectedItem as GUIUserListItem).IsFollowed))
            {
                listItem = new GUIListItem(Translation.FollowUser);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.FollowUser;
            }

            // User Profile
            if (!selectedUser.Protected)
            {
                listItem = new GUIListItem(Translation.UserProfile);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.UserProfile;
            }

            // Change Layout
            listItem = new GUIListItem(Translation.ChangeLayout);
            dlg.Add(listItem);
            listItem.ItemId = (int)ContextMenuItem.ChangeLayout;

            // Show Context Menu
            dlg.DoModal(GUIWindowManager.ActiveWindow);
            if (dlg.SelectedId < 0)
            {
                return;
            }

            switch (dlg.SelectedId)
            {
            case ((int)ContextMenuItem.FollowUser):
                if (GUIUtils.ShowYesNoDialog(Translation.Network, string.Format(Translation.SendFollowRequest, selectedItem.Label), true))
                {
                    GUINetwork.FollowUser(selectedUser);
                    GUINetwork.ClearCache();
                    (selectedItem as GUIUserListItem).IsFollowed = true;
                }
                break;

            case ((int)ContextMenuItem.UserProfile):
                GUIUserProfile.CurrentUser = selectedUser.Username;
                GUIWindowManager.ActivateWindow((int)TraktGUIWindows.UserProfile);
                break;

            case ((int)ContextMenuItem.ChangeLayout):
                CurrentLayout = GUICommon.ShowLayoutMenu(CurrentLayout, PreviousSelectedIndex);
                break;
            }

            base.OnShowContextMenu();
        }
Beispiel #4
0
        protected override void LoadDirectory(string strNewDirectory)
        {
            if (facadeLayout != null)
            {
                GUIWaitCursor.Show();
                try
                {
                    GUIListItem SelectedItem = facadeLayout.SelectedListItem;
                    if (SelectedItem != null)
                    {
                        if (SelectedItem.IsFolder && SelectedItem.Label != "..")
                        {
                            m_history.Set(SelectedItem.Label, currentFolder);
                        }
                    }
                    currentFolder = strNewDirectory;
                    facadeLayout.Clear();

                    string strObjects = string.Empty;

                    ArrayList itemlist = new ArrayList();

                    PlayList playlist = playlistPlayer.GetPlaylist(PlayListType.PLAYLIST_VIDEO);
                    /* copy playlist from general playlist*/
                    int iCurrentSong = -1;
                    if (playlistPlayer.CurrentPlaylistType == PlayListType.PLAYLIST_VIDEO)
                    {
                        iCurrentSong = playlistPlayer.CurrentSong;
                    }

                    string strFileName;
                    for (int i = 0; i < playlist.Count; ++i)
                    {
                        PlayListItem item = playlist[i];
                        strFileName = item.FileName;

                        GUIListItem pItem = new GUIListItem(item.Description);
                        pItem.Path     = strFileName;
                        pItem.IsFolder = false;
                        //pItem.m_bIsShareOrDrive = false;

                        if (item.Duration > 0)
                        {
                            int nDuration = item.Duration;
                            if (nDuration > 0)
                            {
                                string str = Util.Utils.SecondsToHMSString(nDuration);
                                pItem.Label2 = str;
                            }
                            else
                            {
                                pItem.Label2 = string.Empty;
                            }
                        }
                        pItem.OnItemSelected += OnItemSelected;
                        itemlist.Add(pItem);
                        Util.Utils.SetDefaultIcons(pItem);
                    }

                    iCurrentSong = 0;
                    strFileName  = string.Empty;
                    //	Search current playlist item
                    if ((m_nTempPlayListWindow == GetID && m_strTempPlayListDirectory.IndexOf(currentFolder) >= 0 &&
                         g_Player.Playing &&
                         playlistPlayer.CurrentPlaylistType == PlayListType.PLAYLIST_VIDEO_TEMP)
                        ||
                        (GetID == (int)Window.WINDOW_VIDEO_PLAYLIST &&
                         playlistPlayer.CurrentPlaylistType == PlayListType.PLAYLIST_VIDEO &&
                         g_Player.Playing))
                    {
                        iCurrentSong = playlistPlayer.CurrentSong;
                        if (iCurrentSong >= 0)
                        {
                            playlist = playlistPlayer.GetPlaylist(playlistPlayer.CurrentPlaylistType);
                            if (iCurrentSong < playlist.Count)
                            {
                                PlayListItem item = playlist[iCurrentSong];
                                strFileName = item.FileName;
                            }
                        }
                    }

                    SetIMDBThumbs(itemlist);

                    string strSelectedItem = m_history.Get(currentFolder);
                    int    iItem           = 0;
                    foreach (GUIListItem item in itemlist)
                    {
                        facadeLayout.Add(item);

                        //	synchronize playlist with current directory
                        if (strFileName.Length > 0 && item.Path == strFileName)
                        {
                            item.Selected = true;
                        }
                    }
                    for (int i = 0; i < facadeLayout.Count; ++i)
                    {
                        GUIListItem item = facadeLayout[i];
                        if (item.Label == strSelectedItem)
                        {
                            GUIControl.SelectItemControl(GetID, facadeLayout.GetID, iItem);
                            break;
                        }
                        iItem++;
                    }
                    int iTotalItems = itemlist.Count;
                    if (itemlist.Count > 0)
                    {
                        GUIListItem rootItem = (GUIListItem)itemlist[0];
                        if (rootItem.Label == "..")
                        {
                            iTotalItems--;
                        }
                    }

                    //set object count label
                    GUIPropertyManager.SetProperty("#itemcount", Util.Utils.GetObjectCountLabel(iTotalItems));

                    if (currentSelectedItem >= 0)
                    {
                        GUIControl.SelectItemControl(GetID, facadeLayout.GetID, currentSelectedItem);
                    }
                    else if (itemlist.Count > 0)
                    {
                        GUIControl.SelectItemControl(GetID, facadeLayout.GetID, 0);
                    }
                    else
                    {
                        IMDBMovie movie = new IMDBMovie();
                        movie.SetProperties(false, string.Empty);
                    }
                    UpdateButtonStates();
                    GUIWaitCursor.Hide();
                }
                catch (Exception ex)
                {
                    GUIWaitCursor.Hide();
                    Log.Error("GUIVideoPlaylist: An error occured while loading the directory - {0}", ex.Message);
                }
            }
        }
        /// <summary>
        /// Loads a new Directory
        /// </summary>
        /// <param name="newFolderName">Name of the folder</param>
        private void LoadDirectory(string newFolderName)
        {
            _disableSorting = false;
            String currentFolder = newFolderName;

            GUIControl.ClearControl(GetID, facadeView.GetID);
            List <GUIListItem> itemlist     = _mDirectory.GetDirectoryExt(currentFolder);
            List <GUIListItem> itemfiltered = new List <GUIListItem>();

            for (int x = 0; x < itemlist.Count; ++x)
            {
                bool        addItem = true;
                GUIListItem item1   = itemlist[x];
                for (int y = 0; y < itemlist.Count; ++y)
                {
                    GUIListItem item2 = itemlist[y];
                    if (x != y)
                    {
                        if (!item1.IsFolder || !item2.IsFolder)
                        {
                            if (!item1.IsRemote && !item2.IsRemote)
                            {
                                if (Utils.ShouldStack(item1.Path, item2.Path))
                                {
                                    if (String.Compare(item1.Path, item2.Path, true) > 0)
                                    {
                                        addItem = false;
                                        // Update to reflect the stacked size
                                        item1.FileInfo.Length += item2.FileInfo.Length;
                                    }
                                }
                            }
                        }
                    }
                }

                if (addItem)
                {
                    string label = item1.Label;

                    Utils.RemoveStackEndings(ref label);
                    item1.Label = label;
                    if (_treatPlaylistsAsFolders && PlayListFactory.IsPlayList(item1.Path))
                    {
                        item1.IsFolder = true;
                        Utils.SetDefaultIcons(item1);
                    }
                    itemfiltered.Add(item1);
                }
            }
            itemlist = itemfiltered;

            if (_treatPlaylistsAsFolders && PlayListFactory.IsPlayList(newFolderName))
            {
                IPlayListIO loader   = PlayListFactory.CreateIO(newFolderName);
                PlayList    playlist = new PlayList();
                _disableSorting = true;
                String basePath = Path.GetDirectoryName(Path.GetFullPath(newFolderName));
                if (loader.Load(playlist, newFolderName))
                {
                    foreach (PlayListItem plItem in playlist)
                    {
                        GUIListItem item = new GUIListItem {
                            Path = plItem.FileName
                        };
                        if (plItem.FileName.StartsWith(basePath))
                        {
                            String mainPath = plItem.FileName.Remove(0, basePath.Length + 1);
                            if (mainPath.StartsWith("cue://") ||
                                mainPath.StartsWith("cue://") ||
                                mainPath.StartsWith("http://") ||
                                mainPath.StartsWith("ftp://") ||
                                mainPath.StartsWith("http_proxy://") ||
                                mainPath.StartsWith("mms://") ||
                                mainPath.StartsWith("mmst://") ||
                                mainPath.StartsWith("mpst://") ||
                                mainPath.StartsWith("rtsp://") ||
                                mainPath.StartsWith("rtp://") ||
                                mainPath.StartsWith("sdp://") ||
                                mainPath.StartsWith("udp://") ||
                                mainPath.StartsWith("unsv://"))
                            {
                                item.Path = mainPath;
                            }
                        }
                        Log.Info("MPlayer GUI: " + item.Path);

                        item.Label    = plItem.Description;
                        item.IsFolder = false;
                        Utils.SetDefaultIcons(item);
                        itemlist.Add(item);
                    }
                }
            }

            foreach (GUIListItem item in itemlist)
            {
                facadeView.Add(item);
            }
            OnSort();
        }
 private IMDBActor.IMDBActorMovie ListItemMovieInfo(GUIListItem item)
 {
     IMDBActor.IMDBActorMovie movie = item.AlbumInfoTag as IMDBActor.IMDBActorMovie;
     return(movie);
 }
        protected override void OnShowContextMenu()
        {
            if (GUIBackgroundTask.Instance.IsBusy)
            {
                return;
            }

            var selectedItem = this.Facade.SelectedListItem;

            if (selectedItem == null)
            {
                return;
            }

            var selectedComment = selectedItem.TVTag as TraktComment;

            if (selectedComment == null)
            {
                return;
            }

            var dlg = (IDialogbox)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_MENU);

            if (dlg == null)
            {
                return;
            }

            dlg.Reset();
            dlg.SetHeading(GUIUtils.PluginName());

            GUIListItem listItem = null;

            // Like or Unlike Comment
            if (selectedComment.User.Username != TraktSettings.Username)
            {
                // Like
                if (!selectedComment.IsLiked())
                {
                    listItem = new GUIListItem(Translation.Like);
                    dlg.Add(listItem);
                    listItem.ItemId = (int)ContextMenuItem.Like;
                }
                else
                {
                    // UnLike
                    listItem = new GUIListItem(Translation.UnLike);
                    dlg.Add(listItem);
                    listItem.ItemId = (int)ContextMenuItem.UnLike;
                }
            }

            if (ShoutType == ShoutTypeEnum.episode && (selectedComment.ParentId == null || selectedComment.ParentId == 0))
            {
                listItem = new GUIListItem(Translation.NextEpisode);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.NextEpisode;

                if (EpisodeInfo.EpisodeIdx > 1)
                {
                    listItem = new GUIListItem(Translation.PreviousEpisode);
                    dlg.Add(listItem);
                    listItem.ItemId = (int)ContextMenuItem.PrevEpisode;
                }
            }

            listItem = new GUIListItem(TraktSettings.HideSpoilersOnShouts ? Translation.ShowSpoilers : Translation.HideSpoilers);
            dlg.Add(listItem);
            listItem.ItemId = (int)ContextMenuItem.Spoilers;

            // userprofile - only load for unprotected users
            if (!selectedComment.User.IsPrivate)
            {
                listItem = new GUIListItem(Translation.UserProfile);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.UserProfile;
            }
            // Show Context Menu
            dlg.DoModal(GUIWindowManager.ActiveWindow);
            if (dlg.SelectedId < 0)
            {
                return;
            }

            switch (dlg.SelectedId)
            {
            case (int)ContextMenuItem.Like:
                GUICommon.LikeComment(selectedComment);
                selectedComment.Likes++;
                PublishCommentSkinProperties(selectedComment);
                break;

            case (int)ContextMenuItem.UnLike:
                GUICommon.UnLikeComment(selectedComment);
                if (selectedComment.Likes > 0)
                {
                    selectedComment.Likes--;
                    PublishCommentSkinProperties(selectedComment);
                }
                break;

            case ((int)ContextMenuItem.Spoilers):
                TraktSettings.HideSpoilersOnShouts = !TraktSettings.HideSpoilersOnShouts;
                if (hideSpoilersButton != null)
                {
                    hideSpoilersButton.Selected = TraktSettings.HideSpoilersOnShouts;
                }
                PublishCommentSkinProperties(selectedComment);
                break;

            case ((int)ContextMenuItem.NextEpisode):
                GetNextEpisodeComments();
                break;

            case ((int)ContextMenuItem.PrevEpisode):
                GetPrevEpisodeComments();
                break;

            case ((int)ContextMenuItem.UserProfile):
                GUIUserProfile.CurrentUser = selectedComment.User.Username;
                GUIWindowManager.ActivateWindow((int)TraktGUIWindows.UserProfile);
                break;

            default:
                break;
            }

            base.OnShowContextMenu();
        }
        protected override void OnShowContextMenu()
        {
            if (GUIBackgroundTask.Instance.IsBusy)
            {
                return;
            }

            GUIListItem selectedItem = this.Facade.SelectedListItem;

            if (selectedItem == null)
            {
                return;
            }

            TraktMovie selectedMovie = (TraktMovie)selectedItem.TVTag;

            IDialogbox dlg = (IDialogbox)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_MENU);

            if (dlg == null)
            {
                return;
            }

            dlg.Reset();
            dlg.SetHeading(GUIUtils.PluginName());

            GUIListItem listItem = null;

            // Hide/Show Watched items
            listItem = new GUIListItem(HideWatched ? Translation.ShowWatched : Translation.HideWatched);
            dlg.Add(listItem);
            listItem.ItemId = (int)ContextMenuItem.HideShowWatched;

            // Mark As Watched
            if (!selectedMovie.Watched)
            {
                listItem = new GUIListItem(Translation.MarkAsWatched);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.MarkAsWatched;
            }

            // Mark As UnWatched
            if (selectedMovie.Watched)
            {
                listItem = new GUIListItem(Translation.MarkAsUnWatched);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.MarkAsUnWatched;
            }

            // Add/Remove Watch List
            if (!selectedMovie.InWatchList)
            {
                listItem = new GUIListItem(Translation.AddToWatchList);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.AddToWatchList;
            }
            else
            {
                listItem = new GUIListItem(Translation.RemoveFromWatchList);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.RemoveFromWatchList;
            }

            // Add to Custom list
            listItem = new GUIListItem(Translation.AddToList + "...");
            dlg.Add(listItem);
            listItem.ItemId = (int)ContextMenuItem.AddToList;

            // Add to Library
            // Don't allow if it will be removed again on next sync
            // movie could be part of a DVD collection
            if (!selectedMovie.InCollection && !TraktSettings.KeepTraktLibraryClean)
            {
                listItem = new GUIListItem(Translation.AddToLibrary);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.AddToLibrary;
            }

            if (selectedMovie.InCollection)
            {
                listItem = new GUIListItem(Translation.RemoveFromLibrary);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.RemoveFromLibrary;
            }

            // Related Movies
            listItem = new GUIListItem(Translation.RelatedMovies + "...");
            dlg.Add(listItem);
            listItem.ItemId = (int)ContextMenuItem.Related;

            // Rate Movie
            listItem = new GUIListItem(Translation.RateMovie);
            dlg.Add(listItem);
            listItem.ItemId = (int)ContextMenuItem.Rate;

            // Shouts
            listItem = new GUIListItem(Translation.Shouts + "...");
            dlg.Add(listItem);
            listItem.ItemId = (int)ContextMenuItem.Shouts;

            // Trailers
            if (TraktHelper.IsOnlineVideosAvailableAndEnabled)
            {
                listItem = new GUIListItem(Translation.Trailers);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.Trailers;
            }

            // Change Layout
            listItem = new GUIListItem(Translation.ChangeLayout);
            dlg.Add(listItem);
            listItem.ItemId = (int)ContextMenuItem.ChangeLayout;

            if (!selectedMovie.InCollection && TraktHelper.IsMpNZBAvailableAndEnabled)
            {
                // Search for movie with mpNZB
                listItem = new GUIListItem(Translation.SearchWithMpNZB);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.SearchWithMpNZB;
            }

            if (!selectedMovie.InCollection && TraktHelper.IsMyTorrentsAvailableAndEnabled)
            {
                // Search for movie with MyTorrents
                listItem = new GUIListItem(Translation.SearchTorrent);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.SearchTorrent;
            }

            // Show Context Menu
            dlg.DoModal(GUIWindowManager.ActiveWindow);
            if (dlg.SelectedId < 0)
            {
                return;
            }

            switch (dlg.SelectedId)
            {
            case ((int)ContextMenuItem.HideShowWatched):
                HideWatched = !HideWatched;
                if (hideWatchedButton != null)
                {
                    hideWatchedButton.Selected = HideWatched;
                }
                dictRelatedMovies.Remove(relatedMovie.Slug);
                LoadRelatedMovies();
                break;

            case ((int)ContextMenuItem.MarkAsWatched):
                TraktHelper.MarkMovieAsWatched(selectedMovie);
                if (!HideWatched)
                {
                    if (selectedMovie.Plays == 0)
                    {
                        selectedMovie.Plays = 1;
                    }
                    selectedMovie.Watched = true;
                    selectedItem.IsPlayed = true;
                    OnMovieSelected(selectedItem, Facade);
                    (Facade.SelectedListItem as GUIMovieListItem).Images.NotifyPropertyChanged("Poster");
                }
                else
                {
                    dictRelatedMovies.Remove(relatedMovie.Slug);
                    LoadRelatedMovies();
                }
                break;

            case ((int)ContextMenuItem.MarkAsUnWatched):
                TraktHelper.MarkMovieAsUnWatched(selectedMovie);
                selectedMovie.Watched = false;
                selectedItem.IsPlayed = false;
                OnMovieSelected(selectedItem, Facade);
                (Facade.SelectedListItem as GUIMovieListItem).Images.NotifyPropertyChanged("Poster");
                break;

            case ((int)ContextMenuItem.AddToWatchList):
                TraktHelper.AddMovieToWatchList(selectedMovie, true);
                selectedMovie.InWatchList = true;
                OnMovieSelected(selectedItem, Facade);
                (Facade.SelectedListItem as GUIMovieListItem).Images.NotifyPropertyChanged("Poster");
                break;

            case ((int)ContextMenuItem.RemoveFromWatchList):
                TraktHelper.RemoveMovieFromWatchList(selectedMovie, true);
                selectedMovie.InWatchList = false;
                OnMovieSelected(selectedItem, Facade);
                (Facade.SelectedListItem as GUIMovieListItem).Images.NotifyPropertyChanged("Poster");
                break;

            case ((int)ContextMenuItem.AddToList):
                TraktHelper.AddRemoveMovieInUserList(selectedMovie.Title, selectedMovie.Year, selectedMovie.IMDBID, false);
                break;

            case ((int)ContextMenuItem.AddToLibrary):
                TraktHelper.AddMovieToLibrary(selectedMovie);
                selectedMovie.InCollection = true;
                OnMovieSelected(selectedItem, Facade);
                (Facade.SelectedListItem as GUIMovieListItem).Images.NotifyPropertyChanged("Poster");
                break;

            case ((int)ContextMenuItem.RemoveFromLibrary):
                TraktHelper.RemoveMovieFromLibrary(selectedMovie);
                selectedMovie.InCollection = false;
                OnMovieSelected(selectedItem, Facade);
                (Facade.SelectedListItem as GUIMovieListItem).Images.NotifyPropertyChanged("Poster");
                break;

            case ((int)ContextMenuItem.Related):
                RelatedMovie relMovie = new RelatedMovie
                {
                    Title  = selectedMovie.Title,
                    IMDbId = selectedMovie.IMDBID,
                    Year   = Convert.ToInt32(selectedMovie.Year)
                };
                relatedMovie = relMovie;
                GUIUtils.SetProperty("#Trakt.Related.Movie", relMovie.Title);
                LoadRelatedMovies();
                RelationChanged = true;
                break;

            case ((int)ContextMenuItem.Rate):
                GUICommon.RateMovie(selectedMovie);
                OnMovieSelected(selectedItem, Facade);
                (Facade.SelectedListItem as GUIMovieListItem).Images.NotifyPropertyChanged("Poster");
                break;

            case ((int)ContextMenuItem.Shouts):
                TraktHelper.ShowMovieShouts(selectedMovie);
                break;

            case ((int)ContextMenuItem.Trailers):
                GUICommon.ShowMovieTrailersMenu(selectedMovie);
                break;

            case ((int)ContextMenuItem.ChangeLayout):
                CurrentLayout = GUICommon.ShowLayoutMenu(CurrentLayout, PreviousSelectedIndex);
                break;

            case ((int)ContextMenuItem.SearchWithMpNZB):
                string loadingParam = string.Format("search:{0}", selectedMovie.Title);
                GUIWindowManager.ActivateWindow((int)ExternalPluginWindows.MpNZB, loadingParam);
                break;

            case ((int)ContextMenuItem.SearchTorrent):
                string loadPar = selectedMovie.Title;
                GUIWindowManager.ActivateWindow((int)ExternalPluginWindows.MyTorrents, loadPar);
                break;

            default:
                break;
            }

            base.OnShowContextMenu();
        }
        internal void MyContextMenu()
        {
            try
            {
                GUIDialogMenu dlg = (GUIDialogMenu)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_MENU);
                if (dlg == null)
                {
                    return;
                }

                dlg.Reset();
                dlg.SetHeading(924);

                //Add Details Menu Item
                //Play Menu Item
                GUIListItem pItem = new GUIListItem(Translation.Play);
                dlg.Add(pItem);
                pItem.ItemId = 1;

                pItem = new GUIListItem(Translation.MovieDetails);
                dlg.Add(pItem);
                pItem.ItemId = 2;

                //Add Watched/Unwatched Filter Menu Item
                if (CurrentFacade.UnWatched)
                {
                    pItem = new GUIListItem(Translation.ShowUnwatchedMovies);
                    dlg.Add(pItem);
                    pItem.ItemId = 3;
                }
                else
                {
                    pItem = new GUIListItem(Translation.ShowAllMovies);
                    dlg.Add(pItem);
                    pItem.ItemId = 3;
                }

                //Add Latests/Watched/Rated Menu Item
                pItem = new GUIListItem("[^] " + CurrentFacade.Title);
                dlg.Add(pItem);
                pItem.ItemId = 4;

                pItem        = new GUIListItem();
                pItem.Label  = Translation.Update;
                pItem.ItemId = 5;
                dlg.Add(pItem);

                //Show Dialog
                dlg.DoModal(Utils.ActiveWindow);

                if (dlg.SelectedLabel == -1)
                {
                    return;
                }

                switch (dlg.SelectedId)
                {
                case 1:
                {
                    PlayMovie(GUIWindowManager.GetWindow(Utils.ActiveWindow));
                    break;
                }

                case 2:
                {
                    ShowInfo();
                    break;
                }

                case 3:
                {
                    CurrentFacade.UnWatched = !CurrentFacade.UnWatched;
                    MyVideosUpdateLatest();
                    break;
                }

                case 4:
                {
                    IDialogbox ldlg = (GUIDialogMenu)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_MENU);
                    if (ldlg == null)
                    {
                        return;
                    }

                    ldlg.Reset();
                    ldlg.SetHeading(924);

                    //Add Types Menu Items
                    pItem = new GUIListItem((CurrentFacade.Type == LatestsFacadeType.Latests ? "[x] " : string.Empty) + Translation.LabelLatestAdded);
                    ldlg.Add(pItem);
                    pItem.ItemId = 1;

                    pItem = new GUIListItem((CurrentFacade.Type == LatestsFacadeType.Watched ? "[x] " : string.Empty) + Translation.LabelLatestWatched);
                    ldlg.Add(pItem);
                    pItem.ItemId = 2;

                    pItem = new GUIListItem((CurrentFacade.Type == LatestsFacadeType.Rated ? "[x] " : string.Empty) + Translation.LabelHighestRated);
                    ldlg.Add(pItem);
                    pItem.ItemId = 3;

                    //Show Dialog
                    ldlg.DoModal(Utils.ActiveWindow);

                    if (ldlg.SelectedLabel == -1)
                    {
                        return;
                    }

                    switch (ldlg.SelectedId - 1)
                    {
                    case 0:
                        CurrentFacade.Type = LatestsFacadeType.Latests;
                        break;

                    case 1:
                        CurrentFacade.Type = LatestsFacadeType.Watched;
                        break;

                    case 2:
                        CurrentFacade.Type = LatestsFacadeType.Rated;
                        break;
                    }
                    MyVideosUpdateLatest();
                    break;
                }

                case 5:
                {
                    MyVideosUpdateLatest();
                    break;
                }
                }
            }
            catch (Exception ex)
            {
                logger.Error("MyContextMenu: " + ex.ToString());
            }
        }
        private void AddToFilmstrip(Latest latests, int x)
        {
            try
            {
                //Add to filmstrip
                IMDBMovie movie = new IMDBMovie();
                movie.Title = latests.Title;
                movie.File  = string.Empty;
                try
                {
                    movie.RunTime = Int32.Parse(latests.Runtime);
                }
                catch
                {
                    movie.RunTime = 0;
                }
                try
                {
                    movie.Year = Int32.Parse(latests.Year);
                }
                catch
                {
                    movie.Year = 0;
                }
                movie.DVDLabel = latests.Fanart;
                try
                {
                    movie.Rating = Int32.Parse(latests.RoundedRating);
                }
                catch
                {
                    movie.Rating = 0;
                }
                movie.Watched = 0;

                Utils.LoadImage(latests.Thumb, ref imagesThumbs);

                GUIListItem item = new GUIListItem();
                item.ItemId          = x;
                item.IconImage       = latests.Thumb;
                item.IconImageBig    = latests.Thumb;
                item.ThumbnailImage  = latests.Thumb;
                item.Label           = movie.Title;
                item.Label2          = latests.Genre;
                item.Label3          = latests.DateAdded;
                item.IsFolder        = false;
                item.Path            = movie.File;
                item.Duration        = movie.RunTime; // *60;
                item.AlbumInfoTag    = movie;
                item.Year            = movie.Year;
                item.DVDLabel        = movie.DVDLabel;
                item.Rating          = movie.Rating;
                item.Path            = latests.Summary;
                item.IsPlayed        = movie.Watched > 0 ? true : false;
                item.OnItemSelected += new GUIListItem.ItemSelectedHandler(item_OnItemSelected);

                facadeCollection.Add(item);
            }
            catch (Exception ex)
            {
                logger.Error("AddToFilmstrip: " + ex.ToString());
            }
        }
Beispiel #11
0
        /// <summary>
        /// Fill the list with channels
        /// </summary>
        private void FillChannelList()
        {
            _channelsListControl.Clear();

            int    i           = 0;
            int    SelectedID  = 0;
            string ChannelLogo = string.Empty;

            if (_currentGroup != null)
            {
                _currentAndNextPrograms = Proxies.SchedulerService.GetCurrentAndNextForGroup(_currentGroup.ChannelGroupId, true, PluginMain.Navigator.LiveStream).Result;
            }
            else
            {
                _currentAndNextPrograms = new List <CurrentAndNextProgram>();
            }

            Channel currentChannel = PluginMain.Navigator.CurrentChannel;
            Channel prevChannel    = PluginMain.Navigator.GetPreviousChannel(this.ChannelType);

            foreach (CurrentAndNextProgram currentAndNext in _currentAndNextPrograms)
            {
                i++;
                sb.Length = 0;
                GUIListItem item = new GUIListItem("");
                item.TVTag = currentAndNext.Channel;

                sb.Append(currentAndNext.Channel.DisplayName);
                ChannelLogo = Utility.GetLogoImage(currentAndNext.Channel);

                if (!string.IsNullOrEmpty(ChannelLogo))
                {
                    item.IconImageBig = ChannelLogo;
                    item.IconImage    = ChannelLogo;
                }
                else
                {
                    item.IconImageBig = string.Empty;
                    item.IconImage    = string.Empty;
                }

                ActiveRecording activeRecording;
                if (PluginMain.IsChannelRecording(currentAndNext.Channel.ChannelId, out activeRecording))
                {
                    if (_showStateIcons)
                    {
                        item.PinImage = RecordingIcon;
                    }
                    else
                    {
                        sb.Append(" ");
                        sb.Append(recordingText);
                    }
                    item.IsPlayed = (currentAndNext.LiveState == ChannelLiveState.NotTunable ||
                                     currentAndNext.LiveState == ChannelLiveState.NoFreeCard);
                }
                else
                {
                    switch (currentAndNext.LiveState)
                    {
                    case ChannelLiveState.NotTunable:
                    case ChannelLiveState.NoFreeCard:
                        item.IsPlayed = true;
                        if (_showStateIcons)
                        {
                            item.PinImage = UnavailableIcon;
                        }
                        else
                        {
                            sb.Append(" ");
                            sb.Append(unavailableText);
                        }
                        break;

                    default:
                        item.IsPlayed = false;
                        if (_showStateIcons)
                        {
                            item.PinImage = AvailableIcon;
                        }
                        break;
                    }
                }

                if (currentChannel != null)
                {
                    if (currentChannel.ChannelId == currentAndNext.Channel.ChannelId)
                    {
                        item.IsRemote = true;
                        SelectedID    = _channelsListControl.Count;

                        if (_showStateIcons && item.PinImage != RecordingIcon &&
                            item.PinImage != UnavailableIcon)
                        {
                            item.PinImage = TimeshiftingIcon;
                        }
                        else if (!_showStateIcons)
                        {
                            sb.Append(" ");
                            sb.Append(timeshiftingText);
                        }
                    }
                }
                else if (prevChannel != null &&
                         prevChannel.ChannelId == currentAndNext.Channel.ChannelId)
                {
                    item.IsRemote = true;
                    SelectedID    = _channelsListControl.Count;
                }

                sbTmp.Length = 0;

                bool hasNow = currentAndNext.Current != null;
                if (hasNow)
                {
                    sbTmp.Append(currentAndNext.Current.CreateProgramTitle());
                }
                else
                {
                    sbTmp.Append(noDataAvailableText);
                }

                item.Label2 = sbTmp.ToString();
                sbTmp.Insert(0, nowText);
                item.Label3 = sbTmp.ToString();

                sbTmp.Length = 0;

                if (_showChannelNumber)
                {
                    sb.Append(" - ");
                    if (!_byIndex)
                    {
                        if (currentAndNext.Channel.LogicalChannelNumber.HasValue)
                        {
                            sb.Append(currentAndNext.Channel.LogicalChannelNumber.Value.ToString());
                        }
                    }
                    else
                    {
                        sb.Append(i);
                    }
                }

                if (hasNow)
                {
                    sb.Append(" - ");
                    sb.Append(currentAndNext.CurrentPercentageComplete);
                    sb.Append("%");
                }

                if (currentAndNext.Next != null)
                {
                    sbTmp.Append(/*currentAndNext.Next.StartTime.ToShortTimeString() + " " + */ currentAndNext.Next.CreateProgramTitle());
                }
                else
                {
                    sbTmp.Append(noDataAvailableText);
                }

                item.Label2 = sb.ToString();
                sbTmp.Insert(0, nextText);
                item.Label = sbTmp.ToString();

                _channelsListControl.Add(item);
            }
            _channelsListControl.SelectedListItemIndex = SelectedID;
            Log.Debug("miniguide: state check + filling channel list completed");

            if (_channelsListControl.GetID == 37)
            {
                GUIMessage msg = new GUIMessage(GUIMessage.MessageType.GUI_MSG_SETFOCUS, GetID, 0, 37, 0, 0, null);
                OnMessage(msg);
            }

            sb.Length    = 0;
            sbTmp.Length = 0;
        }
Beispiel #12
0
        /// <summary>
        /// Fill the list with channels
        /// </summary>
        public void FillChannelList()
        {
            List <Channel> tvChannelList = GetChannelListByGroup();

            benchClock = Stopwatch.StartNew();

            DateTime nextEPGupdate = GetNextEpgUpdate();
            Dictionary <int, NowAndNext> listNowNext = GetNowAndNext(tvChannelList, nextEPGupdate);

            benchClock.Stop();
            Log.Debug("TvMiniGuide: FillChannelList retrieved {0} programs for {1} channels in {2} ms", listNowNext.Count,
                      tvChannelList.Count, benchClock.ElapsedMilliseconds.ToString());

            GUIListItem item        = null;
            string      ChannelLogo = "";
            //List<int> RecChannels = null;
            //List<int> TSChannels = null;
            int  SelectedID        = 0;
            int  channelID         = 0;
            bool DisplayStatusInfo = true;


            Dictionary <int, ChannelState> tvChannelStatesList = null;

            if (TVHome.ShowChannelStateIcons())
            {
                benchClock.Reset();
                benchClock.Start();

                if (TVHome.Navigator.CurrentGroup.GroupName.Equals(TvConstants.TvGroupNames.AllChannels) ||
                    (!g_Player.IsTV && !g_Player.Playing))
                {
                    //we have no way of using the cached channelstates on the server in the following situations.
                    // 1) when the "all channels" group is selected - too many channels.
                    // 2) when user is not timeshifting - no user object on the server.
                    User currentUser = new User();
                    tvChannelStatesList = TVHome.TvServer.GetAllChannelStatesForGroup(TVHome.Navigator.CurrentGroup.IdGroup,
                                                                                      currentUser);
                }
                else
                {
                    // use the more speedy approach
                    // ask the server of the cached list of channel states corresponding to the user.
                    tvChannelStatesList = TVHome.TvServer.GetAllChannelStatesCached(TVHome.Card.User);

                    if (tvChannelStatesList == null)
                    {
                        //slow approach.
                        tvChannelStatesList = TVHome.TvServer.GetAllChannelStatesForGroup(TVHome.Navigator.CurrentGroup.IdGroup,
                                                                                          TVHome.Card.User);
                    }
                }

                benchClock.Stop();
                if (tvChannelStatesList != null)
                {
                    Log.Debug("TvMiniGuide: FillChannelList - {0} channel states for group retrieved in {1} ms",
                              Convert.ToString(tvChannelStatesList.Count), benchClock.ElapsedMilliseconds.ToString());
                }
            }

            for (int i = 0; i < tvChannelList.Count; i++)
            {
                Channel CurrentChan = tvChannelList[i];

                if (CurrentChan.VisibleInGuide)
                {
                    ChannelState CurrentChanState = ChannelState.tunable;
                    channelID = CurrentChan.IdChannel;
                    if (TVHome.ShowChannelStateIcons())
                    {
                        if (!tvChannelStatesList.TryGetValue(channelID, out CurrentChanState))
                        {
                            CurrentChanState = ChannelState.tunable;
                        }
                    }

                    //StringBuilder sb = new StringBuilder();
                    sb.Length = 0;
                    item      = new GUIListItem("");
                    // store here as it is not needed right now - please beat me later..
                    item.TVTag = CurrentChan;

                    sb.Append(CurrentChan.DisplayName);
                    ChannelLogo = Utils.GetCoverArt(Thumbs.TVChannel, CurrentChan.DisplayName);

                    // if we are watching this channel mark it
                    if (TVHome.Navigator != null && TVHome.Navigator.Channel != null &&
                        TVHome.Navigator.Channel.IdChannel == channelID)
                    {
                        item.IsRemote = true;
                        SelectedID    = lstChannels.Count;
                    }

                    if (!string.IsNullOrEmpty(ChannelLogo))
                    {
                        item.IconImageBig = ChannelLogo;
                        item.IconImage    = ChannelLogo;
                    }
                    else
                    {
                        item.IconImageBig = string.Empty;
                        item.IconImage    = string.Empty;
                    }

                    if (DisplayStatusInfo)
                    {
                        bool showChannelStateIcons = (TVHome.ShowChannelStateIcons() && lstChannelsWithStateIcons != null);

                        switch (CurrentChanState)
                        {
                        case ChannelState.nottunable:
                            item.IsPlayed = true;
                            if (showChannelStateIcons)
                            {
                                item.PinImage = Thumbs.TvIsUnavailableIcon;
                            }
                            else
                            {
                                sb.Append(" ");
                                sb.Append(local1056);
                            }
                            break;

                        case ChannelState.timeshifting:
                            if (showChannelStateIcons)
                            {
                                item.PinImage = Thumbs.TvIsTimeshiftingIcon;
                            }
                            else
                            {
                                sb.Append(" ");
                                sb.Append(local1055);
                            }
                            break;

                        case ChannelState.recording:
                            if (showChannelStateIcons)
                            {
                                item.PinImage = Thumbs.TvIsRecordingIcon;
                            }
                            else
                            {
                                sb.Append(" ");
                                sb.Append(local1054);
                            }
                            break;

                        default:
                            item.IsPlayed = false;
                            if (showChannelStateIcons)
                            {
                                item.PinImage = Thumbs.TvIsAvailableIcon;
                            }
                            break;
                        }
                    }
                    //StringBuilder sbTmp = new StringBuilder();
                    sbTmp.Length = 0;

                    NowAndNext currentNowAndNext = null;
                    bool       hasNowNext        = listNowNext.TryGetValue(channelID, out currentNowAndNext);

                    if (hasNowNext)
                    {
                        if (!string.IsNullOrEmpty(currentNowAndNext.TitleNow))
                        {
                            sbTmp.Append(currentNowAndNext.NowStartTime.ToString("t", CultureInfo.CurrentCulture.DateTimeFormat));
                            sbTmp.Append(": ");

                            TVUtil.TitleDisplay(sbTmp, currentNowAndNext.TitleNow, currentNowAndNext.EpisodeName,
                                                currentNowAndNext.SeriesNum,
                                                currentNowAndNext.EpisodeNum, currentNowAndNext.EpisodePart);
                        }
                        else
                        {
                            sbTmp.Append(local736);
                        }
                    }
                    else
                    {
                        sbTmp.Append(local736);
                    }

                    item.Label2 = sbTmp.ToString();
                    sbTmp.Insert(0, string.Empty);
                    item.Label3 = sbTmp.ToString();

                    sbTmp.Length = 0;

                    if (_showChannelNumber == true)
                    {
                        sb.Append(" - ");
                        if (!_byIndex)
                        {
                            sb.Append(tvChannelList[i].ChannelNumber);
                        }
                        else
                        {
                            sb.Append(i + 1);
                        }
                    }

                    if (hasNowNext)
                    {
                        // if the "Now" DB entry is in the future we set MinValue intentionally to avoid wrong percentage calculations
                        DateTime startTime = currentNowAndNext.NowStartTime;
                        if (startTime != SqlDateTime.MinValue.Value)
                        {
                            DateTime endTime = currentNowAndNext.NowEndTime;
                            int      percent = (int)CalculateProgress(startTime, endTime);
                            sb.Append(" - ");
                            sb.Append(
                                percent.ToString());
                            sb.Append("%");

                            item.HasProgressBar        = true;
                            item.ProgressBarPercentage = percent;

                            if (endTime < nextEPGupdate || nextEPGupdate == DateTime.MinValue)
                            {
                                nextEPGupdate = endTime;
                                SetNextEpgUpdate(endTime);
                            }
                        }
                    }

                    if (hasNowNext && listNowNext[channelID].IdProgramNext != -1)
                    {
                        sbTmp.Append(currentNowAndNext.NextStartTime.ToString("t", CultureInfo.CurrentCulture.DateTimeFormat));
                        sbTmp.Append(": ");


                        TVUtil.TitleDisplay(sbTmp, currentNowAndNext.TitleNext, currentNowAndNext.EpisodeNameNext,
                                            currentNowAndNext.SeriesNumNext,
                                            currentNowAndNext.EpisodeNumNext,
                                            currentNowAndNext.EpisodePartNext);
                    }
                    else
                    {
                        sbTmp.Append(local736);
                    }

                    item.Label2 = sb.ToString();

                    sbTmp.Insert(0, string.Empty);

                    item.Label = sbTmp.ToString();

                    lstChannels.Add(item);
                }
            }
            benchClock.Stop();
            Log.Debug("TvMiniGuide: State check + filling completed after {0} ms", benchClock.ElapsedMilliseconds.ToString());
            lstChannels.SelectedListItemIndex = SelectedID;

            if (lstChannels.GetID == 37)
            {
                GUIMessage msg = new GUIMessage(GUIMessage.MessageType.GUI_MSG_SETFOCUS, GetID, 0, 37, 0, 0, null);
                OnMessage(msg);
            }

            sb.Length    = 0;
            sbTmp.Length = 0;
        }
Beispiel #13
0
        protected override void OnShowContextMenu()
        {
            try
            {
                GUIListItem currentitem = this.m_Facade.SelectedListItem;
                if (currentitem == null || !(currentitem.TVTag is PosterContainer))
                {
                    return;
                }
                PosterContainer selectedPoster = currentitem.TVTag as PosterContainer;

                IDialogbox dlg = (IDialogbox)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_MENU);
                if (dlg == null)
                {
                    return;
                }
                dlg.Reset();
                dlg.SetHeading("Poster");


                GUIListItem pItem;


                if (!selectedPoster.IsImageEnabled)
                {
                    pItem = new GUIListItem("Enable");
                    dlg.Add(pItem);
                }
                else
                {
                    pItem = new GUIListItem("Disable");
                    dlg.Add(pItem);
                }

                if (selectedPoster.IsImageEnabled)
                {
                    if (selectedPoster.IsImageDefault)
                    {
                        pItem = new GUIListItem("Remove as Default");
                        dlg.Add(pItem);
                    }
                    else
                    {
                        pItem = new GUIListItem("Set as Default");
                        dlg.Add(pItem);
                    }
                }


                // lets show it
                dlg.DoModal(GUIWindowManager.ActiveWindow);

                if (dlg.SelectedId == 1)                 // enabled/disable
                {
                    bool endis = !selectedPoster.IsImageEnabled;
                    JMMServerHelper.EnableDisablePoster(endis, selectedPoster, AnimeID);

                    ShowPosters();
                    return;
                }

                if (dlg.SelectedId == 2)
                {
                    bool isdef = !selectedPoster.IsImageDefault;
                    JMMServerHelper.SetDefaultPoster(isdef, selectedPoster, AnimeID);

                    ShowPosters();
                    return;
                }
            }
            catch (Exception ex)
            {
                BaseConfig.MyAnimeLog.Write("Exception in Poster Chooser Context Menu: " + ex.Message + ex.StackTrace);
                return;
            }
        }
        private void OnAddPath()
        {
            GUIDialogSelect dlg = (GUIDialogSelect)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_SELECT);

            if (dlg == null)
            {
                return;
            }
            dlg.Reset();
            dlg.SetHeading(300049);  // Folder browser
            dlg.EnableButton(true);
            dlg.SetButtonLabel(424); // manual

            // Get drive list
            if (_folderLvl == 0)
            {
                ClearFolders();
                GetDrives();
            }
            // Add list to dlg menu
            foreach (GUIListItem drive in _folders)
            {
                dlg.Add(drive.Label);

                if (drive.IsPlayed)
                {
                    dlg.SelectedLabel = _folders.IndexOf(drive);
                }
            }

            // Show dialog menu
            dlg.MarkSelectedItemOnButton = true;
            dlg.DoModal(GetID);

            // Folder is selected - return
            if (dlg.IsButtonPressed)
            {
                GUIListItem item = (GUIListItem)_folders[dlg.SelectedItemLabelIndexNoFocus];
                _folderPath = item.Label2;
                // Reset browsing history
                ClearFolders();
                OnAddEditFolder();
                return;
            }

            //ESC pressed, go back folder or if it's lvl=0 (Drives) return
            if (dlg.SelectedLabel == -1)
            {
                if (_folderLvl > 0)
                {
                    GetFolderHistory();
                    OnAddPath();
                    return;
                }
                else
                {
                    ClearFolders();
                    _userNetFolder = GUILocalizeStrings.Get(145); // Network
                    OnAddEditFolder();
                    return;
                }
            }

            // Browse folders further
            _selectedLabelIndex = dlg.SelectedLabel;
            GUIListItem selectedItem = (GUIListItem)_folders[dlg.SelectedItemLabelIndexNoFocus];

            GetFolders(selectedItem);
            OnAddPath();
        }
 private void OnCommentSelected(GUIListItem item, GUIControl parent)
 {
     PublishCommentSkinProperties(item.TVTag as TraktComment);
 }
Beispiel #16
0
        protected override void OnShowContextMenu()
        {
            var selectedItem = this.Facade.SelectedListItem as GUIMovieListItem;

            if (selectedItem == null)
            {
                return;
            }

            var selectedMovie = selectedItem.TVTag as TraktMovieSummary;

            if (selectedMovie == null)
            {
                return;
            }

            var dlg = (IDialogbox)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_MENU);

            if (dlg == null)
            {
                return;
            }

            dlg.Reset();
            dlg.SetHeading(GUIUtils.PluginName());

            GUIListItem listItem = null;

            if (!selectedMovie.IsWatchlisted())
            {
                listItem = new GUIListItem(Translation.AddToWatchList);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.AddToWatchList;
            }
            else
            {
                listItem = new GUIListItem(Translation.RemoveFromWatchList);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.RemoveFromWatchList;
            }

            // Add to Custom List
            listItem = new GUIListItem(Translation.AddToList);
            dlg.Add(listItem);
            listItem.ItemId = (int)ContextMenuItem.AddToList;

            // Mark As Watched
            if (!selectedMovie.IsWatched())
            {
                listItem = new GUIListItem(Translation.MarkAsWatched);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.MarkAsWatched;
            }

            // Mark As UnWatched
            if (selectedMovie.IsWatched())
            {
                listItem = new GUIListItem(Translation.MarkAsUnWatched);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.MarkAsUnWatched;
            }

            // Add to Collection
            if (!selectedMovie.IsCollected() && !TraktSettings.KeepTraktLibraryClean)
            {
                listItem = new GUIListItem(Translation.AddToLibrary);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.AddToLibrary;
            }

            if (selectedMovie.IsCollected())
            {
                listItem = new GUIListItem(Translation.RemoveFromLibrary);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.RemoveFromLibrary;
            }

            // Related Movies
            listItem = new GUIListItem(Translation.RelatedMovies);
            dlg.Add(listItem);
            listItem.ItemId = (int)ContextMenuItem.Related;

            // Rate Movie
            listItem = new GUIListItem(Translation.RateMovie);
            dlg.Add(listItem);
            listItem.ItemId = (int)ContextMenuItem.Rate;

            // Shouts
            listItem = new GUIListItem(Translation.Comments);
            dlg.Add(listItem);
            listItem.ItemId = (int)ContextMenuItem.Shouts;

            // Cast and Crew
            listItem = new GUIListItem(Translation.Cast);
            dlg.Add(listItem);
            listItem.ItemId = (int)ContextMenuItem.Cast;

            listItem = new GUIListItem(Translation.Crew);
            dlg.Add(listItem);
            listItem.ItemId = (int)ContextMenuItem.Crew;

            if (TraktHelper.IsTrailersAvailableAndEnabled)
            {
                // Trailers
                listItem = new GUIListItem(Translation.Trailers);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.Trailers;
            }

            // Change Layout
            listItem = new GUIListItem(Translation.ChangeLayout);
            dlg.Add(listItem);
            listItem.ItemId = (int)ContextMenuItem.ChangeLayout;

            if (!selectedMovie.IsCollected() && TraktHelper.IsMpNZBAvailableAndEnabled)
            {
                // Search for movie with mpNZB
                listItem = new GUIListItem(Translation.SearchWithMpNZB);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.SearchWithMpNZB;
            }

            if (!selectedMovie.IsCollected() && TraktHelper.IsMyTorrentsAvailableAndEnabled)
            {
                // Search for movie with MyTorrents
                listItem = new GUIListItem(Translation.SearchTorrent);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.SearchTorrent;
            }

            // Show Context Menu
            dlg.DoModal(GUIWindowManager.ActiveWindow);
            if (dlg.SelectedId < 0)
            {
                return;
            }

            switch (dlg.SelectedId)
            {
            case ((int)ContextMenuItem.MarkAsWatched):
                TraktHelper.AddMovieToWatchHistory(selectedMovie);
                selectedItem.IsPlayed = true;
                OnMovieSelected(selectedItem, Facade);
                (Facade.SelectedListItem as GUIMovieListItem).Images.NotifyPropertyChanged("Poster");
                break;

            case ((int)ContextMenuItem.MarkAsUnWatched):
                TraktHelper.RemoveMovieFromWatchHistory(selectedMovie);
                selectedItem.IsPlayed = false;
                OnMovieSelected(selectedItem, Facade);
                (Facade.SelectedListItem as GUIMovieListItem).Images.NotifyPropertyChanged("Poster");
                break;

            case ((int)ContextMenuItem.AddToWatchList):
                TraktHelper.AddMovieToWatchList(selectedMovie, true);
                OnMovieSelected(selectedItem, Facade);
                (Facade.SelectedListItem as GUIMovieListItem).Images.NotifyPropertyChanged("Poster");
                break;

            case ((int)ContextMenuItem.RemoveFromWatchList):
                TraktHelper.RemoveMovieFromWatchList(selectedMovie, true);
                OnMovieSelected(selectedItem, Facade);
                (Facade.SelectedListItem as GUIMovieListItem).Images.NotifyPropertyChanged("Poster");
                break;

            case ((int)ContextMenuItem.AddToList):
                TraktHelper.AddRemoveMovieInUserList(selectedMovie, false);
                break;

            case ((int)ContextMenuItem.Trailers):
                PreviousUser = CurrentUser;
                GUICommon.ShowMovieTrailersMenu(selectedMovie);
                break;

            case ((int)ContextMenuItem.AddToLibrary):
                TraktHelper.AddMovieToCollection(selectedMovie);
                OnMovieSelected(selectedItem, Facade);
                (Facade.SelectedListItem as GUIMovieListItem).Images.NotifyPropertyChanged("Poster");
                break;

            case ((int)ContextMenuItem.RemoveFromLibrary):
                TraktHelper.RemoveMovieFromCollection(selectedMovie);
                OnMovieSelected(selectedItem, Facade);
                (Facade.SelectedListItem as GUIMovieListItem).Images.NotifyPropertyChanged("Poster");
                break;

            case ((int)ContextMenuItem.Related):
                TraktHelper.ShowRelatedMovies(selectedMovie);
                break;

            case ((int)ContextMenuItem.Rate):
                GUICommon.RateMovie(selectedMovie);
                OnMovieSelected(selectedItem, Facade);
                (Facade.SelectedListItem as GUIMovieListItem).Images.NotifyPropertyChanged("Poster");
                break;

            case ((int)ContextMenuItem.Shouts):
                TraktHelper.ShowMovieShouts(selectedMovie);
                break;


            case ((int)ContextMenuItem.Cast):
                GUICreditsMovie.Movie  = selectedMovie;
                GUICreditsMovie.Type   = GUICreditsMovie.CreditType.Cast;
                GUICreditsMovie.Fanart = TmdbCache.GetMovieBackdropFilename(selectedItem.Images.MovieImages);
                GUIWindowManager.ActivateWindow((int)TraktGUIWindows.CreditsMovie);
                break;

            case ((int)ContextMenuItem.Crew):
                GUICreditsMovie.Movie  = selectedMovie;
                GUICreditsMovie.Type   = GUICreditsMovie.CreditType.Crew;
                GUICreditsMovie.Fanart = TmdbCache.GetMovieBackdropFilename(selectedItem.Images.MovieImages);
                GUIWindowManager.ActivateWindow((int)TraktGUIWindows.CreditsMovie);
                break;

            case ((int)ContextMenuItem.ChangeLayout):
                CurrentLayout = GUICommon.ShowLayoutMenu(CurrentLayout, PreviousSelectedIndex);
                break;

            case ((int)ContextMenuItem.SearchWithMpNZB):
                string loadingParam = string.Format("search:{0}", selectedMovie.Title);
                GUIWindowManager.ActivateWindow((int)ExternalPluginWindows.MpNZB, loadingParam);
                break;

            case ((int)ContextMenuItem.SearchTorrent):
                string loadPar = selectedMovie.Title;
                GUIWindowManager.ActivateWindow((int)ExternalPluginWindows.MyTorrents, loadPar);
                break;

            default:
                break;
            }

            base.OnShowContextMenu();
        }
Beispiel #17
0
        internal void MyContextMenu()
        {
            try
            {
                GUIDialogMenu dlg = (GUIDialogMenu)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_MENU);
                if (dlg == null)
                {
                    return;
                }

                dlg.Reset();
                dlg.SetHeading(924);

                //Play Menu Item
                GUIListItem pItem = new GUIListItem();
                pItem.Label  = Translation.View;
                pItem.ItemId = 1;
                dlg.Add(pItem);

                pItem        = new GUIListItem();
                pItem.Label  = GUILocalizeStrings.Get(940);
                pItem.ItemId = 2;
                dlg.Add(pItem);

                pItem        = new GUIListItem();
                pItem.Label  = Translation.Update;
                pItem.ItemId = 3;
                dlg.Add(pItem);

                //Show Dialog
                dlg.DoModal(Utils.ActiveWindow);

                if (dlg.SelectedLabel < 0)
                {
                    return;
                }

                switch (dlg.SelectedId)
                {
                case 1:
                {
                    PlayPictures(GUIWindowManager.GetWindow(Utils.ActiveWindow));
                    break;
                }

                case 2:
                {
                    InfoPictures();
                    break;
                }

                case 3:
                {
                    GetLatestPictures();
                    break;
                }
                }
            }
            catch (Exception ex)
            {
                logger.Error("MyContextMenu: " + ex.ToString());
            }
        }
        /// <summary>
        /// Handles the click in the facadeview
        /// </summary>
        private void OnClick()
        {
            GUIListItem item = facadeView.SelectedListItem;

            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;
                    if (_useDvdnav)
                    {
                        path = "dvdnav://" + path;
                    }
                    else
                    {
                        path = "dvd://" + path;
                    }
                    //_path = item.Path + @"\VIDEO_TS\VIDEO_TS.IFO";
                }
                else if ((File.Exists(path + @"\MPEGAV\AVSEQ01.DAT")) && (item.Label != ".."))
                {
                    isFolderAMovie = true;
                    path           = "vcd://" + String.Format(@"{0}\MPEGAV\AVSEQ01.DAT", item.Path);
                }
                else if ((File.Exists(path + @"\MPEG2\AVSEQ01.MPG")) && (item.Label != ".."))
                {
                    isFolderAMovie = true;
                    path           = "svcd://" + String.Format(@"{0}\MPEG2\AVSEQ01.MPG", item.Path);
                }
                else if ((File.Exists(path + @"\MPEG2\AVSEQ01.MPEG")) && (item.Label != ".."))
                {
                    isFolderAMovie = true;
                    path           = "svcd://" + String.Format(@"{0}\MPEG2\AVSEQ01.MPEG", item.Path);
                }
            }

            if ((item.IsFolder) && (!isFolderAMovie))
            {
                //currentSelectedItem = -1;
                _virtualPath = path;
                LoadDirectory(path);
            }
            else
            {
                if (PlayListFactory.IsPlayList(path))
                {
                    LoadPlayList(path);
                    return;
                }
                string movieFileName = _mDirectory.GetLocalFilename(path) + ".mplayer";
                if (movieFileName.StartsWith("rtsp:"))
                {
                    movieFileName = "ZZZZ:" + movieFileName.Remove(0, 5);
                }
                g_Player.Play(movieFileName);
                if (g_Player.IsVideo)
                {
                    GUIGraphicsContext.IsFullScreenVideo = true;
                    GUIWindowManager.ActivateWindow((int)Window.WINDOW_FULLSCREEN_VIDEO);
                }
                return;
            }
        }
Beispiel #19
0
 private void item_OnItemSelected(GUIListItem item, GUIControl parent)
 {
     UpdateSelectedProperties(item);
 }
        /*
         * private string GetPlotTmdb(GUIListItem item, ref string thumbOut)
         * {
         * // Get TMDBId to retreive full details from TMDB
         * string shortPlot = string.Empty;
         * string strUrl =
         *  String.Format("http://api.themoviedb.org/2.1/Movie.imdbLookup/en/xml/2ed40b5d82aa804a2b1fcedb5ca8d97a/" +
         *                ListItemMovieInfo(item).MovieImdbID);
         * string absUri;
         * string regex = @"<id>(?<tmdbId>.*?)</id>";
         * string body = GetPage(strUrl, "utf-8", out absUri);
         * string tmdbId = Regex.Match(body, regex, RegexOptions.Singleline).Groups["tmdbId"].Value;
         *
         * if (tmdbId == string.Empty)
         * {
         *  shortPlot = string.Empty;
         *  thumbOut = string.Empty;
         *  return shortPlot;
         * }
         *
         * // Main - details by TMDBid
         * strUrl =
         *  String.Format("http://api.themoviedb.org/2.1/Movie.getInfo/-/xml/2ed40b5d82aa804a2b1fcedb5ca8d97a/" + tmdbId);
         *
         * regex = @"<overview>(?<moviePlot>.*)</overview>";
         * body = string.Empty;
         *
         * // Search Tmdb by API, body is XML result
         * shortPlot = GetPlot(strUrl, regex, ref body);
         * // Check if XML is valid (on English)
         * regex = @"<translated>false</translated>";
         * if (Regex.Match(body, regex).Success || shortPlot == string.Empty)
         * {
         *  shortPlot = string.Empty;
         *  thumbOut = string.Empty;
         *  return shortPlot;
         * }
         *
         * thumbOut = GetThumbTmdb(body);
         *
         * // MPARating
         * regex = @"<certification>(?<certification>.*)</certification>";
         * string mpaaRating = Regex.Match(body, regex, RegexOptions.Singleline).Groups["certification"].Value;
         *
         * if (mpaaRating == string.Empty)
         *  mpaaRating = Strings.Unknown;
         *
         * // Genres
         * string regexBlockPattern = @"<categories>(?<cast>.*?)</categories>";
         * regex = @"<category\stype=""genre""\sname=""(?<genre>.*?)""";
         * string block = Regex.Match(body, regexBlockPattern, RegexOptions.Singleline).Value;
         * MatchCollection mc = Regex.Matches(block, regex, RegexOptions.Singleline);
         *
         * string genre = string.Empty;
         *
         * foreach (Match m in mc)
         * {
         *  genre += m.Groups["genre"].Value;
         *  genre += " / ";
         * }
         * if (genre != string.Empty)
         *  genre = genre.Remove(genre.LastIndexOf(" / "));
         *
         * // Actors
         * regexBlockPattern = @"<cast>(?<cast>.*?)</cast>";
         * regex = @"<person\sname=""(?<name>.*?)"".?character=""(?<role>.*?)"".?job=""(?<job>.*?)""";
         * block = Regex.Match(body, regexBlockPattern, RegexOptions.Singleline).Value;
         * mc = Regex.Matches(block, regex, RegexOptions.Singleline);
         *
         * string name = string.Empty;
         * string job = string.Empty;
         * string strCast = string.Empty;
         *
         * if (mc.Count != 0)
         * {
         *  foreach (Match m in mc)
         *  {
         *    name = m.Groups["name"].Value;
         *    job = m.Groups["job"].Value;
         *
         *    switch (job)
         *    {
         *      case "Director":
         *        break;
         *
         *      case "Screenplay":
         *        break;
         *
         *      case "Writer":
         *        break;
         *
         *      case "Actor":
         *        strCast += name;
         *        strCast += " / ";
         *        break;
         *    }
         *  }
         * }
         * int index = strCast.LastIndexOf(" /");
         * if (index > 0)
         *  strCast = strCast.Remove(index);
         *
         * // Execute sql to db for genres, rating and cast list
         * ExecuteSql("strGenre", genre, item);
         * ExecuteSql("mpaa", mpaaRating, item);
         * ExecuteSql("strCast", strCast, item);
         * ListItemMovieInfo(item).MovieGenre = genre;
         * ListItemMovieInfo(item).MovieMpaaRating = mpaaRating;
         * ListItemMovieInfo(item).MovieCast = strCast;
         *
         * return shortPlot;
         * }
         *
         * private string GetThumbTmdb(string body)
         * {
         * string thumb = string.Empty;
         * string regexBlockPattern = @"<images>.*?</images>";
         * string regex = @"<image\stype=""poster""\surl=""(?<cover>http://cf1.imgobject.com/posters/.*?jpg)""";
         * string block = Regex.Match(body, regexBlockPattern, RegexOptions.Singleline).Value;
         *
         * MatchCollection mc = Regex.Matches(block, regex, RegexOptions.Singleline);
         * if (mc.Count > 0)
         * {
         *  foreach (Match m in mc)
         *  {
         *    // Get cover - using mid quality cover
         *    if (m.Groups["cover"].Value.ToLowerInvariant().Contains("mid.jpg"))
         *    {
         *      thumb = m.Groups["cover"].Value;
         *      break;
         *    }
         *  }
         * }
         * return thumb;
         * }
         */
        #endregion

        #region IMDB

        private string GetPlotImdb(GUIListItem item)
        {
            try
            {
                string    plot  = string.Empty;
                IMDBMovie movie = new IMDBMovie();

                movie.IMDBNumber = ListItemMovieInfo(item).MovieImdbID;

                if (!IMDB.InternalActorsScriptGrabber.InternalActorsGrabber.GetPlotImdb(ref movie))
                {
                    return(string.Empty);
                }

                plot = movie.PlotOutline;

                #region Extra data

                // Title
                if (movie.Title != string.Empty)
                {
                    ExecuteSql("strTitle", movie.Title, item);
                    ListItemMovieInfo(item).MovieTitle = movie.Title;
                }

                // Year
                if (movie.Year == 0)
                {
                    movie.Year = DateTime.Today.Year + 3;
                }
                ExecuteSql("iYear", movie.Year.ToString(), item);
                ListItemMovieInfo(item).Year = movie.Year;

                // Director
                if (movie.WritingCredits == string.Empty)
                {
                    movie.WritingCredits = Strings.Unknown;
                }
                ExecuteSql("strCredits", movie.WritingCredits, item);
                ListItemMovieInfo(item).MovieCredits = movie.WritingCredits;

                // Genres
                if (movie.SingleGenre == string.Empty)
                {
                    movie.SingleGenre = Strings.Unknown;
                }
                ExecuteSql("strGenre", movie.SingleGenre, item);
                ListItemMovieInfo(item).MovieGenre = movie.SingleGenre;

                // MPAA rating
                if (movie.MPARating == string.Empty)
                {
                    movie.MPARating = Strings.Unknown;
                }
                ExecuteSql("mpaa", movie.MPARating, item);
                ListItemMovieInfo(item).MovieMpaaRating = movie.MPARating;

                // Cast list
                ExecuteSql("strCast", movie.Cast, item);
                ListItemMovieInfo(item).MovieCast = movie.Cast;

                #endregion

                movie = null;
                return(plot);
            }
            catch (ThreadAbortException)
            {
                Log.Info("GUIVideoArtistInfo: Movie database lookup GetDetails(): Thread aborted");
            }
            catch (Exception ex)
            {
                Log.Error("GUIVideoArtistInfo: Movie database lookup GetDetails() error: {0}", ex.Message);
            }

            return(string.Empty);
        }
        protected override void OnShowContextMenu()
        {
            GUIListItem selectedItem = this.Facade.SelectedListItem;

            if (selectedItem == null)
            {
                return;
            }

            TraktMovie selectedMovie = (TraktMovie)selectedItem.TVTag;

            IDialogbox dlg = (IDialogbox)GUIWindowManager.GetWindow((int)GUIWindow.Window.WINDOW_DIALOG_MENU);

            if (dlg == null)
            {
                return;
            }

            dlg.Reset();
            dlg.SetHeading(GUIUtils.PluginName());

            GUIListItem listItem = null;

            // Dismiss Recommendation
            listItem = new GUIListItem(Translation.DismissRecommendation);
            dlg.Add(listItem);
            listItem.ItemId = (int)ContextMenuItem.DismissRecommendation;

            // Mark As Watched
            // This should remove item from recommendations if executed
            if (!selectedMovie.Watched)
            {
                listItem = new GUIListItem(Translation.MarkAsWatched);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.MarkAsWatched;
            }

            // Add/Remove Watch List
            if (!selectedMovie.InWatchList)
            {
                listItem = new GUIListItem(Translation.AddToWatchList);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.AddToWatchList;
            }
            else
            {
                listItem = new GUIListItem(Translation.RemoveFromWatchList);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.RemoveFromWatchList;
            }

            // Add to Custom List
            listItem = new GUIListItem(Translation.AddToList + "...");
            dlg.Add(listItem);
            listItem.ItemId = (int)ContextMenuItem.AddToList;

            // Add to Library
            // Don't allow if it will be removed again on next sync
            // movie could be part of a DVD collection
            if (!selectedMovie.InCollection && !TraktSettings.KeepTraktLibraryClean)
            {
                listItem = new GUIListItem(Translation.AddToLibrary);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.AddToLibrary;
            }

            if (selectedMovie.InCollection)
            {
                listItem = new GUIListItem(Translation.RemoveFromLibrary);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.RemoveFromLibrary;
            }

            // Related Movies
            listItem = new GUIListItem(Translation.RelatedMovies + "...");
            dlg.Add(listItem);
            listItem.ItemId = (int)ContextMenuItem.Related;

            // Rate Movie
            listItem = new GUIListItem(Translation.RateMovie);
            dlg.Add(listItem);
            listItem.ItemId = (int)ContextMenuItem.Rate;

            // Shouts
            listItem = new GUIListItem(Translation.Shouts + "...");
            dlg.Add(listItem);
            listItem.ItemId = (int)ContextMenuItem.Shouts;

            if (TraktHelper.IsOnlineVideosAvailableAndEnabled)
            {
                // Trailers
                listItem = new GUIListItem(Translation.Trailers);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.Trailers;
            }

            // Change Layout
            listItem = new GUIListItem(Translation.ChangeLayout);
            dlg.Add(listItem);
            listItem.ItemId = (int)ContextMenuItem.ChangeLayout;

            if (!selectedMovie.InCollection && TraktHelper.IsMpNZBAvailableAndEnabled)
            {
                // Search for movie with mpNZB
                listItem = new GUIListItem(Translation.SearchWithMpNZB);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.SearchWithMpNZB;
            }

            if (!selectedMovie.InCollection && TraktHelper.IsMyTorrentsAvailableAndEnabled)
            {
                // Search for movie with MyTorrents
                listItem = new GUIListItem(Translation.SearchTorrent);
                dlg.Add(listItem);
                listItem.ItemId = (int)ContextMenuItem.SearchTorrent;
            }

            // Show Context Menu
            dlg.DoModal(GUIWindowManager.ActiveWindow);
            if (dlg.SelectedId < 0)
            {
                return;
            }

            switch (dlg.SelectedId)
            {
            case ((int)ContextMenuItem.DismissRecommendation):
                PreviousSelectedIndex = this.Facade.SelectedListItemIndex;
                DismissRecommendation(selectedMovie);
                if (_RecommendedMovies.Count() > 1)
                {
                    var moviesToExcept = new List <TraktMovie>();
                    moviesToExcept.Add(selectedMovie);
                    _RecommendedMovies = RecommendedMovies.Except(moviesToExcept);
                }
                else
                {
                    // reload, none left
                    ClearProperties();
                    GUIControl.ClearControl(GetID, Facade.GetID);
                    _RecommendedMovies = null;
                }
                LoadRecommendedMovies();
                break;

            case ((int)ContextMenuItem.MarkAsWatched):
                PreviousSelectedIndex = this.Facade.SelectedListItemIndex;
                TraktHelper.MarkMovieAsWatched(selectedMovie);
                if (_RecommendedMovies.Count() > 1)
                {
                    var moviesToExcept = new List <TraktMovie>();
                    moviesToExcept.Add(selectedMovie);
                    _RecommendedMovies = RecommendedMovies.Except(moviesToExcept);
                }
                else
                {
                    // reload, none left
                    ClearProperties();
                    GUIControl.ClearControl(GetID, Facade.GetID);
                    _RecommendedMovies = null;
                }
                LoadRecommendedMovies();
                break;

            case ((int)ContextMenuItem.AddToWatchList):
                TraktHelper.AddMovieToWatchList(selectedMovie, true);
                selectedMovie.InWatchList = true;
                OnMovieSelected(selectedItem, Facade);
                (Facade.SelectedListItem as GUIMovieListItem).Images.NotifyPropertyChanged("Poster");
                break;

            case ((int)ContextMenuItem.RemoveFromWatchList):
                TraktHelper.RemoveMovieFromWatchList(selectedMovie, true);
                selectedMovie.InWatchList = false;
                OnMovieSelected(selectedItem, Facade);
                (Facade.SelectedListItem as GUIMovieListItem).Images.NotifyPropertyChanged("Poster");
                break;

            case ((int)ContextMenuItem.AddToList):
                TraktHelper.AddRemoveMovieInUserList(selectedMovie.Title, selectedMovie.Year, selectedMovie.IMDBID, false);
                break;

            case ((int)ContextMenuItem.AddToLibrary):
                TraktHelper.AddMovieToLibrary(selectedMovie);
                selectedMovie.InCollection = true;
                OnMovieSelected(selectedItem, Facade);
                (Facade.SelectedListItem as GUIMovieListItem).Images.NotifyPropertyChanged("Poster");
                break;

            case ((int)ContextMenuItem.RemoveFromLibrary):
                TraktHelper.RemoveMovieFromLibrary(selectedMovie);
                selectedMovie.InCollection = false;
                OnMovieSelected(selectedItem, Facade);
                (Facade.SelectedListItem as GUIMovieListItem).Images.NotifyPropertyChanged("Poster");
                break;

            case ((int)ContextMenuItem.Related):
                TraktHelper.ShowRelatedMovies(selectedMovie);
                break;

            case ((int)ContextMenuItem.Rate):
                PreviousSelectedIndex = this.Facade.SelectedListItemIndex;
                if (GUICommon.RateMovie(selectedMovie))
                {
                    // also mark as watched
                    TraktHelper.MarkMovieAsWatched(selectedMovie);
                    // remove from recommendations
                    if (_RecommendedMovies.Count() > 1)
                    {
                        var moviesToExcept = new List <TraktMovie>();
                        moviesToExcept.Add(selectedMovie);
                        _RecommendedMovies = RecommendedMovies.Except(moviesToExcept);
                    }
                    else
                    {
                        // reload, none left
                        ClearProperties();
                        GUIControl.ClearControl(GetID, Facade.GetID);
                        _RecommendedMovies = null;
                    }
                    LoadRecommendedMovies();
                }
                break;

            case ((int)ContextMenuItem.Shouts):
                TraktHelper.ShowMovieShouts(selectedMovie);
                break;

            case ((int)ContextMenuItem.Trailers):
                GUICommon.ShowMovieTrailersMenu(selectedMovie);
                break;

            case ((int)ContextMenuItem.ChangeLayout):
                CurrentLayout = GUICommon.ShowLayoutMenu(CurrentLayout, PreviousSelectedIndex);
                break;

            case ((int)ContextMenuItem.SearchWithMpNZB):
                string loadingParam = string.Format("search:{0}", selectedMovie.Title);
                GUIWindowManager.ActivateWindow((int)ExternalPluginWindows.MpNZB, loadingParam);
                break;

            case ((int)ContextMenuItem.SearchTorrent):
                string loadPar = selectedMovie.Title;
                GUIWindowManager.ActivateWindow((int)ExternalPluginWindows.MyTorrents, loadPar);
                break;

            default:
                break;
            }

            base.OnShowContextMenu();
        }
        private void SetNewproperties()
        {
            _currentActor.SortActorMoviesByYear();

            for (int i = 0; i < _currentActor.Count; ++i)
            {
                string line = String.Format("{0}. {1} ({2})",
                                            _currentActor[i].Year,
                                            _currentActor[i].MovieTitle,
                                            _currentActor[i].Role);
                //List view
                var item = new GUIListItem();
                item.ItemId = i;
                item.Label  = line.Replace("()", string.Empty).Trim(); // Year+Title+Role (visible on screen item)

                if (_currentActor[i].MoviePlot == "-" || _currentActor[i].MoviePlot == Strings.Unknown)
                {
                    _currentActor[i].MoviePlot = string.Empty; // Plot
                }
                item.AlbumInfoTag = Actor[i];

                string filenameL = string.Empty;
                string path      = string.Empty;
                // Find image
                if (VideoDatabase.CheckMovieImdbId(_currentActor[i].MovieImdbID))
                {
                    string ttFolder   = Regex.Replace(_currentActor[i].MovieImdbID, "(tt(0*))", string.Empty);
                    int    i_ttFolder = 0;
                    int.TryParse(ttFolder, out i_ttFolder);
                    i_ttFolder = i_ttFolder / 25000; // 25000 thumbs in one folder
                    ttFolder   = i_ttFolder.ToString();
                    path       = string.Format(@"{0}\Videos\Actors\ActorsMovies\{1}\", Config.GetFolder(Config.Dir.Thumbs), ttFolder);
                    filenameL  = _currentActor[i].MovieImdbID + ".jpg";

                    if (File.Exists(path + filenameL))
                    {
                        filenameL      = path + filenameL; // Movie cover file
                        item.IconImage = filenameL;
                    }
                    else
                    {
                        filenameL      = string.Empty; // Movie cover file
                        item.IconImage = string.Empty;
                    }
                }

                // Show in list if user have that movie in collection (played property = true)
                ArrayList movies = new ArrayList();
                string    sql    = string.Format("SELECT * FROM movieinfo WHERE IMDBID = '{0}'", _currentActor[i].MovieImdbID);
                VideoDatabase.GetMoviesByFilter(sql, out movies, false, true, false, false, false);

                if (movies.Count > 0) // We have a movie, color normal or color played for watched
                {
                    IMDBMovie movie = new IMDBMovie();
                    movie         = (IMDBMovie)movies[0];
                    item.DVDLabel = movie.ID.ToString(); // DVD label holds videodatabase movieID
                    item.IsPlayed = true;
                }

                item.ThumbnailImage  = filenameL;
                item.OnItemSelected += OnItemSelected;
                listActorMovies.Add(item);
            }


            if (listActorMovies.ListItems.Count == 0)
            {
                GUIListItem item = new GUIListItem();
                item.Label = GUILocalizeStrings.Get(284);
                IMDBMovie movie = item.AlbumInfoTag as IMDBMovie;
                movie             = new IMDBMovie();
                item.AlbumInfoTag = movie;
                listActorMovies.Add(item);
            }

            _currentSelectedItem = 0;
            string largeCoverArtImage = Util.Utils.GetLargeCoverArtName(Thumbs.MovieActors, _currentActor.ID.ToString());

            if (imgCoverArt != null)
            {
                imgCoverArt.Dispose();
                imgCoverArt.SetFileName(largeCoverArtImage);
                imgCoverArt.AllocResources();
            }

            // Update skin controls visibility
            Update();

            // Restore screen from last session if needed
            LoadState();
        }
        protected override void OnClicked(int controlId, GUIControl control, Action.ActionType actionType)
        {
            base.OnClicked(controlId, control, actionType);

            // Default folder (select/deselect on click) - settings saved
            if (control == videosShareListcontrol)
            {
                OnSetDefaultFolder();
            }
            // Add new folder
            if (control == btnAdd)
            {
                // reset menu position
                _selectedOption = -1;
                // reset folder browser
                ClearFolders();
                // Clear folder info
                ClearFolderInfoData();
                _userNetFolder = GUILocalizeStrings.Get(145); // Network

                // Show menu
                OnAddEditFolder();

                // Define new folder
                GUIListItem item = new GUIListItem();
                // Watch for last parameter (my version with selective thumbs will use that)
                ShareData shareData = new ShareData("", "", "", true);
                item.AlbumInfoTag    = shareData;
                _shareFolderListItem = item;
                // Check new data
                CheckCurrentShareData();

                if (_error)
                {
                    _error = false;
                    GUIDialogOK dlgOk = (GUIDialogOK)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_OK);
                    dlgOk.SetHeading(257);
                    dlgOk.SetLine(1, GUILocalizeStrings.Get(300053)); // Error in folder data
                    dlgOk.SetLine(2, GUILocalizeStrings.Get(300054)); // Name or path couldn't be empty
                    dlgOk.DoModal(GUIWindowManager.ActiveWindow);
                    return;
                }

                // Prepare folder info data
                FolderInfo(_shareFolderListItem).DefaultLayout     = SettingsSharesHelper.ProperLayoutFromDefault(_folderDefaultLayoutIndex);
                FolderInfo(_shareFolderListItem).Name              = _folderName;
                FolderInfo(_shareFolderListItem).Folder            = _folderPath;
                FolderInfo(_shareFolderListItem).CreateThumbs      = _folderCreateThumbs;
                FolderInfo(_shareFolderListItem).EachFolderIsMovie = _folderEachFolderIsMovie;
                FolderInfo(_shareFolderListItem).PinCode           = _folderPin;
                // Almost forgot this, needed for proper sort :)
                _shareFolderListItem.Label           = _folderName;
                _shareFolderListItem.OnItemSelected += OnItemSelected;

                // Add new folder in list
                videosShareListcontrol.Add(_shareFolderListItem);
                GUIListItem newItem = _shareFolderListItem;
                Sort();
                int index = videosShareListcontrol.ListItems.IndexOf(newItem);
                videosShareListcontrol.SelectedListItemIndex = index;
            }
            // Edit folder
            if (control == btnEdit)
            {
                string name = _folderName;
                string path = _folderPath;

                // reset menu position
                _selectedOption = -1;

                OnAddEditFolder();

                // Check new data
                CheckCurrentShareData();

                if (_error)
                {
                    _error = false;
                    GUIDialogOK dlgOk = (GUIDialogOK)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_OK);
                    dlgOk.SetHeading(257);
                    dlgOk.SetLine(1, GUILocalizeStrings.Get(300053)); // Error in folder data
                    dlgOk.SetLine(2, GUILocalizeStrings.Get(300054)); // Name or path couldn't be empty
                    dlgOk.DoModal(GUIWindowManager.ActiveWindow);
                    _folderName = name;
                    _folderPath = path;
                    return;
                }

                // Update changes
                FolderInfo(_shareFolderListItem).Name              = _folderName;
                _shareFolderListItem.Label                         = _folderName;
                FolderInfo(_shareFolderListItem).Folder            = _folderPath;
                FolderInfo(_shareFolderListItem).PinCode           = _folderPin;
                FolderInfo(_shareFolderListItem).CreateThumbs      = _folderCreateThumbs;
                FolderInfo(_shareFolderListItem).EachFolderIsMovie = _folderEachFolderIsMovie;
                FolderInfo(_shareFolderListItem).DefaultLayout     = SettingsSharesHelper.ProperLayoutFromDefault(_folderDefaultLayoutIndex);
                // Add changes to a listitem
                videosShareListcontrol.SelectedListItem.AlbumInfoTag = _shareFolderListItem.AlbumInfoTag;
                videosShareListcontrol.SelectedListItem.Label        = _folderName;
                // Sort list
                GUIListItem newItem = _shareFolderListItem;
                Sort();
                int index = videosShareListcontrol.ListItems.IndexOf(newItem);
                videosShareListcontrol.SelectedListItemIndex = index;
            }
            // Remove folder - settings saved
            if (control == btnRemove)
            {
                OnRemoveFolder();
            }
            // Reset folders - settings saved
            if (control == btnReset)
            {
                GUIDialogYesNo dlgYesNo = (GUIDialogYesNo)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_YES_NO);
                if (dlgYesNo != null)
                {
                    dlgYesNo.SetHeading(GUILocalizeStrings.Get(927));    // Warning
                    dlgYesNo.SetLine(1, GUILocalizeStrings.Get(300055)); // this will delete folders
                    dlgYesNo.DoModal(GetID);

                    if (dlgYesNo.IsConfirmed)
                    {
                        OnResetFolders();
                    }
                }
            }
        }
Beispiel #24
0
        /// <summary>
        /// Examines the current playing movie and fills in all the #tags for the skin.
        /// For movies it will look in the video database for any IMDB info
        /// For record TV programs it will look in the TVDatabase for recording info
        /// </summary>
        /// <param name="fileName">Filename of the current playing movie</param>
        /// <remarks>
        /// Function will fill in the following tags for TV programs
        /// #Play.Current.Title, #Play.Current.Plot, #Play.Current.PlotOutline #Play.Current.File, #Play.Current.Thumb, #Play.Current.Year, #Play.Current.Channel,
        ///
        /// Function will fill in the following tags for movies
        /// #Play.Current.Title, #Play.Current.Plot, #Play.Current.PlotOutline #Play.Current.File, #Play.Current.Thumb, #Play.Current.Year
        /// #Play.Current.Director, #cast, #dvdlabel, #imdbnumber, #Play.Current.Plot, #Play.Current.PlotOutline, #rating, #tagline, #votes, #credits
        /// </remarks>
        private void SetCurrentFile(string fileName)
        {
            GUIPropertyManager.RemovePlayerProperties();
            GUIPropertyManager.SetProperty("#Play.Current.Title", Util.Utils.GetFilename(fileName));
            GUIPropertyManager.SetProperty("#Play.Current.File", Util.Utils.GetFileNameWithExtension(fileName));
            GUIPropertyManager.SetProperty("#Play.Current.Thumb", string.Empty);
            GUIPropertyManager.SetProperty("#Play.Current.VideoCodec.Texture", string.Empty);
            GUIPropertyManager.SetProperty("#Play.Current.VideoResolution", string.Empty);
            GUIPropertyManager.SetProperty("#Play.Current.AudioCodec.Texture", string.Empty);
            GUIPropertyManager.SetProperty("#Play.Current.AudioChannels", string.Empty);
            GUIPropertyManager.SetProperty("#Play.Current.HasSubtitles", string.Empty);
            GUIPropertyManager.SetProperty("#Play.Current.AspectRatio", string.Empty);

            if ((g_Player.IsVideo || g_Player.IsDVD) && !g_Player.IsTV && g_Player.MediaInfo != null)
            {
                GUIPropertyManager.SetProperty("#Play.Current.VideoCodec.Texture",
                                               Util.Utils.MakeFileName(g_Player.MediaInfo.VideoCodec));
                GUIPropertyManager.SetProperty("#Play.Current.VideoResolution", g_Player.MediaInfo.VideoResolution);
                GUIPropertyManager.SetProperty("#Play.Current.AudioCodec.Texture",
                                               Util.Utils.MakeFileName(g_Player.MediaInfo.AudioCodec));
                GUIPropertyManager.SetProperty("#Play.Current.AudioChannels", g_Player.MediaInfo.AudioChannelsFriendly);
                GUIPropertyManager.SetProperty("#Play.Current.HasSubtitles", g_Player.MediaInfo.HasSubtitles.ToString());
                GUIPropertyManager.SetProperty("#Play.Current.AspectRatio", g_Player.MediaInfo.AspectRatio);
            }

            if (g_Player.IsDVD)
            {
                // for dvd's the file is in the form c:\media\movies\the matrix\video_ts\video_ts.ifo
                // first strip the \video_ts\video_ts.ifo
                string lowPath = fileName.ToLower();
                int    index   = lowPath.IndexOf("video_ts/");
                if (index < 0)
                {
                    index = lowPath.IndexOf(@"video_ts\");
                }
                if (index >= 0)
                {
                    fileName = fileName.Substring(0, index);
                    fileName = Util.Utils.RemoveTrailingSlash(fileName);

                    // get the name by stripping the first part : c:\media\movies
                    string strName = fileName;
                    int    pos     = fileName.LastIndexOfAny(new char[] { '\\', '/' });
                    if (pos >= 0 && pos + 1 < fileName.Length - 1)
                    {
                        strName = fileName.Substring(pos + 1);
                    }

                    // get the name when play DVD directly from Drive letter
                    List <GUIListItem> rootDrives = VirtualDirectories.Instance.Movies.GetRootExt();
                    for (int i = rootDrives.Count - 1; i >= 0; i--)
                    {
                        GUIListItem itemDVDroot = (GUIListItem)rootDrives[i];
                        string      itemDVD     = Path.GetPathRoot(itemDVDroot.Path);
                        itemDVD = Util.Utils.RemoveTrailingSlash(itemDVD);
                        if (itemDVD == strName && !String.IsNullOrEmpty(itemDVDroot.DVDLabel)) //cd or dvd drive
                        {
                            strName = itemDVDroot.DVDLabel;
                        }
                    }

                    GUIPropertyManager.SetProperty("#Play.Current.Title", strName);
                    GUIPropertyManager.SetProperty("#Play.Current.File", strName);

                    // construct full filename as imdb info is stored...
                    fileName += @"\VIDEO_TS\VIDEO_TS.IFO";
                }
            }

            bool   isLive    = g_Player.IsTimeShifting;
            string extension = Util.Utils.GetFileExtension(fileName).ToLower();

            if (extension.Equals(".sbe") || extension.Equals(".dvr-ms") ||
                (extension.Equals(".ts") && !isLive || g_Player.IsTVRecording))
            {
                // this is a recorded movie.
                // check the TVDatabase for the description,genre,title,...
                if (g_Player.currentTitle != "")
                {
                    GUIPropertyManager.SetProperty("#Play.Current.Title", g_Player.currentTitle);
                    GUIPropertyManager.SetProperty("#Play.Current.Plot",
                                                   g_Player.currentTitle + "\n" + g_Player.currentDescription);
                    GUIPropertyManager.SetProperty("#Play.Current.PlotOutline", g_Player.currentDescription);
                }
            }

            /*if (fileName.Substring(0, 4) == "rtsp")
             * {
             *  GUIPropertyManager.SetProperty("#Play.Current.Title", g_Player.currentTitle);
             *  GUIPropertyManager.SetProperty("#Play.Current.Plot", g_Player.currentTitle + "\n" + g_Player.currentDescription);
             *  GUIPropertyManager.SetProperty("#Play.Current.PlotOutline", g_Player.currentDescription);
             * }*/


            IMDBMovie movieDetails    = new IMDBMovie();
            bool      bMovieInfoFound = false;

            ISelectBDHandler selectBdHandler;

            if (GlobalServiceProvider.IsRegistered <ISelectBDHandler>())
            {
                selectBdHandler = GlobalServiceProvider.Get <ISelectBDHandler>();
            }
            else
            {
                selectBdHandler = new SelectBDHandler();
                GlobalServiceProvider.Add <ISelectBDHandler>(selectBdHandler);
            }

            bool playingRemoteUrl = Util.Utils.IsRemoteUrl(fileName);

            if (!g_Player.IsTVRecording && !playingRemoteUrl)
            {
                // Check if we play image file to search db with the proper filename
                if (Util.Utils.IsISOImage(fileName))
                {
                    fileName = DaemonTools.MountedIsoFile;
                }

                if (VideoDatabase.HasMovieInfo(fileName))
                {
                    VideoDatabase.GetMovieInfo(fileName, ref movieDetails);
                    bMovieInfoFound = true;
                }
                else if (File.Exists(Path.ChangeExtension(fileName, ".xml")))
                {
                    MatroskaTagInfo info = MatroskaTagHandler.Fetch(Path.ChangeExtension(fileName, ".xml"));
                    movieDetails.Title = info.title;
                    movieDetails.Plot  = info.description;
                    movieDetails.Genre = info.genre;
                    GUIPropertyManager.SetProperty("#Play.Current.Channel", info.channelName);
                    string logo = Util.Utils.GetCoverArt(Thumbs.TVChannel, info.channelName);
                    if (!Util.Utils.FileExistsInCache(logo))
                    {
                        logo = "defaultVideoBig.png";
                    }
                    GUIPropertyManager.SetProperty("#Play.Current.Thumb", logo);
                    _thumbLogo      = logo;
                    bMovieInfoFound = true;
                }
                else // Nfo support
                {
                    string path      = string.Empty;
                    int    pathIndex = 0;

                    if (fileName.ToUpperInvariant().Contains(@"\BDMV"))
                    {
                        pathIndex = fileName.ToUpperInvariant().LastIndexOf(@"\BDMV");
                        path      = fileName.Remove(pathIndex);
                    }
                    else if (fileName.ToUpperInvariant().Contains(@"\VIDEO_TS\"))
                    {
                        pathIndex = fileName.ToUpperInvariant().LastIndexOf(@"\VIDEO_TS\");
                        path      = fileName.Remove(pathIndex);
                    }
                    else if (!String.IsNullOrEmpty(fileName))
                    {
                        path = Path.GetDirectoryName(fileName);
                    }

                    IMDBMovie.FetchMovieNfo(path, fileName, ref movieDetails);

                    if (!movieDetails.IsEmpty)
                    {
                        bMovieInfoFound = true;
                    }
                }
                if (bMovieInfoFound)
                {
                    movieDetails.SetPlayProperties(true);
                }
                else
                {
                    GUIListItem item = new GUIListItem();
                    item.IsFolder = false;
                    item.Path     = fileName;
                    Util.Utils.SetThumbnails(ref item);
                    GUIPropertyManager.SetProperty("#Play.Current.Thumb", item.ThumbnailImage);

                    // Image file check to set title for OSD (non db)
                    if (VirtualDirectory.IsImageFile(Path.GetExtension(fileName)))
                    {
                        string title = Util.Utils.GetFilename(fileName, true);
                        GUIPropertyManager.SetProperty("#Play.Current.Title", title);
                    }
                    else if (fileName.ToLower().Contains("index.bdmv")) // BD folder title check
                    {
                        string title = selectBdHandler.GetDiscTitle(fileName);
                        // get the name when play BD directly from Drive letter
                        if (String.IsNullOrEmpty(title))
                        {
                            List <GUIListItem> rootDrives = VirtualDirectories.Instance.Movies.GetRootExt();
                            title = Path.GetPathRoot(fileName);
                            title = Util.Utils.RemoveTrailingSlash(title);

                            for (int i = rootDrives.Count - 1; i >= 0; i--)
                            {
                                GUIListItem itemBDroot = (GUIListItem)rootDrives[i];
                                string      itemBD     = Path.GetPathRoot(itemBDroot.Path);
                                itemBD = Util.Utils.RemoveTrailingSlash(itemBD);
                                if (itemBD == title && !String.IsNullOrEmpty(itemBDroot.DVDLabel)) //cd or dvd drive
                                {
                                    title = itemBDroot.DVDLabel;
                                }
                            }
                        }
                        GUIPropertyManager.SetProperty("#Play.Current.Title", title);
                    }
                    else if (fileName.ToLower().Contains(".mpls")) // BD folder title check (playlist)
                    {
                        // Check if index.bdmv is in the VDB
                        int    index = fileName.ToLower().LastIndexOf(@"\playlist");
                        string name  = fileName.Remove(index);
                        name = name + @"\index.bdmv";
                        if (VideoDatabase.HasMovieInfo(name))
                        {
                            VideoDatabase.GetMovieInfo(name, ref movieDetails);
                            movieDetails.SetPlayProperties();
                        }
                        else
                        {
                            string title = selectBdHandler.GetDiscTitle(fileName);
                            // get the name when play BD directly from Drive letter
                            if (String.IsNullOrEmpty(title))
                            {
                                List <GUIListItem> rootDrives = VirtualDirectories.Instance.Movies.GetRootExt();
                                title = Path.GetPathRoot(fileName);
                                title = Util.Utils.RemoveTrailingSlash(title);

                                for (int i = rootDrives.Count - 1; i >= 0; i--)
                                {
                                    GUIListItem itemBDroot = (GUIListItem)rootDrives[i];
                                    string      itemBD     = Path.GetPathRoot(itemBDroot.Path);
                                    itemBD = Util.Utils.RemoveTrailingSlash(itemBD);
                                    if (itemBD == title && !String.IsNullOrEmpty(itemBDroot.DVDLabel)) //cd or dvd drive
                                    {
                                        title = itemBDroot.DVDLabel;
                                    }
                                }
                            }
                            GUIPropertyManager.SetProperty("#Play.Current.Title", title);
                        }
                    }
                }
            }
            else if (g_Player.IsTV && g_Player.IsTimeShifting)
            {
                GUIPropertyManager.SetProperty("#Play.Current.Title", GUIPropertyManager.GetProperty("#TV.View.channel"));
                GUIPropertyManager.SetProperty("#Play.Current.Genre", GUIPropertyManager.GetProperty("#TV.View.title"));
            }
            else
            {
                GUIListItem item = new GUIListItem();
                item.IsFolder = false;
                item.Path     = fileName;
                Util.Utils.SetThumbnails(ref item);
                GUIPropertyManager.SetProperty("#Play.Current.Thumb", item.ThumbnailImage);
            }
            _thumbLogo = GUIPropertyManager.GetProperty("#Play.Current.Thumb");
        }
        /// <summary>
        /// Network share enumeration from netShare parameter resource
        /// </summary>
        /// <param name="netShare">Network resource</param>
        private void GetNetworkFolders(string netShare)
        {
            ArrayList netComputers = NetShareCollection.GetComputersOnNetwork();

            if (netComputers == null || netComputers.Count == 0)
            {
                GUIDialogOK dlgOk = (GUIDialogOK)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_OK);
                dlgOk.SetHeading(GUILocalizeStrings.Get(1020));
                dlgOk.SetLine(1, GUILocalizeStrings.Get(300056)); //No network resources found.
                dlgOk.SetLine(2, GUILocalizeStrings.Get(300057)); // Try manual search.
                dlgOk.DoModal(GetID);

                GetStringFromKeyboard(ref netShare, -1);
            }
            else
            {
                GUIDialogSelect dlg = (GUIDialogSelect)GUIWindowManager.GetWindow((int)Window.WINDOW_DIALOG_SELECT);
                if (dlg == null)
                {
                    return;
                }
                dlg.Reset();
                dlg.SetHeading(924);     // Menu
                dlg.EnableButton(true);
                dlg.SetButtonLabel(413); // manual

                // Add list to dlg menu
                foreach (string netWrkst in netComputers)
                {
                    dlg.Add(netWrkst);
                }
                // Show dialog menu
                dlg.DoModal(GetID);

                if (dlg.IsButtonPressed)
                {
                    GetStringFromKeyboard(ref netShare, -1);
                }
                else if (dlg.SelectedLabel == -1)
                {
                    return;
                }
                else
                {
                    netShare = dlg.SelectedLabelText;
                }
            }

            if (string.IsNullOrEmpty(netShare) || !netShare.StartsWith(@"\\") || (netShare.StartsWith(@"\\") && netShare.Length <= 2))
            {
                netShare = GUILocalizeStrings.Get(145);
                return;
            }
            // Get selected network resource shared folders
            _userNetFolder = netShare;
            NetShareCollection netShares = NetShareCollection.GetShares(netShare);

            SetFolderHistory();
            _folders.Clear();
            GUIListItem goBack = new GUIListItem();

            goBack.Label  = "..";
            goBack.Label2 = "..";
            _folders.Add(goBack);

            foreach (NetShare share in netShares)
            {
                if (share.IsFileSystem && share.ShareType == ShareType.Disk)
                {
                    GUIListItem netFolder = new GUIListItem();
                    string      nFolder   = Path.GetFileName(share.Root.FullName);
                    netFolder.Label  = nFolder.ToUpperInvariant();
                    netFolder.Label2 = share.Root.FullName;
                    _folders.Add(netFolder);
                }
            }
        }
        public void UpdateList()
        {
            var grabberIndex = 0;

            updateStationLogoTimer.Enabled = false;
            downloaQueue.Clear();
            GUIControl.ClearControl(GetID, listControl.GetID);
            if (grabber.Parent != null && grabber.Parent.Body.Count > 0)
            {
                var item = new GUIListItem();
                // and add station name & bitrate
                item.Label           = "..";
                item.Label2          = "(" + grabber.Parent.Body.Count.ToString() + ")";
                item.OnItemSelected += item_OnItemSelected;
                item.IsFolder        = true;
                item.IconImage       = "defaultFolderBack.png";
                item.IconImageBig    = "DefaultFolderBackBig.png";
                item.MusicTag        = null;
                listControl.Add(item);
            }
            RadioTimeOutline selected = null;

            foreach (var body in grabber.Body)
            {
                if (null != grabber.Selected && null != body && null == selected &&
                    (
                        (null != body.Url &&
                         body.Url.Equals((string)grabber.Selected, StringComparison.InvariantCultureIgnoreCase)) ||
                        (!string.IsNullOrEmpty(body.GuidId) &&
                         ((string)grabber.Selected).ToUpperInvariant().Contains(body.GuidId.ToUpperInvariant()))
                    )
                    )
                {
                    selected = body;
                }
                var item = new GUIListItem();
                // and add station name & bitrate
                item.Label           = body.Text;
                item.Label2          = body.Bitrate;
                item.ThumbnailImage  = GetStationLogoFileName(body);
                item.IconImage       = GetStationLogoFileName(body);
                item.IsFolder        = false;
                item.OnItemSelected += item_OnItemSelected;
                item.MusicTag        = body;
                listControl.Add(item);
                DownloadStationLogo(body);
                switch (body.Type)
                {
                case RadioTimeOutline.OutlineType.audio:
                    if (string.IsNullOrEmpty(item.IconImage))
                    {
                        item.IconImage    = "defaultMyRadio.png";
                        item.IconImageBig = "defaultMyRadioBig.png";
                    }
                    item.IsFolder = false;
                    item.Year     = ++grabberIndex;
                    break;

                case RadioTimeOutline.OutlineType.link:
                    if (string.IsNullOrEmpty(item.IconImage))
                    {
                        item.IconImage    = "defaultFolder.png";
                        item.IconImageBig = "defaultFolderBig.png";
                    }
                    item.IsFolder = true;
                    item.Year     = ++grabberIndex;
                    break;

                case RadioTimeOutline.OutlineType.unknow:
                {
                    item.IconImage    = "defaultFolder.png";
                    item.IconImageBig = "defaultFolderBig.png";
                }
                    item.IsFolder = true;
                    item.Year     = ++grabberIndex;
                    break;

                default:
                    break;
                }
            }

            updateStationLogoTimer.Enabled = true;
            //if (curSorting != StationSort.SortMethod.none)
            listControl.Sort(new StationSort(curSorting, mapSettings.SortAscending));

            var i = 0;

            foreach (var item in listControl.ListLayout.ListItems)
            {
                if (item.MusicTag == selected)
                {
                    break;
                }
                i++;
            }
            listControl.SelectedListItemIndex = i;

            GUIPropertyManager.SetProperty("#itemcount", grabber.Body.Count + " " + Translation.Objects);
            //GUIPropertyManager.SetProperty("#header.label", grabber.Head.Title);
            GUIPropertyManager.SetProperty("#header.label", grabber.NavigationTitle);

            if (grabber.CurentUrl.Contains("id="))
            {
                randomButton.Disabled = false;
            }
            else
            {
                randomButton.Disabled = true;
            }

            ShowPanel();
        }
        private void OnItemSelected(GUIListItem item, GUIControl parent)
        {
            if (item == null)
            {
                return;
            }

            var listItem = item.TVTag as TraktListItem;

            if (listItem == null)
            {
                return;
            }

            PreviousSelectedIndex = Facade.SelectedListItemIndex;

            switch (listItem.Type)
            {
            case "movie":
                SelectedType = TraktItemType.movie;
                PublishMovieSkinProperties(listItem);
                string fanart = TmdbCache.GetMovieBackdropFilename((item as GUICustomListItem).Images.MovieImages);
                if (!string.IsNullOrEmpty(fanart))
                {
                    GUIImageHandler.LoadFanart(backdrop, fanart);
                }
                break;

            case "show":
                SelectedType = TraktItemType.show;
                PublishShowSkinProperties(listItem);
                fanart = TmdbCache.GetShowBackdropFilename((item as GUICustomListItem).Images.ShowImages);
                if (!string.IsNullOrEmpty(fanart))
                {
                    GUIImageHandler.LoadFanart(backdrop, fanart);
                }
                break;

            case "season":
                SelectedType = TraktItemType.season;
                PublishSeasonSkinProperties(listItem);
                fanart = TmdbCache.GetShowBackdropFilename((item as GUICustomListItem).Images.ShowImages);
                if (!string.IsNullOrEmpty(fanart))
                {
                    GUIImageHandler.LoadFanart(backdrop, fanart);
                }
                break;

            case "episode":
                SelectedType = TraktItemType.episode;
                PublishEpisodeSkinProperties(listItem);
                fanart = TmdbCache.GetShowBackdropFilename((item as GUICustomListItem).Images.ShowImages);
                if (!string.IsNullOrEmpty(fanart))
                {
                    GUIImageHandler.LoadFanart(backdrop, fanart);
                }
                break;

            case "person":
                SelectedType = TraktItemType.person;
                PublishPersonSkinProperties(listItem);
                break;
            }
            GUIUtils.SetProperty("#Trakt.List.ItemType", SelectedType.ToString());
        }