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 CFileItemHandler::FillDetails(ISerializable* info, CFileItemPtr item, const Value& fields, Value &result) { if (info == NULL || fields.size() == 0) return; CVariant data; info->Serialize(data); Value serialization; data.toJsonValue(serialization); for (unsigned int i = 0; i < fields.size(); i++) { CStdString field = fields[i].asString(); if (item) { if (item->IsAlbum() && item->HasProperty("album_" + field)) { if (field == "rating") result[field] = item->GetPropertyInt("album_rating"); else if (field == "label") result["album_label"] = item->GetProperty("album_label"); else result[field] = item->GetProperty("album_" + field); continue; } if (item->HasProperty("artist_" + field)) { result[field] = item->GetProperty("artist_" + field); continue; } if (field == "fanart") { CStdString cachedFanArt = item->GetCachedFanart(); if (!cachedFanArt.IsEmpty()) { result["fanart"] = cachedFanArt.c_str(); } continue; } } if (serialization.isMember(field) && !result.isMember(field)) result[field] = serialization[field]; } }
void CGUIDialogPVRChannelManager::SaveList() // XXX investigate: renumbering doesn't work { if (!m_bContainsChanges) return; CPVRDatabase *database = CPVRManager::Get()->GetTVDatabase(); if (!database || !database->Open()) return; CGUIDialogProgress* pDlgProgress = (CGUIDialogProgress*)g_windowManager.GetWindow(WINDOW_DIALOG_PROGRESS); pDlgProgress->SetHeading(190); pDlgProgress->SetLine(0, ""); pDlgProgress->SetLine(1, 328); pDlgProgress->SetLine(2, ""); pDlgProgress->StartModal(); pDlgProgress->Progress(); pDlgProgress->SetPercentage(0); int iActiveChannels = 0; for (int iListPtr = 0; iListPtr < m_channelItems->Size(); iListPtr++) { if (m_channelItems->Get(iListPtr)->GetPropertyBOOL("ActiveChannel")) ++iActiveChannels; } // int iNextChannelNumber = 1; // int iNextHiddenChannelNumber = iActiveChannels + 1; bool bHasChangedItems = false; for (int iListPtr = 0; iListPtr < m_channelItems->Size(); iListPtr++) { bool bChanged = false; CFileItemPtr pItem = m_channelItems->Get(iListPtr); if (!pItem) continue; CPVRChannel *channel = pItem->GetPVRChannelInfoTag(); if (!channel) { //TODO add new channel continue; } /* get values from the form */ bool bHidden = !pItem->GetPropertyBOOL("ActiveChannel"); bool bVirtual = pItem->GetPropertyBOOL("Virtual"); bool bEPGEnabled = pItem->GetPropertyBOOL("UseEPG"); int iEPGSource = pItem->GetPropertyInt("EPGSource"); CStdString strChannelName = pItem->GetProperty("Name"); CStdString strIconPath = pItem->GetProperty("Icon"); CStdString strStreamURL = pItem->GetProperty("StreamURL"); /* set new values in the channel tag */ // TODO // if (bHidden) // bChanged = channel->SetChannelNumber(iNextHiddenChannelNumber++) || bChanged; // else // bChanged = channel->SetChannelNumber(iNextChannelNumber++) || bChanged; bChanged = channel->SetChannelName(strChannelName) || bChanged; bChanged = channel->SetHidden(bHidden) || bChanged; bChanged = channel->SetIconPath(strIconPath) || bChanged; if (bVirtual) bChanged = channel->SetStreamURL(strStreamURL) || bChanged; if (iEPGSource == 0) bChanged = channel->SetEPGScraper("client") || bChanged; // TODO add other scrapers bChanged = channel->SetEPGEnabled(bEPGEnabled) || bChanged; if (bChanged) { bHasChangedItems = true; channel->Persist(true); } pItem->SetProperty("Changed", false); pDlgProgress->SetPercentage(iListPtr * 100 / m_channelItems->Size()); } if (bHasChangedItems) { database->CommitInsertQueries(); CPVRManager::Get()->Start(); // XXX not a nice way to refresh the channels, but works for now } database->Close(); m_bContainsChanges = false; pDlgProgress->Close(); }
bool CGUIDialogBoxeeCtx::HandleQualityList() { const CFileItemList* linksFileItemList = m_item.GetLinksList(); if (!linksFileItemList) { return true; } if (linksFileItemList->Size() == 1) { return true; } int FocusedItem = 0; m_pDlgVideoQuality = (CGUIDialogBoxeeVideoQuality*)g_windowManager.GetWindow(WINDOW_DIALOG_BOXEE_VIDEO_QUALITY); m_pDlgVideoQuality->Reset(); for (int i=0; i<linksFileItemList->Size(); i++) { CFileItemPtr linkFileItemToAdd = linksFileItemList->Get(i); m_pDlgVideoQuality->Add((*linkFileItemToAdd)); // if the user ask for a different quality - switch to a different link if (m_item.GetPropertyInt("quality") ==linkFileItemToAdd->GetPropertyInt("quality")) { FocusedItem = i; } } m_pDlgVideoQuality->ChangeDialogType(LIST_CVQ_DIALOG); m_pDlgVideoQuality->SetFocusedItem(FocusedItem); m_pDlgVideoQuality->DoModal(); if (m_pDlgVideoQuality->IsCanceled()) { return false; } int chosenItemPos = m_pDlgVideoQuality->GetSelectedItemPos(); CFileItemPtr chosenItem = linksFileItemList->Get(chosenItemPos); if(m_pDlgVideoQuality->GetSavePerference()) { BOXEE::Boxee::GetInstance().GetMetadataEngine().UpdateProviderPerf(chosenItem->GetProperty("link-provider"),chosenItem->GetPropertyInt("quality")); } // if the user ask for a different quality - switch to a different link if (m_item.GetPropertyInt("quality") !=chosenItem->GetPropertyInt("quality")) { CLog::Log(LOGDEBUG,"CGUIDialogBoxeeCtx::HandleQualityList change quality to %d", chosenItem->GetPropertyInt("quality")); if (chosenItem.get() == NULL) { CLog::Log(LOGERROR,"CGUIDialogBoxeeMediaAction::OnPlayMedia choose NULL item"); return false; } // copy the relevant properties from the chosen item m_item.m_strPath = chosenItem->m_strPath; m_item.SetProperty("link-boxeetype", chosenItem->GetProperty("link-boxeetype")); m_item.SetProperty("link-provider", chosenItem->GetProperty("link-provider")); m_item.SetProperty("link-providername", chosenItem->GetProperty("link-providername")); m_item.SetProperty("link-providerthumb", chosenItem->GetProperty("link-providerthumb")); m_item.SetProperty("link-countrycodes", chosenItem->GetProperty("link-countrycodes")); m_item.SetProperty("link-countryrel", chosenItem->GetPropertyBOOL("link-countryrel")); m_item.SetProperty("quality-lbl", chosenItem->GetProperty("quality-lbl")); m_item.SetProperty("quality", chosenItem->GetPropertyInt("quality")); OnPlay(); } return true; }