void CGUIWindowVideoNav::OnPrepareFileItems(CFileItemList &items) { CGUIWindowVideoBase::OnPrepareFileItems(items); // set fanart CQueryParams params; CVideoDatabaseDirectory dir; dir.GetQueryParams(items.m_strPath,params); if (params.GetContentType() == VIDEODB_CONTENT_MUSICVIDEOS) CGUIWindowMusicNav::SetupFanart(items); NODE_TYPE node = dir.GetDirectoryChildType(items.m_strPath); // now filter as necessary bool filterWatched=false; if (node == NODE_TYPE_EPISODES || node == NODE_TYPE_SEASONS || node == NODE_TYPE_TITLE_MOVIES || node == NODE_TYPE_TITLE_TVSHOWS || node == NODE_TYPE_TITLE_MUSICVIDEOS || node == NODE_TYPE_RECENTLY_ADDED_EPISODES || node == NODE_TYPE_RECENTLY_ADDED_MOVIES || node == NODE_TYPE_RECENTLY_ADDED_MUSICVIDEOS) filterWatched = true; if (items.IsPlugin()) filterWatched = true; if (items.IsSmartPlayList()) { if (items.GetContent() == "tvshows") node = NODE_TYPE_TITLE_TVSHOWS; // so that the check below works filterWatched = true; } int watchMode = g_settings.GetWatchMode(m_vecItems->GetContent()); for (int i = 0; i < items.Size(); i++) { CFileItemPtr item = items.Get(i); if(item->HasVideoInfoTag() && (node == NODE_TYPE_TITLE_TVSHOWS || node == NODE_TYPE_SEASONS)) { if (watchMode == VIDEO_SHOW_UNWATCHED) item->GetVideoInfoTag()->m_iEpisode = item->GetPropertyInt("unwatchedepisodes"); if (watchMode == VIDEO_SHOW_WATCHED) item->GetVideoInfoTag()->m_iEpisode = item->GetPropertyInt("watchedepisodes"); item->SetProperty("numepisodes", item->GetVideoInfoTag()->m_iEpisode); } if(filterWatched) { if((watchMode==VIDEO_SHOW_WATCHED && item->GetVideoInfoTag()->m_playCount== 0) || (watchMode==VIDEO_SHOW_UNWATCHED && item->GetVideoInfoTag()->m_playCount > 0)) { items.Remove(i); i--; } } } }
void CGUIWindowVideoNav::OnDeleteItem(CFileItemPtr pItem) { if (m_vecItems->IsParentFolder()) return; if (!m_vecItems->IsVideoDb() && !pItem->IsVideoDb()) { if (!pItem->IsPath("newsmartplaylist://video") && !pItem->IsPath("special://videoplaylists/") && !pItem->IsPath("sources://video/") && !URIUtils::IsProtocol(pItem->GetPath(), "newtag")) CGUIWindowVideoBase::OnDeleteItem(pItem); } else if (StringUtils::StartsWithNoCase(pItem->GetPath(), "videodb://movies/sets/") && pItem->GetPath().size() > 22 && pItem->m_bIsFolder) { CGUIDialogYesNo* pDialog = (CGUIDialogYesNo*)g_windowManager.GetWindow(WINDOW_DIALOG_YES_NO); pDialog->SetHeading(CVariant{432}); std::string strLabel = StringUtils::Format(g_localizeStrings.Get(433).c_str(),pItem->GetLabel().c_str()); pDialog->SetLine(1, CVariant{std::move(strLabel)}); pDialog->SetLine(2, CVariant{""}); pDialog->Open(); if (pDialog->IsConfirmed()) { CFileItemList items; CDirectory::GetDirectory(pItem->GetPath(),items,"",DIR_FLAG_NO_FILE_DIRS); for (int i=0;i<items.Size();++i) OnDeleteItem(items[i]); CVideoDatabaseDirectory dir; CQueryParams params; dir.GetQueryParams(pItem->GetPath(),params); m_database.DeleteSet(params.GetSetId()); } } else if (m_vecItems->GetContent() == "tags" && pItem->m_bIsFolder) { CGUIDialogYesNo* pDialog = (CGUIDialogYesNo*)g_windowManager.GetWindow(WINDOW_DIALOG_YES_NO); pDialog->SetHeading(CVariant{432}); pDialog->SetLine(1, CVariant{ StringUtils::Format(g_localizeStrings.Get(433).c_str(), pItem->GetLabel().c_str()) }); pDialog->SetLine(2, CVariant{""}); pDialog->Open(); if (pDialog->IsConfirmed()) { CVideoDatabaseDirectory dir; CQueryParams params; dir.GetQueryParams(pItem->GetPath(), params); m_database.DeleteTag(params.GetTagId(), (VIDEODB_CONTENT_TYPE)params.GetContentType()); } } else if (m_vecItems->IsPath(CUtil::VideoPlaylistsLocation()) || m_vecItems->IsPath("special://videoplaylists/")) { pItem->m_bIsFolder = false; CFileUtils::DeleteItem(pItem); } else { if (!CGUIDialogVideoInfo::DeleteVideoItem(pItem)) return; } int itemNumber = m_viewControl.GetSelectedItem(); int select = itemNumber >= m_vecItems->Size()-1 ? itemNumber-1 : itemNumber; m_viewControl.SetSelectedItem(select); CUtil::DeleteVideoDatabaseDirectoryCache(); }
void CGUIWindowVideoNav::OnDeleteItem(CFileItemPtr pItem) { if (m_vecItems->IsParentFolder()) return; if (m_vecItems->m_strPath.Equals("special://videoplaylists/")) { if (!pItem->m_strPath.Equals("newsmartplaylist://video")) CGUIWindowVideoBase::OnDeleteItem(pItem); } else if (pItem->m_strPath.Left(14).Equals("videodb://1/7/") && pItem->m_strPath.size() > 14 && pItem->m_bIsFolder) { CGUIDialogYesNo* pDialog = (CGUIDialogYesNo*)g_windowManager.GetWindow(WINDOW_DIALOG_YES_NO); pDialog->SetLine(0, g_localizeStrings.Get(432)); CStdString strLabel; strLabel.Format(g_localizeStrings.Get(433),pItem->GetLabel()); pDialog->SetLine(1, strLabel); pDialog->SetLine(2, "");; pDialog->DoModal(); if (pDialog->IsConfirmed()) { CFileItemList items; CDirectory::GetDirectory(pItem->m_strPath,items,"",false,false,DIR_CACHE_ONCE,true,true); for (int i=0;i<items.Size();++i) OnDeleteItem(items[i]); CVideoDatabaseDirectory dir; CQueryParams params; dir.GetQueryParams(pItem->m_strPath,params); m_database.DeleteSet(params.GetSetId()); } } else { if (!DeleteItem(pItem.get())) return; CStdString strDeletePath; if (pItem->m_bIsFolder) strDeletePath=pItem->GetVideoInfoTag()->m_strPath; else strDeletePath=pItem->GetVideoInfoTag()->m_strFileNameAndPath; if (CUtil::GetFileName(strDeletePath).Equals("VIDEO_TS.IFO")) { CUtil::GetDirectory(strDeletePath.Mid(0),strDeletePath); if (strDeletePath.Right(9).Equals("VIDEO_TS/")) { CUtil::RemoveSlashAtEnd(strDeletePath); CUtil::GetDirectory(strDeletePath.Mid(0),strDeletePath); } } if (CUtil::HasSlashAtEnd(strDeletePath)) pItem->m_bIsFolder=true; if (g_guiSettings.GetBool("filelists.allowfiledeletion") && CUtil::SupportsFileOperations(strDeletePath)) { pItem->m_strPath = strDeletePath; CGUIWindowVideoBase::OnDeleteItem(pItem); } } CUtil::DeleteVideoDatabaseDirectoryCache(); DisplayEmptyDatabaseMessage(!m_database.HasContent()); }