summaryrefslogtreecommitdiffstats
path: root/xbmc/events/MediaLibraryEvent.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'xbmc/events/MediaLibraryEvent.cpp')
-rw-r--r--xbmc/events/MediaLibraryEvent.cpp116
1 files changed, 116 insertions, 0 deletions
diff --git a/xbmc/events/MediaLibraryEvent.cpp b/xbmc/events/MediaLibraryEvent.cpp
new file mode 100644
index 0000000..c079f5d
--- /dev/null
+++ b/xbmc/events/MediaLibraryEvent.cpp
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2015-2018 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 "MediaLibraryEvent.h"
+
+#include "ServiceBroker.h"
+#include "guilib/GUIComponent.h"
+#include "guilib/GUIWindowManager.h"
+#include "guilib/LocalizeStrings.h"
+#include "guilib/WindowIDs.h"
+#include "utils/URIUtils.h"
+
+CMediaLibraryEvent::CMediaLibraryEvent(const MediaType& mediaType, const std::string& mediaPath, const CVariant& label, const CVariant& description, EventLevel level /* = EventLevel::Information */)
+ : CUniqueEvent(label, description, level),
+ m_mediaType(mediaType),
+ m_mediaPath(mediaPath)
+{ }
+
+CMediaLibraryEvent::CMediaLibraryEvent(const MediaType& mediaType, const std::string& mediaPath, const CVariant& label, const CVariant& description, const std::string& icon, EventLevel level /* = EventLevel::Information */)
+ : CUniqueEvent(label, description, icon, level),
+ m_mediaType(mediaType),
+ m_mediaPath(mediaPath)
+{ }
+
+CMediaLibraryEvent::CMediaLibraryEvent(const MediaType& mediaType, const std::string& mediaPath, const CVariant& label, const CVariant& description, const std::string& icon, const CVariant& details, EventLevel level /* = EventLevel::Information */)
+ : CUniqueEvent(label, description, icon, details, level),
+ m_mediaType(mediaType),
+ m_mediaPath(mediaPath)
+{ }
+
+CMediaLibraryEvent::CMediaLibraryEvent(const MediaType& mediaType, const std::string& mediaPath, const CVariant& label, const CVariant& description, const std::string& icon, const CVariant& details, const CVariant& executionLabel, EventLevel level /* = EventLevel::Information */)
+ : CUniqueEvent(label, description, icon, details, executionLabel, level),
+ m_mediaType(mediaType),
+ m_mediaPath(mediaPath)
+{ }
+
+std::string CMediaLibraryEvent::GetExecutionLabel() const
+{
+ std::string executionLabel = CUniqueEvent::GetExecutionLabel();
+ if (!executionLabel.empty())
+ return executionLabel;
+
+ return g_localizeStrings.Get(24140);
+}
+
+bool CMediaLibraryEvent::Execute() const
+{
+ if (!CanExecute())
+ return false;
+
+ int windowId = -1;
+ std::string path = m_mediaPath;
+ if (m_mediaType == MediaTypeVideo || m_mediaType == MediaTypeMovie || m_mediaType == MediaTypeVideoCollection ||
+ m_mediaType == MediaTypeTvShow || m_mediaType == MediaTypeSeason || m_mediaType == MediaTypeEpisode ||
+ m_mediaType == MediaTypeMusicVideo)
+ {
+ if (path.empty())
+ {
+ if (m_mediaType == MediaTypeVideo)
+ path = "sources://video/";
+ else if (m_mediaType == MediaTypeMovie)
+ path = "videodb://movies/titles/";
+ else if (m_mediaType == MediaTypeVideoCollection)
+ path = "videodb://movies/sets/";
+ else if (m_mediaType == MediaTypeMusicVideo)
+ path = "videodb://musicvideos/titles/";
+ else if (m_mediaType == MediaTypeTvShow || m_mediaType == MediaTypeSeason || m_mediaType == MediaTypeEpisode)
+ path = "videodb://tvshows/titles/";
+ }
+ else
+ {
+ //! @todo remove the filename for now as CGUIMediaWindow::GetDirectory() can't handle it
+ if (m_mediaType == MediaTypeMovie || m_mediaType == MediaTypeMusicVideo || m_mediaType == MediaTypeEpisode)
+ path = URIUtils::GetDirectory(path);
+ }
+
+ windowId = WINDOW_VIDEO_NAV;
+ }
+ else if (m_mediaType == MediaTypeMusic || m_mediaType == MediaTypeArtist ||
+ m_mediaType == MediaTypeAlbum || m_mediaType == MediaTypeSong)
+ {
+ if (path.empty())
+ {
+ if (m_mediaType == MediaTypeMusic)
+ path = "sources://music/";
+ else if (m_mediaType == MediaTypeArtist)
+ path = "musicdb://artists/";
+ else if (m_mediaType == MediaTypeAlbum)
+ path = "musicdb://albums/";
+ else if (m_mediaType == MediaTypeSong)
+ path = "musicdb://songs/";
+ }
+ else
+ {
+ //! @todo remove the filename for now as CGUIMediaWindow::GetDirectory() can't handle it
+ if (m_mediaType == MediaTypeSong)
+ path = URIUtils::GetDirectory(path);
+ }
+
+ windowId = WINDOW_MUSIC_NAV;
+ }
+
+ if (windowId < 0)
+ return false;
+
+ std::vector<std::string> params;
+ params.push_back(path);
+ params.emplace_back("return");
+ CServiceBroker::GetGUI()->GetWindowManager().ActivateWindow(windowId, params);
+ return true;
+}