diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 18:07:22 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-10 18:07:22 +0000 |
commit | c04dcc2e7d834218ef2d4194331e383402495ae1 (patch) | |
tree | 7333e38d10d75386e60f336b80c2443c1166031d /xbmc/programs/GUIWindowPrograms.cpp | |
parent | Initial commit. (diff) | |
download | kodi-c04dcc2e7d834218ef2d4194331e383402495ae1.tar.xz kodi-c04dcc2e7d834218ef2d4194331e383402495ae1.zip |
Adding upstream version 2:20.4+dfsg.upstream/2%20.4+dfsg
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'xbmc/programs/GUIWindowPrograms.cpp')
-rw-r--r-- | xbmc/programs/GUIWindowPrograms.cpp | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/xbmc/programs/GUIWindowPrograms.cpp b/xbmc/programs/GUIWindowPrograms.cpp new file mode 100644 index 0000000..1e79c34 --- /dev/null +++ b/xbmc/programs/GUIWindowPrograms.cpp @@ -0,0 +1,185 @@ +/* + * Copyright (C) 2005-2020 Team Kodi + * This file is part of Kodi - https://kodi.tv + * + * SPDX-License-Identifier: GPL-2.0-or-later + * See LICENSES/README.md for more information. + */ + +#include "GUIWindowPrograms.h" + +#include "Autorun.h" +#include "FileItem.h" +#include "GUIPassword.h" +#include "ServiceBroker.h" +#include "Util.h" +#include "addons/gui/GUIDialogAddonInfo.h" +#include "dialogs/GUIDialogMediaSource.h" +#include "guilib/GUIComponent.h" +#include "guilib/GUIWindowManager.h" +#include "input/Key.h" +#include "media/MediaLockState.h" +#include "settings/MediaSourceSettings.h" +#include "utils/StringUtils.h" + +#define CONTROL_BTNVIEWASICONS 2 +#define CONTROL_BTNSORTBY 3 +#define CONTROL_BTNSORTASC 4 +#define CONTROL_LABELFILES 12 + +CGUIWindowPrograms::CGUIWindowPrograms(void) + : CGUIMediaWindow(WINDOW_PROGRAMS, "MyPrograms.xml") +{ + m_thumbLoader.SetObserver(this); + m_dlgProgress = NULL; + m_rootDir.AllowNonLocalSources(false); // no nonlocal shares for this window please +} + + +CGUIWindowPrograms::~CGUIWindowPrograms(void) = default; + +bool CGUIWindowPrograms::OnMessage(CGUIMessage& message) +{ + switch ( message.GetMessage() ) + { + case GUI_MSG_WINDOW_DEINIT: + { + if (m_thumbLoader.IsLoading()) + m_thumbLoader.StopThread(); + } + break; + + case GUI_MSG_WINDOW_INIT: + { + m_dlgProgress = CServiceBroker::GetGUI()->GetWindowManager().GetWindow<CGUIDialogProgress>(WINDOW_DIALOG_PROGRESS); + + // is this the first time accessing this window? + if (m_vecItems->GetPath() == "?" && message.GetStringParam().empty()) + message.SetStringParam(CMediaSourceSettings::GetInstance().GetDefaultSource("programs")); + + return CGUIMediaWindow::OnMessage(message); + } + break; + + case GUI_MSG_CLICKED: + { + if (m_viewControl.HasControl(message.GetSenderId())) // list/thumb control + { + int iAction = message.GetParam1(); + int iItem = m_viewControl.GetSelectedItem(); + if (iAction == ACTION_PLAYER_PLAY) + { + OnPlayMedia(iItem); + return true; + } + else if (iAction == ACTION_SHOW_INFO) + { + OnItemInfo(iItem); + return true; + } + } + } + break; + } + + return CGUIMediaWindow::OnMessage(message); +} + +void CGUIWindowPrograms::GetContextButtons(int itemNumber, CContextButtons &buttons) +{ + if (itemNumber < 0 || itemNumber >= m_vecItems->Size()) + return; + CFileItemPtr item = m_vecItems->Get(itemNumber); + if (item) + { + if ( m_vecItems->IsVirtualDirectoryRoot() || m_vecItems->GetPath() == "sources://programs/" ) + { + CGUIDialogContextMenu::GetContextButtons("programs", item, buttons); + } + } + CGUIMediaWindow::GetContextButtons(itemNumber, buttons); +} + +bool CGUIWindowPrograms::OnContextButton(int itemNumber, CONTEXT_BUTTON button) +{ + CFileItemPtr item = (itemNumber >= 0 && itemNumber < m_vecItems->Size()) ? m_vecItems->Get(itemNumber) : CFileItemPtr(); + + if (CGUIDialogContextMenu::OnContextButton("programs", item, button)) + { + Update(""); + return true; + } + return CGUIMediaWindow::OnContextButton(itemNumber, button); +} + +bool CGUIWindowPrograms::OnAddMediaSource() +{ + return CGUIDialogMediaSource::ShowAndAddMediaSource("programs"); +} + +bool CGUIWindowPrograms::Update(const std::string &strDirectory, bool updateFilterPath /* = true */) +{ + if (m_thumbLoader.IsLoading()) + m_thumbLoader.StopThread(); + + if (!CGUIMediaWindow::Update(strDirectory, updateFilterPath)) + return false; + + m_thumbLoader.Load(*m_vecItems); + return true; +} + +bool CGUIWindowPrograms::OnPlayMedia(int iItem, const std::string&) +{ + if ( iItem < 0 || iItem >= m_vecItems->Size() ) return false; + CFileItemPtr pItem = m_vecItems->Get(iItem); + +#ifdef HAS_DVD_DRIVE + if (pItem->IsDVD()) + return MEDIA_DETECT::CAutorun::PlayDiscAskResume(m_vecItems->Get(iItem)->GetPath()); +#endif + + if (pItem->m_bIsFolder) return false; + + return false; +} + +std::string CGUIWindowPrograms::GetStartFolder(const std::string &dir) +{ + std::string lower(dir); StringUtils::ToLower(lower); + if (lower == "plugins" || lower == "addons") + return "addons://sources/executable/"; + else if (lower == "androidapps") + return "androidapp://sources/apps/"; + + SetupShares(); + VECSOURCES shares; + m_rootDir.GetSources(shares); + bool bIsSourceName = false; + int iIndex = CUtil::GetMatchingSource(dir, shares, bIsSourceName); + if (iIndex > -1) + { + if (iIndex < static_cast<int>(shares.size()) && shares[iIndex].m_iHasLock == LOCK_STATE_LOCKED) + { + CFileItem item(shares[iIndex]); + if (!g_passwordManager.IsItemUnlocked(&item,"programs")) + return ""; + } + if (bIsSourceName) + return shares[iIndex].strPath; + return dir; + } + return CGUIMediaWindow::GetStartFolder(dir); +} + +void CGUIWindowPrograms::OnItemInfo(int iItem) +{ + if (iItem < 0 || iItem >= m_vecItems->Size()) + return; + + CFileItemPtr item = m_vecItems->Get(iItem); + if (!m_vecItems->IsPlugin() && (item->IsPlugin() || item->IsScript())) + { + CGUIDialogAddonInfo::ShowForItem(item); + } +} |