[videodb] remove unused seasons table from episode_view
[xbmc.git] / xbmc / favourites / ContextMenus.cpp
bloba81ba5b4cb9eb2a4e431aaf5c2fdf541d522ee6d
1 /*
2 * Copyright (C) 2016-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
7 */
9 #include "ContextMenus.h"
11 #include "ContextMenuManager.h"
12 #include "FileItem.h"
13 #include "ServiceBroker.h"
14 #include "favourites/FavouritesService.h"
15 #include "favourites/FavouritesURL.h"
16 #include "favourites/FavouritesUtils.h"
17 #include "guilib/LocalizeStrings.h"
18 #include "utils/URIUtils.h"
19 #include "utils/Variant.h"
20 #include "utils/guilib/GUIContentUtils.h"
21 #include "video/VideoUtils.h"
22 #include "video/guilib/VideoGUIUtils.h"
24 using namespace CONTEXTMENU;
25 using namespace KODI;
27 bool CFavouriteContextMenuAction::IsVisible(const CFileItem& item) const
29 return URIUtils::IsProtocol(item.GetPath(), "favourites");
32 bool CFavouriteContextMenuAction::Execute(const std::shared_ptr<CFileItem>& item) const
34 CFileItemList items;
35 CServiceBroker::GetFavouritesService().GetAll(items);
37 const auto it = std::find_if(items.cbegin(), items.cend(), [&item](const auto& favourite) {
38 return favourite->GetPath() == item->GetPath();
39 });
41 if ((it != items.cend()) && DoExecute(items, *it))
42 return CServiceBroker::GetFavouritesService().Save(items);
44 return false;
47 bool CMoveUpFavourite::DoExecute(CFileItemList& items, const std::shared_ptr<CFileItem>& item) const
49 return FAVOURITES_UTILS::MoveItem(items, item, -1);
52 bool CMoveUpFavourite::IsVisible(const CFileItem& item) const
54 return CFavouriteContextMenuAction::IsVisible(item) && FAVOURITES_UTILS::ShouldEnableMoveItems();
57 bool CMoveDownFavourite::DoExecute(CFileItemList& items,
58 const std::shared_ptr<CFileItem>& item) const
60 return FAVOURITES_UTILS::MoveItem(items, item, +1);
63 bool CMoveDownFavourite::IsVisible(const CFileItem& item) const
65 return CFavouriteContextMenuAction::IsVisible(item) && FAVOURITES_UTILS::ShouldEnableMoveItems();
68 bool CRemoveFavourite::DoExecute(CFileItemList& items, const std::shared_ptr<CFileItem>& item) const
70 return FAVOURITES_UTILS::RemoveItem(items, item);
73 bool CRenameFavourite::DoExecute(CFileItemList&, const std::shared_ptr<CFileItem>& item) const
75 return FAVOURITES_UTILS::ChooseAndSetNewName(*item);
78 bool CChooseThumbnailForFavourite::DoExecute(CFileItemList&,
79 const std::shared_ptr<CFileItem>& item) const
81 return FAVOURITES_UTILS::ChooseAndSetNewThumbnail(*item);
84 namespace
86 std::shared_ptr<CFileItem> ResolveFavouriteItem(const CFileItem& item)
88 std::shared_ptr<CFileItem> targetItem{
89 CServiceBroker::GetFavouritesService().ResolveFavourite(item)};
90 if (targetItem)
91 targetItem->SetProperty("hide_add_remove_favourite", CVariant{true});
93 return targetItem;
96 bool IsPlayMediaFavourite(const CFileItem& item)
98 if (item.IsFavourite())
100 const CFavouritesURL favURL{item, -1};
101 if (favURL.IsValid())
102 return favURL.GetAction() == CFavouritesURL::Action::PLAY_MEDIA;
104 return false;
107 bool IsActivateWindowFavourite(const CFileItem& item)
109 if (item.IsFavourite())
111 const CFavouritesURL favURL{item, -1};
112 if (favURL.IsValid())
113 return favURL.GetAction() == CFavouritesURL::Action::ACTIVATE_WINDOW;
115 return false;
117 } // unnamed namespace
119 bool CFavouritesTargetBrowse::IsVisible(const CFileItem& item) const
121 return IsActivateWindowFavourite(item);
124 bool CFavouritesTargetBrowse::Execute(const std::shared_ptr<CFileItem>& item) const
126 return FAVOURITES_UTILS::ExecuteAction({*item, -1});
129 std::string CFavouritesTargetResume::GetLabel(const CFileItem& item) const
131 const std::shared_ptr<CFileItem> targetItem{ResolveFavouriteItem(item)};
132 if (targetItem)
133 return VIDEO::UTILS::GetResumeString(*targetItem);
135 return {};
138 bool CFavouritesTargetResume::IsVisible(const CFileItem& item) const
140 if (IsPlayMediaFavourite(item))
142 const std::shared_ptr<CFileItem> targetItem{ResolveFavouriteItem(item)};
143 if (targetItem)
144 return VIDEO::UTILS::GetItemResumeInformation(*targetItem).isResumable;
146 return false;
149 bool CFavouritesTargetResume::Execute(const std::shared_ptr<CFileItem>& item) const
151 const std::shared_ptr<CFileItem> targetItem{ResolveFavouriteItem(*item)};
152 if (targetItem)
153 return FAVOURITES_UTILS::ExecuteAction({"PlayMedia", *targetItem, "resume"});
155 return false;
158 std::string CFavouritesTargetPlay::GetLabel(const CFileItem& item) const
160 const std::shared_ptr<CFileItem> targetItem{ResolveFavouriteItem(item)};
161 if (targetItem && VIDEO::UTILS::GetItemResumeInformation(*targetItem).isResumable)
162 return g_localizeStrings.Get(12021); // Play from beginning
164 return g_localizeStrings.Get(208); // Play
167 bool CFavouritesTargetPlay::IsVisible(const CFileItem& item) const
169 return IsPlayMediaFavourite(item);
172 bool CFavouritesTargetPlay::Execute(const std::shared_ptr<CFileItem>& item) const
174 const std::shared_ptr<CFileItem> targetItem{ResolveFavouriteItem(*item)};
175 if (targetItem)
176 return FAVOURITES_UTILS::ExecuteAction({"PlayMedia", *targetItem, "noresume"});
178 return false;
181 bool CFavouritesTargetInfo::IsVisible(const CFileItem& item) const
183 const std::shared_ptr<CFileItem> targetItem{ResolveFavouriteItem(item)};
184 if (targetItem)
185 return UTILS::GUILIB::CGUIContentUtils::HasInfoForItem(*targetItem);
187 return false;
190 bool CFavouritesTargetInfo::Execute(const std::shared_ptr<CFileItem>& item) const
192 const std::shared_ptr<CFileItem> targetItem{ResolveFavouriteItem(*item)};
193 if (targetItem)
194 return UTILS::GUILIB::CGUIContentUtils::ShowInfoForItem(*targetItem);
196 return false;
199 bool CFavouritesTargetContextMenu::IsVisible(const CFileItem& item) const
201 const std::shared_ptr<CFileItem> targetItem{ResolveFavouriteItem(item)};
202 if (targetItem)
203 return CONTEXTMENU::HasAnyMenuItemsFor(targetItem, CContextMenuManager::MAIN);
205 return false;
208 bool CFavouritesTargetContextMenu::Execute(const std::shared_ptr<CFileItem>& item) const
210 const std::shared_ptr<CFileItem> targetItem{ResolveFavouriteItem(*item)};
211 if (targetItem)
213 CONTEXTMENU::ShowFor(targetItem, CContextMenuManager::MAIN);
214 return true;
216 return false;