CStdString CProgramThumbLoader::GetLocalThumb(const CFileItem &item) { // look for the thumb if (item.IsShortCut()) { CShortcut shortcut; if ( shortcut.Create( item.GetPath() ) ) { // use the shortcut's thumb if (!shortcut.m_strThumb.IsEmpty()) return shortcut.m_strThumb; else { CFileItem cut(shortcut.m_strPath,false); if (FillThumb(cut)) return cut.GetThumbnailImage(); } } } else if (item.m_bIsFolder) { CStdString folderThumb = item.GetFolderThumb(); if (XFILE::CFile::Exists(folderThumb)) return folderThumb; } else { CStdString fileThumb(item.GetTBNFile()); if (CFile::Exists(fileThumb)) return fileThumb; } return ""; }
bool CGUIWindowPrograms::OnContextButton(int itemNumber, CONTEXT_BUTTON button) { CFileItemPtr item = (itemNumber >= 0 && itemNumber < m_vecItems->Size()) ? m_vecItems->Get(itemNumber) : CFileItemPtr(); if (item && m_vecItems->IsVirtualDirectoryRoot()) { if (CGUIDialogContextMenu::OnContextButton("programs", item, button)) { Update(""); return true; } } switch (button) { case CONTEXT_BUTTON_RENAME: { CStdString strDescription; CShortcut cut; if (item->IsShortCut()) { cut.Create(item->GetPath()); strDescription = cut.m_strLabel; } else strDescription = item->GetLabel(); if (CGUIDialogKeyboard::ShowAndGetInput(strDescription, g_localizeStrings.Get(16008), false)) { if (item->IsShortCut()) { cut.m_strLabel = strDescription; cut.Save(item->GetPath()); } else { // SetXBEDescription will truncate to 40 characters. //CUtil::SetXBEDescription(item->GetPath(),strDescription); //m_database.SetDescription(item->GetPath(),strDescription); } Update(m_vecItems->GetPath()); } return true; } case CONTEXT_BUTTON_GOTO_ROOT: Update(""); return true; case CONTEXT_BUTTON_LAUNCH: OnClick(itemNumber); return true; case CONTEXT_BUTTON_INFO: OnInfo(itemNumber); return true; default: break; } return CGUIMediaWindow::OnContextButton(itemNumber, button); }
bool CGUIWindowPrograms::OnContextButton(int itemNumber, CONTEXT_BUTTON button) { CFileItemPtr item = (itemNumber >= 0 && itemNumber < m_vecItems->Size()) ? m_vecItems->Get(itemNumber) : CFileItemPtr(); if (item && m_vecItems->IsVirtualDirectoryRoot()) { if (CGUIDialogContextMenu::OnContextButton("programs", item, button)) { Update(""); return true; } } switch (button) { case CONTEXT_BUTTON_RENAME: { CStdString strDescription; CShortcut cut; if (item->IsShortCut()) { cut.Create(item->GetPath()); strDescription = cut.m_strLabel; } else strDescription = item->GetLabel(); if (CGUIDialogKeyboard::ShowAndGetInput(strDescription, g_localizeStrings.Get(16008), false)) { if (item->IsShortCut()) { cut.m_strLabel = strDescription; cut.Save(item->GetPath()); } else { // SetXBEDescription will truncate to 40 characters. CUtil::SetXBEDescription(item->GetPath(),strDescription); m_database.SetDescription(item->GetPath(),strDescription); } Update(m_vecItems->GetPath()); } return true; } case CONTEXT_BUTTON_TRAINER_OPTIONS: { DWORD dwTitleId = CUtil::GetXbeID(item->GetPath()); if (CGUIDialogTrainerSettings::ShowForTitle(dwTitleId,&m_database)) Update(m_vecItems->GetPath()); return true; } case CONTEXT_BUTTON_SCAN_TRAINERS: { PopulateTrainersList(); Update(m_vecItems->GetPath()); return true; } case CONTEXT_BUTTON_SETTINGS: g_windowManager.ActivateWindow(WINDOW_SETTINGS_MYPROGRAMS); return true; case CONTEXT_BUTTON_GOTO_ROOT: Update(""); return true; case CONTEXT_BUTTON_LAUNCH: OnClick(itemNumber); return true; case CONTEXT_BUTTON_SYNOPSIS: { if (CFile::Exists("special://xbmc/system/scripts/XBMC4Gamers Extras/Synopsis/default.py")) { CBuiltins::Execute("runscript(special://xbmc/system/scripts/XBMC4Gamers Extras/Synopsis/default.py)"); } else { CBuiltins::Execute("runscript(special://xbmc/system/scripts/Synopsis/default.py)"); } CBuiltins::Execute("ActivateWindow(1101)"); return true; } case CONTEXT_BUTTON_GAMESAVES: { CStdString strTitleID; CStdString strGameSavepath; strTitleID.Format("%08X",CUtil::GetXbeID(item->GetPath())); URIUtils::AddFileToFolder("E:\\udata\\",strTitleID,strGameSavepath); g_windowManager.ActivateWindow(WINDOW_GAMESAVES,strGameSavepath); return true; } case CONTEXT_BUTTON_LAUNCH_IN: OnChooseVideoModeAndLaunch(itemNumber); return true; default: break; } return CGUIMediaWindow::OnContextButton(itemNumber, button); }
bool CGUIWindowPrograms::GetDirectory(const CStdString &strDirectory, CFileItemList &items) { bool bFlattened=false; if (URIUtils::IsDVD(strDirectory)) { CStdString strPath; URIUtils::AddFileToFolder(strDirectory,"default.xbe",strPath); if (CFile::Exists(strPath)) // flatten dvd { CFileItemPtr item(new CFileItem("default.xbe")); item->SetPath(strPath); items.Add(item); items.SetPath(strDirectory); bFlattened = true; } } if (!bFlattened) if (!CGUIMediaWindow::GetDirectory(strDirectory, items)) return false; if (items.IsVirtualDirectoryRoot()) { items.SetLabel(""); return true; } if (strDirectory.Equals("plugin://programs/")) { items.SetContent("plugins"); items.SetLabel(g_localizeStrings.Get(24001)); } // flatten any folders m_database.BeginTransaction(); DWORD dwTick=timeGetTime(); bool bProgressVisible = false; for (int i = 0; i < items.Size(); i++) { CStdString shortcutPath; CFileItemPtr item = items[i]; if (!bProgressVisible && timeGetTime()-dwTick>1500 && m_dlgProgress) { // tag loading takes more then 1.5 secs, show a progress dialog m_dlgProgress->SetHeading(189); m_dlgProgress->SetLine(0, 20120); m_dlgProgress->SetLine(1,""); m_dlgProgress->SetLine(2, item->GetLabel()); if (!g_guiSettings.GetBool("mygames.slowgameparsing")) { m_dlgProgress->StartModal(); } bProgressVisible = true; } if (bProgressVisible) { m_dlgProgress->SetLine(2,item->GetLabel()); m_dlgProgress->Progress(); } if (item->m_bIsFolder && !item->IsParentFolder() && !item->IsPlugin() && g_guiSettings.GetBool("mygames.slowgameparsing")) { // folder item - let's check for a default.xbe file, and flatten if we have one CStdString defaultXBE; URIUtils::AddFileToFolder(item->GetPath(), "default.xbe", defaultXBE); item->SetPath(defaultXBE); item->m_bIsFolder = false; } if (item->m_bIsFolder && !item->IsParentFolder() && !item->IsPlugin() && !g_guiSettings.GetBool("mygames.slowgameparsing")) { // folder item - let's check for a default.xbe file, and flatten if we have one CStdString defaultXBE; URIUtils::AddFileToFolder(item->GetPath(), "default.xbe", defaultXBE); if (CFile::Exists(defaultXBE)) { // yes, format the item up item->SetPath(defaultXBE); item->m_bIsFolder = false; } } else if (item->IsShortCut()) { // resolve the shortcut to set it's description etc. // and save the old shortcut path (so we can reassign it later) CShortcut cut; if (cut.Create(item->GetPath())) { shortcutPath = item->GetPath(); item->SetPath(cut.m_strPath); item->SetThumbnailImage(cut.m_strThumb); LABEL_MASKS labelMasks; m_guiState->GetSortMethodLabelMasks(labelMasks); CLabelFormatter formatter("", labelMasks.m_strLabel2File); if (!cut.m_strLabel.IsEmpty()) { item->SetLabel(cut.m_strLabel); __stat64 stat; if (CFile::Stat(item->GetPath(),&stat) == 0) item->m_dwSize = stat.st_size; formatter.FormatLabel2(item.get()); item->SetLabelPreformated(true); } } } if (item->IsXBE()) { if (URIUtils::GetFileName(item->GetPath()).Equals("default_ffp.xbe")) { m_vecItems->Remove(i--); continue; } // add to database if not already there DWORD dwTitleID = item->IsOnDVD() ? 0 : m_database.GetProgramInfo(item.get()); if (!dwTitleID) { CStdString description; if (CUtil::GetXBEDescription(item->GetPath(), description) && (!item->IsLabelPreformated() && !item->GetLabel().IsEmpty())) { item->SetLabel(description); if (!g_guiSettings.GetBool("mygames.slowgameparsing")) { CLog::Log(LOGNOTICE,"Added to database: %s",description.c_str()); } } dwTitleID = CUtil::GetXbeID(item->GetPath()); if (!item->IsOnDVD()) m_database.AddProgramInfo(item.get(), dwTitleID); } // SetOverlayIcons() if (m_database.ItemHasTrainer(dwTitleID)) { if (m_database.GetActiveTrainer(dwTitleID) != "") item->SetOverlayImage(CGUIListItem::ICON_OVERLAY_TRAINED); else item->SetOverlayImage(CGUIListItem::ICON_OVERLAY_HAS_TRAINER); } } if (!shortcutPath.IsEmpty()) item->SetPath(shortcutPath); } m_database.CommitTransaction(); // set the cached thumbs items.SetThumbnailImage(""); items.SetCachedProgramThumbs(); items.SetCachedProgramThumb(); if (!items.HasThumbnail()) items.SetUserProgramThumb(); if (bProgressVisible) m_dlgProgress->Close(); return true; }
bool CGUIWindowPrograms::GetDirectory(const CStdString &strDirectory, CFileItemList &items) { #ifdef __APPLE__ // Launch Mac OS X apps if (Cocoa_IsAppBundle(strDirectory.c_str())) { if (strDirectory.Find("/Front Row.app/") > 0) { PlexRemoteHelper::Get().Stop(); Cocoa_LaunchFrontRow(); return true; } else { // Special cases for app compatibility if ((strDirectory.Find("/DVD Player.app/") > 0) || (strDirectory.Find("/iTunes.app/") > 0) || (strDirectory.Find("/EyeTV.app/") > 0)) PlexRemoteHelper::Get().Stop(); Cocoa_LaunchApp(strDirectory.c_str()); return true; } } // Launch Automator workflows if (Cocoa_IsWflowBundle(strDirectory.c_str())) { PlexRemoteHelper::Get().Stop(); Cocoa_LaunchAutomatorWorkflow(strDirectory.c_str()); return true; } #endif bool bFlattened=false; if (CUtil::IsDVD(strDirectory)) { CStdString strPath; CUtil::AddFileToFolder(strDirectory,"default.xbe",strPath); if (CFile::Exists(strPath)) // flatten dvd { CFileItemPtr item(new CFileItem("default.xbe")); item->m_strPath = strPath; items.Add(item); items.m_strPath=strDirectory; bFlattened = true; } } if (!bFlattened) if (!CGUIMediaWindow::GetDirectory(strDirectory, items)) return false; if (items.IsVirtualDirectoryRoot()) { // Set thumbnail images for OS X apps & workflows added as sources for (int i = 0; i < items.Size(); i++) { CFileItemPtr item = items[i]; if (item->m_strPath.Find(".app/") > 0) { //Get the app's icon CStdString appIcon = Cocoa_GetAppIcon(item->m_strPath.c_str()); if (appIcon != NULL) item->SetThumbnailImage(appIcon); } if (item->m_strPath.Find(".workflow/") > 0) item->SetThumbnailImage(Cocoa_GetIconFromBundle("/Applications/Automator.app", "AutomatorDocument")); } return true; } // flatten any folders m_database.BeginTransaction(); DWORD dwTick=timeGetTime(); bool bProgressVisible = false; for (int i = 0; i < items.Size(); i++) { CStdString shortcutPath; CFileItemPtr item = items[i]; if (!bProgressVisible && timeGetTime()-dwTick>1500 && m_dlgProgress) { // tag loading takes more then 1.5 secs, show a progress dialog m_dlgProgress->SetHeading(189); m_dlgProgress->SetLine(0, 20120); m_dlgProgress->SetLine(1,""); m_dlgProgress->SetLine(2, item->GetLabel()); m_dlgProgress->StartModal(); bProgressVisible = true; } if (bProgressVisible) { m_dlgProgress->SetLine(2,item->GetLabel()); m_dlgProgress->Progress(); } if (item->m_bIsFolder && !item->IsParentFolder()) { // folder item - let's check for a default.xbe file, and flatten if we have one CStdString defaultXBE; CUtil::AddFileToFolder(item->m_strPath, "default.xbe", defaultXBE); if (CFile::Exists(defaultXBE)) { // yes, format the item up item->m_strPath = defaultXBE; item->m_bIsFolder = false; } } else if (item->IsShortCut()) { // resolve the shortcut to set it's description etc. // and save the old shortcut path (so we can reassign it later) CShortcut cut; if (cut.Create(item->m_strPath)) { shortcutPath = item->m_strPath; item->m_strPath = cut.m_strPath; item->SetThumbnailImage(cut.m_strThumb); LABEL_MASKS labelMasks; m_guiState->GetSortMethodLabelMasks(labelMasks); CLabelFormatter formatter("", labelMasks.m_strLabel2File); if (!cut.m_strLabel.IsEmpty()) { item->SetLabel(cut.m_strLabel); struct __stat64 stat; if (CFile::Stat(item->m_strPath,&stat) == 0) item->m_dwSize = stat.st_size; formatter.FormatLabel2(item.get()); item->SetLabelPreformated(true); } } } if (!shortcutPath.IsEmpty()) item->m_strPath = shortcutPath; // Special case for OS X application bundles if (item->GetLabel().Find(".app") > 0) { //Remove .app from the end of the label CStdString itemLabel = item->GetLabel(); CUtil::RemoveExtension(itemLabel); item->SetLabel(itemLabel); //Get the app's icon CStdString appIcon = Cocoa_GetAppIcon(item->m_strPath.c_str()); if (appIcon != NULL) item->SetThumbnailImage(appIcon); } // Special case for Automator workflows if (item->GetLabel().Find(".workflow") > 0) { CStdString itemLabel = item->GetLabel(); CUtil::RemoveExtension(itemLabel); item->SetLabel(itemLabel); item->SetThumbnailImage(Cocoa_GetIconFromBundle("/Applications/Automator.app", "AutomatorDocument")); } } m_database.CommitTransaction(); // set the cached thumbs items.SetThumbnailImage(""); items.SetCachedProgramThumbs(); items.SetCachedProgramThumb(); if (!items.HasThumbnail()) items.SetUserProgramThumb(); if (bProgressVisible) m_dlgProgress->Close(); return true; }