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/GUIBuiltinsUtils.h"
21 #include "utils/guilib/GUIContentUtils.h"
22 #include "video/VideoUtils.h"
23 #include "video/guilib/VideoGUIUtils.h"
25 using namespace CONTEXTMENU
;
27 using namespace KODI::UTILS::GUILIB
;
29 bool CFavouriteContextMenuAction::IsVisible(const CFileItem
& item
) const
31 return URIUtils::IsProtocol(item
.GetPath(), "favourites");
34 bool CFavouriteContextMenuAction::Execute(const std::shared_ptr
<CFileItem
>& item
) const
37 CServiceBroker::GetFavouritesService().GetAll(items
);
39 const auto it
= std::find_if(items
.cbegin(), items
.cend(), [&item
](const auto& favourite
) {
40 return favourite
->GetPath() == item
->GetPath();
43 if ((it
!= items
.cend()) && DoExecute(items
, *it
))
44 return CServiceBroker::GetFavouritesService().Save(items
);
49 bool CMoveUpFavourite::DoExecute(CFileItemList
& items
, const std::shared_ptr
<CFileItem
>& item
) const
51 return FAVOURITES_UTILS::MoveItem(items
, item
, -1);
54 bool CMoveUpFavourite::IsVisible(const CFileItem
& item
) const
56 return CFavouriteContextMenuAction::IsVisible(item
) && FAVOURITES_UTILS::ShouldEnableMoveItems();
59 bool CMoveDownFavourite::DoExecute(CFileItemList
& items
,
60 const std::shared_ptr
<CFileItem
>& item
) const
62 return FAVOURITES_UTILS::MoveItem(items
, item
, +1);
65 bool CMoveDownFavourite::IsVisible(const CFileItem
& item
) const
67 return CFavouriteContextMenuAction::IsVisible(item
) && FAVOURITES_UTILS::ShouldEnableMoveItems();
70 bool CRemoveFavourite::DoExecute(CFileItemList
& items
, const std::shared_ptr
<CFileItem
>& item
) const
72 return FAVOURITES_UTILS::RemoveItem(items
, item
);
75 bool CRenameFavourite::DoExecute(CFileItemList
&, const std::shared_ptr
<CFileItem
>& item
) const
77 return FAVOURITES_UTILS::ChooseAndSetNewName(*item
);
80 bool CChooseThumbnailForFavourite::DoExecute(CFileItemList
&,
81 const std::shared_ptr
<CFileItem
>& item
) const
83 return FAVOURITES_UTILS::ChooseAndSetNewThumbnail(*item
);
88 std::shared_ptr
<CFileItem
> ResolveFavouriteItem(const CFileItem
& item
)
90 std::shared_ptr
<CFileItem
> targetItem
{
91 CServiceBroker::GetFavouritesService().ResolveFavourite(item
)};
93 targetItem
->SetProperty("hide_add_remove_favourite", CVariant
{true});
98 bool IsPlayMediaFavourite(const CFileItem
& item
)
100 if (item
.IsFavourite())
102 const CFavouritesURL favURL
{item
, -1};
103 if (favURL
.IsValid())
104 return favURL
.GetAction() == CFavouritesURL::Action::PLAY_MEDIA
;
109 bool IsActivateWindowFavourite(const CFileItem
& item
)
111 if (item
.IsFavourite())
113 const CFavouritesURL favURL
{item
, -1};
114 if (favURL
.IsValid())
115 return favURL
.GetAction() == CFavouritesURL::Action::ACTIVATE_WINDOW
;
119 } // unnamed namespace
121 bool CFavouritesTargetBrowse::IsVisible(const CFileItem
& item
) const
123 return IsActivateWindowFavourite(item
);
126 bool CFavouritesTargetBrowse::Execute(const std::shared_ptr
<CFileItem
>& item
) const
128 return FAVOURITES_UTILS::ExecuteAction({*item
, -1}, item
);
131 std::string
CFavouritesTargetResume::GetLabel(const CFileItem
& item
) const
133 const std::shared_ptr
<CFileItem
> targetItem
{ResolveFavouriteItem(item
)};
135 return VIDEO::UTILS::GetResumeString(*targetItem
);
140 bool CFavouritesTargetResume::IsVisible(const CFileItem
& item
) const
142 if (IsPlayMediaFavourite(item
))
144 const std::shared_ptr
<CFileItem
> targetItem
{ResolveFavouriteItem(item
)};
146 return VIDEO::UTILS::GetItemResumeInformation(*targetItem
).isResumable
;
151 bool CFavouritesTargetResume::Execute(const std::shared_ptr
<CFileItem
>& item
) const
153 const std::shared_ptr
<CFileItem
> targetItem
{ResolveFavouriteItem(*item
)};
155 return CGUIBuiltinsUtils::ExecutePlayMediaTryResume(targetItem
);
160 std::string
CFavouritesTargetPlay::GetLabel(const CFileItem
& item
) const
162 const std::shared_ptr
<CFileItem
> targetItem
{ResolveFavouriteItem(item
)};
163 if (targetItem
&& VIDEO::UTILS::GetItemResumeInformation(*targetItem
).isResumable
)
164 return g_localizeStrings
.Get(12021); // Play from beginning
166 return g_localizeStrings
.Get(208); // Play
169 bool CFavouritesTargetPlay::IsVisible(const CFileItem
& item
) const
171 return IsPlayMediaFavourite(item
);
174 bool CFavouritesTargetPlay::Execute(const std::shared_ptr
<CFileItem
>& item
) const
176 const std::shared_ptr
<CFileItem
> targetItem
{ResolveFavouriteItem(*item
)};
178 return CGUIBuiltinsUtils::ExecutePlayMediaNoResume(targetItem
);
183 bool CFavouritesTargetInfo::IsVisible(const CFileItem
& item
) const
185 const std::shared_ptr
<CFileItem
> targetItem
{ResolveFavouriteItem(item
)};
187 return UTILS::GUILIB::CGUIContentUtils::HasInfoForItem(*targetItem
);
192 bool CFavouritesTargetInfo::Execute(const std::shared_ptr
<CFileItem
>& item
) const
194 const std::shared_ptr
<CFileItem
> targetItem
{ResolveFavouriteItem(*item
)};
196 return UTILS::GUILIB::CGUIContentUtils::ShowInfoForItem(*targetItem
);
201 bool CFavouritesTargetContextMenu::IsVisible(const CFileItem
& item
) const
203 const std::shared_ptr
<CFileItem
> targetItem
{ResolveFavouriteItem(item
)};
205 return CONTEXTMENU::HasAnyMenuItemsFor(targetItem
, CContextMenuManager::MAIN
);
210 bool CFavouritesTargetContextMenu::Execute(const std::shared_ptr
<CFileItem
>& item
) const
212 const std::shared_ptr
<CFileItem
> targetItem
{ResolveFavouriteItem(*item
)};
215 CONTEXTMENU::ShowFor(targetItem
, CContextMenuManager::MAIN
);