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.
9 #include "ContextMenus.h"
11 #include "ContextMenuManager.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
;
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
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();
41 if ((it
!= items
.cend()) && DoExecute(items
, *it
))
42 return CServiceBroker::GetFavouritesService().Save(items
);
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
);
86 std::shared_ptr
<CFileItem
> ResolveFavouriteItem(const CFileItem
& item
)
88 std::shared_ptr
<CFileItem
> targetItem
{
89 CServiceBroker::GetFavouritesService().ResolveFavourite(item
)};
91 targetItem
->SetProperty("hide_add_remove_favourite", CVariant
{true});
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
;
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
;
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
)};
133 return VIDEO::UTILS::GetResumeString(*targetItem
);
138 bool CFavouritesTargetResume::IsVisible(const CFileItem
& item
) const
140 if (IsPlayMediaFavourite(item
))
142 const std::shared_ptr
<CFileItem
> targetItem
{ResolveFavouriteItem(item
)};
144 return VIDEO::UTILS::GetItemResumeInformation(*targetItem
).isResumable
;
149 bool CFavouritesTargetResume::Execute(const std::shared_ptr
<CFileItem
>& item
) const
151 const std::shared_ptr
<CFileItem
> targetItem
{ResolveFavouriteItem(*item
)};
153 return FAVOURITES_UTILS::ExecuteAction({"PlayMedia", *targetItem
, "resume"});
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
)};
176 return FAVOURITES_UTILS::ExecuteAction({"PlayMedia", *targetItem
, "noresume"});
181 bool CFavouritesTargetInfo::IsVisible(const CFileItem
& item
) const
183 const std::shared_ptr
<CFileItem
> targetItem
{ResolveFavouriteItem(item
)};
185 return UTILS::GUILIB::CGUIContentUtils::HasInfoForItem(*targetItem
);
190 bool CFavouritesTargetInfo::Execute(const std::shared_ptr
<CFileItem
>& item
) const
192 const std::shared_ptr
<CFileItem
> targetItem
{ResolveFavouriteItem(*item
)};
194 return UTILS::GUILIB::CGUIContentUtils::ShowInfoForItem(*targetItem
);
199 bool CFavouritesTargetContextMenu::IsVisible(const CFileItem
& item
) const
201 const std::shared_ptr
<CFileItem
> targetItem
{ResolveFavouriteItem(item
)};
203 return CONTEXTMENU::HasAnyMenuItemsFor(targetItem
, CContextMenuManager::MAIN
);
208 bool CFavouritesTargetContextMenu::Execute(const std::shared_ptr
<CFileItem
>& item
) const
210 const std::shared_ptr
<CFileItem
> targetItem
{ResolveFavouriteItem(*item
)};
213 CONTEXTMENU::ShowFor(targetItem
, CContextMenuManager::MAIN
);