/* End PBXAggregateTarget section */
/* Begin PBXBuildFile section */
+ 0E2D4644170F246600AEFF7A /* FavouritesDirectory.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0E2D4642170F246600AEFF7A /* FavouritesDirectory.cpp */; };
183FDF8A11AF0B0500B81E9C /* PluginSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 183FDF8811AF0B0500B81E9C /* PluginSource.cpp */; };
18404DA61396C31B00863BBA /* SlingboxLib.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 18404DA51396C31B00863BBA /* SlingboxLib.a */; };
1840B74D13993D8A007C848B /* JSONVariantParser.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1840B74B13993D8A007C848B /* JSONVariantParser.cpp */; };
DFF0F43817528350002DA3A4 /* DatabaseManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C1D682715A7D2FD00658B65 /* DatabaseManager.cpp */; };
DFF0F43917528350002DA3A4 /* DbUrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 36A9466115CF1FA600727135 /* DbUrl.cpp */; };
DFF0F43A17528350002DA3A4 /* DynamicDll.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E168C0D25F9FA00618676 /* DynamicDll.cpp */; };
- DFF0F43B17528350002DA3A4 /* Favourites.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E16900D25F9FA00618676 /* Favourites.cpp */; };
DFF0F43C17528350002DA3A4 /* FileItem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E16920D25F9FA00618676 /* FileItem.cpp */; };
DFF0F43D17528350002DA3A4 /* GUIInfoManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E1E3E0D25F9FD00618676 /* GUIInfoManager.cpp */; };
DFF0F43E17528350002DA3A4 /* GUILargeTextureManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E17EE0D25F9FA00618676 /* GUILargeTextureManager.cpp */; };
E38E1FFA0D25F9FD00618676 /* DetectDVDType.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E16840D25F9FA00618676 /* DetectDVDType.cpp */; };
E38E1FFB0D25F9FD00618676 /* DNSNameCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E16890D25F9FA00618676 /* DNSNameCache.cpp */; };
E38E1FFC0D25F9FD00618676 /* DynamicDll.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E168C0D25F9FA00618676 /* DynamicDll.cpp */; };
- E38E1FFE0D25F9FD00618676 /* Favourites.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E16900D25F9FA00618676 /* Favourites.cpp */; };
E38E1FFF0D25F9FD00618676 /* FileItem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E16920D25F9FA00618676 /* FileItem.cpp */; };
E38E20010D25F9FD00618676 /* MemBufferCache.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E16970D25F9FA00618676 /* MemBufferCache.cpp */; };
E38E20020D25F9FD00618676 /* CacheStrategy.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E16990D25F9FA00618676 /* CacheStrategy.cpp */; };
E4991533174E642900741B6D /* DatabaseManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 7C1D682715A7D2FD00658B65 /* DatabaseManager.cpp */; };
E4991534174E642900741B6D /* DbUrl.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 36A9466115CF1FA600727135 /* DbUrl.cpp */; };
E4991535174E642900741B6D /* DynamicDll.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E168C0D25F9FA00618676 /* DynamicDll.cpp */; };
- E4991536174E642900741B6D /* Favourites.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E16900D25F9FA00618676 /* Favourites.cpp */; };
E4991537174E642900741B6D /* FileItem.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E16920D25F9FA00618676 /* FileItem.cpp */; };
E4991538174E642900741B6D /* GUIInfoManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E1E3E0D25F9FD00618676 /* GUIInfoManager.cpp */; };
E4991539174E642900741B6D /* GUILargeTextureManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E38E17EE0D25F9FA00618676 /* GUILargeTextureManager.cpp */; };
/* End PBXContainerItemProxy section */
/* Begin PBXFileReference section */
+ 0E2D4642170F246600AEFF7A /* FavouritesDirectory.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FavouritesDirectory.cpp; sourceTree = "<group>"; };
+ 0E2D4643170F246600AEFF7A /* FavouritesDirectory.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FavouritesDirectory.h; sourceTree = "<group>"; };
0E30286C1759FCC200D93596 /* SettingsManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SettingsManager.h; sourceTree = "<group>"; };
18308CB41303370800AA309E /* stat_utf8.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stat_utf8.h; sourceTree = "<group>"; };
18308CB51303370800AA309E /* stdio_utf8.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = stdio_utf8.h; sourceTree = "<group>"; };
E38E168A0D25F9FA00618676 /* DNSNameCache.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DNSNameCache.h; sourceTree = "<group>"; };
E38E168C0D25F9FA00618676 /* DynamicDll.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DynamicDll.cpp; sourceTree = "<group>"; };
E38E168D0D25F9FA00618676 /* DynamicDll.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DynamicDll.h; sourceTree = "<group>"; };
- E38E16900D25F9FA00618676 /* Favourites.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Favourites.cpp; sourceTree = "<group>"; };
- E38E16910D25F9FA00618676 /* Favourites.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Favourites.h; sourceTree = "<group>"; };
E38E16920D25F9FA00618676 /* FileItem.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FileItem.cpp; sourceTree = "<group>"; };
E38E16930D25F9FA00618676 /* FileItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileItem.h; sourceTree = "<group>"; };
E38E16970D25F9FA00618676 /* MemBufferCache.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = MemBufferCache.cpp; sourceTree = "<group>"; };
36A9466215CF1FA600727135 /* DbUrl.h */,
E38E168C0D25F9FA00618676 /* DynamicDll.cpp */,
E38E168D0D25F9FA00618676 /* DynamicDll.h */,
- E38E16900D25F9FA00618676 /* Favourites.cpp */,
- E38E16910D25F9FA00618676 /* Favourites.h */,
E38E16920D25F9FA00618676 /* FileItem.cpp */,
E38E16930D25F9FA00618676 /* FileItem.h */,
E38E1E3E0D25F9FD00618676 /* GUIInfoManager.cpp */,
E38E16B10D25F9FA00618676 /* DirectoryHistory.h */,
E38E16B40D25F9FA00618676 /* DllLibCurl.cpp */,
E38E16B50D25F9FA00618676 /* DllLibCurl.h */,
+ 0E2D4642170F246600AEFF7A /* FavouritesDirectory.cpp */,
+ 0E2D4643170F246600AEFF7A /* FavouritesDirectory.h */,
E38E16BA0D25F9FA00618676 /* File.cpp */,
E38E16BB0D25F9FA00618676 /* File.h */,
DF93D6671444A8B0007C6459 /* FileCache.cpp */,
E38E1FFA0D25F9FD00618676 /* DetectDVDType.cpp in Sources */,
E38E1FFB0D25F9FD00618676 /* DNSNameCache.cpp in Sources */,
E38E1FFC0D25F9FD00618676 /* DynamicDll.cpp in Sources */,
- E38E1FFE0D25F9FD00618676 /* Favourites.cpp in Sources */,
E38E1FFF0D25F9FD00618676 /* FileItem.cpp in Sources */,
E38E20010D25F9FD00618676 /* MemBufferCache.cpp in Sources */,
E38E20020D25F9FD00618676 /* CacheStrategy.cpp in Sources */,
820023DB171A28A300667D1C /* OSXTextInputResponder.mm in Sources */,
DF529BAE1741697B00523FB4 /* Environment.cpp in Sources */,
DFE4095B17417FDF00473BD9 /* LegacyPathTranslation.cpp in Sources */,
+ 0E2D4644170F246600AEFF7A /* FavouritesDirectory.cpp in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
DFF0F43817528350002DA3A4 /* DatabaseManager.cpp in Sources */,
DFF0F43917528350002DA3A4 /* DbUrl.cpp in Sources */,
DFF0F43A17528350002DA3A4 /* DynamicDll.cpp in Sources */,
- DFF0F43B17528350002DA3A4 /* Favourites.cpp in Sources */,
DFF0F43C17528350002DA3A4 /* FileItem.cpp in Sources */,
DFF0F43D17528350002DA3A4 /* GUIInfoManager.cpp in Sources */,
DFF0F43E17528350002DA3A4 /* GUILargeTextureManager.cpp in Sources */,
E4991533174E642900741B6D /* DatabaseManager.cpp in Sources */,
E4991534174E642900741B6D /* DbUrl.cpp in Sources */,
E4991535174E642900741B6D /* DynamicDll.cpp in Sources */,
- E4991536174E642900741B6D /* Favourites.cpp in Sources */,
E4991537174E642900741B6D /* FileItem.cpp in Sources */,
E4991538174E642900741B6D /* GUIInfoManager.cpp in Sources */,
E4991539174E642900741B6D /* GUILargeTextureManager.cpp in Sources */,
<ClCompile Include="..\..\xbmc\epg\EpgInfoTag.cpp" />
<ClCompile Include="..\..\xbmc\epg\EpgSearchFilter.cpp" />
<ClCompile Include="..\..\xbmc\epg\GUIEPGGridContainer.cpp" />
- <ClCompile Include="..\..\xbmc\Favourites.cpp" />
<ClCompile Include="..\..\xbmc\FileItem.cpp" />
<ClCompile Include="..\..\xbmc\filesystem\AddonsDirectory.cpp" />
<ClCompile Include="..\..\xbmc\filesystem\AFPDirectory.cpp" />
<ClCompile Include="..\..\xbmc\filesystem\DllLibCurl.cpp" />
<ClCompile Include="..\..\xbmc\filesystem\File.cpp" />
<ClCompile Include="..\..\xbmc\filesystem\FileCache.cpp" />
+ <ClCompile Include="..\..\xbmc\filesystem\FavouritesDirectory.cpp" />
<ClCompile Include="..\..\xbmc\filesystem\FileDirectoryFactory.cpp" />
<ClCompile Include="..\..\xbmc\filesystem\FileFactory.cpp" />
<ClCompile Include="..\..\xbmc\filesystem\FileReaderFile.cpp" />
<ClInclude Include="..\..\xbmc\network\httprequesthandler\IHTTPRequestHandler.h" />
<ClInclude Include="..\..\xbmc\filesystem\CircularCache.h" />
<ClInclude Include="..\..\xbmc\filesystem\DirectoryCache.h" />
+ <ClInclude Include="..\..\xbmc\filesystem\FavouritesDirectory.h" />
<ClInclude Include="..\..\xbmc\filesystem\FileCache.h" />
<ClInclude Include="..\..\xbmc\filesystem\MemBufferCache.h" />
<ClInclude Include="..\..\xbmc\filesystem\AddonsDirectory.h" />
<ClInclude Include="..\..\xbmc\epg\EpgInfoTag.h" />
<ClInclude Include="..\..\xbmc\epg\EpgSearchFilter.h" />
<ClInclude Include="..\..\xbmc\epg\GUIEPGGridContainer.h" />
- <ClInclude Include="..\..\xbmc\Favourites.h" />
<ClInclude Include="..\..\xbmc\FileItem.h" />
<ClInclude Include="..\..\xbmc\filesystem\PVRDirectory.h" />
<ClInclude Include="..\..\xbmc\filesystem\PVRFile.h" />
<ClCompile Include="..\..\xbmc\filesystem\DirectoryCache.cpp">
<Filter>filesystem</Filter>
</ClCompile>
+ <ClCompile Include="..\..\xbmc\filesystem\FavouritesDirectory.cpp">
+ <Filter>filesystem</Filter>
+ </ClCompile>
<ClCompile Include="..\..\xbmc\filesystem\FileCache.cpp">
<Filter>filesystem</Filter>
</ClCompile>
<ClCompile Include="..\..\xbmc\ApplicationMessenger.cpp" />
<ClCompile Include="..\..\xbmc\Autorun.cpp" />
<ClCompile Include="..\..\xbmc\AutoSwitch.cpp" />
- <ClCompile Include="..\..\xbmc\Favourites.cpp" />
<ClCompile Include="..\..\xbmc\DynamicDll.cpp" />
<ClCompile Include="..\..\xbmc\CueDocument.cpp" />
<ClCompile Include="..\..\xbmc\FileItem.cpp" />
<ClInclude Include="..\..\xbmc\filesystem\DirectoryCache.h">
<Filter>filesystem</Filter>
</ClInclude>
+ <ClInclude Include="..\..\xbmc\filesystem\FavouritesDirectory.h">
+ <Filter>filesystem</Filter>
+ </ClInclude>
<ClInclude Include="..\..\xbmc\filesystem\FileCache.h">
<Filter>filesystem</Filter>
</ClInclude>
<ClInclude Include="..\..\xbmc\ApplicationMessenger.h" />
<ClInclude Include="..\..\xbmc\Autorun.h" />
<ClInclude Include="..\..\xbmc\AutoSwitch.h" />
- <ClInclude Include="..\..\xbmc\Favourites.h" />
<ClInclude Include="..\..\xbmc\DynamicDll.h" />
<ClInclude Include="..\..\xbmc\CueDocument.h" />
<ClInclude Include="..\..\xbmc\FileItem.h" />
+++ /dev/null
-/*
- * Copyright (C) 2005-2013 Team XBMC
- * http://www.xbmc.org
- *
- * This Program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This Program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with XBMC; see the file COPYING. If not, see
- * <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "Favourites.h"
-#include "filesystem/File.h"
-#include "Util.h"
-#include "profiles/ProfilesManager.h"
-#include "FileItem.h"
-#include "utils/XBMCTinyXML.h"
-#include "utils/log.h"
-#include "utils/StringUtils.h"
-#include "utils/URIUtils.h"
-#include "settings/AdvancedSettings.h"
-#include "video/VideoInfoTag.h"
-
-bool CFavourites::Load(CFileItemList &items)
-{
- items.Clear();
- CStdString favourites;
-
- favourites = "special://xbmc/system/favourites.xml";
- if(XFILE::CFile::Exists(favourites))
- CFavourites::LoadFavourites(favourites, items);
- else
- CLog::Log(LOGDEBUG, "CFavourites::Load - no system favourites found, skipping");
- favourites = URIUtils::AddFileToFolder(CProfilesManager::Get().GetProfileUserDataFolder(), "favourites.xml");
- if(XFILE::CFile::Exists(favourites))
- CFavourites::LoadFavourites(favourites, items);
- else
- CLog::Log(LOGDEBUG, "CFavourites::Load - no userdata favourites found, skipping");
-
- return true;
-}
-
-bool CFavourites::LoadFavourites(CStdString& strPath, CFileItemList& items)
-{
- CXBMCTinyXML doc;
- if (!doc.LoadFile(strPath))
- {
- CLog::Log(LOGERROR, "Unable to load %s (row %i column %i)", strPath.c_str(), doc.Row(), doc.Column());
- return false;
- }
- TiXmlElement *root = doc.RootElement();
- if (!root || strcmp(root->Value(), "favourites"))
- {
- CLog::Log(LOGERROR, "Favourites.xml doesn't contain the <favourites> root element");
- return false;
- }
-
- TiXmlElement *favourite = root->FirstChildElement("favourite");
- while (favourite)
- {
- // format:
- // <favourite name="Cool Video" thumb="foo.jpg">PlayMedia(c:\videos\cool_video.avi)</favourite>
- // <favourite name="My Album" thumb="bar.tbn">ActivateWindow(MyMusic,c:\music\my album)</favourite>
- // <favourite name="Apple Movie Trailers" thumb="path_to_thumb.png">RunScript(special://xbmc/scripts/apple movie trailers/default.py)</favourite>
- const char *name = favourite->Attribute("name");
- const char *thumb = favourite->Attribute("thumb");
- if (name && favourite->FirstChild())
- {
- if(!items.Contains(favourite->FirstChild()->Value()))
- {
- CFileItemPtr item(new CFileItem(name));
- item->SetPath(favourite->FirstChild()->Value());
- if (thumb) item->SetArt("thumb", thumb);
- items.Add(item);
- }
- }
- favourite = favourite->NextSiblingElement("favourite");
- }
- return true;
-}
-
-bool CFavourites::Save(const CFileItemList &items)
-{
- CStdString favourites;
- CXBMCTinyXML doc;
- TiXmlElement xmlRootElement("favourites");
- TiXmlNode *rootNode = doc.InsertEndChild(xmlRootElement);
- if (!rootNode) return false;
-
- for (int i = 0; i < items.Size(); i++)
- {
- const CFileItemPtr item = items[i];
- TiXmlElement favNode("favourite");
- favNode.SetAttribute("name", item->GetLabel().c_str());
- if (item->HasArt("thumb"))
- favNode.SetAttribute("thumb", item->GetArt("thumb").c_str());
- TiXmlText execute(item->GetPath());
- favNode.InsertEndChild(execute);
- rootNode->InsertEndChild(favNode);
- }
-
- favourites = URIUtils::AddFileToFolder(CProfilesManager::Get().GetProfileUserDataFolder(), "favourites.xml");
- return doc.SaveFile(favourites);
-}
-
-bool CFavourites::AddOrRemove(CFileItem *item, int contextWindow)
-{
- if (!item) return false;
-
- // load our list
- CFileItemList items;
- Load(items);
-
- CStdString executePath(GetExecutePath(item, contextWindow));
-
- CFileItemPtr match = items.Get(executePath);
- if (match)
- { // remove the item
- items.Remove(match.get());
- }
- else
- { // create our new favourite item
- CFileItemPtr favourite(new CFileItem(item->GetLabel()));
- if (item->GetLabel().IsEmpty())
- favourite->SetLabel(CUtil::GetTitleFromPath(item->GetPath(), item->m_bIsFolder));
- favourite->SetArt("thumb", item->GetArt("thumb"));
- favourite->SetPath(executePath);
- items.Add(favourite);
- }
-
- // and save our list again
- return Save(items);
-}
-
-bool CFavourites::IsFavourite(CFileItem *item, int contextWindow)
-{
- CFileItemList items;
- if (!Load(items)) return false;
-
- return items.Contains(GetExecutePath(item, contextWindow));
-}
-
-CStdString CFavourites::GetExecutePath(const CFileItem *item, int contextWindow)
-{
- CStdString execute;
- if (item->m_bIsFolder && (g_advancedSettings.m_playlistAsFolders ||
- !(item->IsSmartPlayList() || item->IsPlayList())))
- execute.Format("ActivateWindow(%i,%s)", contextWindow, StringUtils::Paramify(item->GetPath()).c_str());
- else if (item->IsScript())
- execute.Format("RunScript(%s)", StringUtils::Paramify(item->GetPath().Mid(9)).c_str());
- else if (item->IsAndroidApp())
- execute.Format("StartAndroidActivity(%s)", StringUtils::Paramify(item->GetPath().Mid(26)).c_str());
- else // assume a media file
- {
- if (item->IsVideoDb() && item->HasVideoInfoTag())
- execute.Format("PlayMedia(%s)", StringUtils::Paramify(item->GetVideoInfoTag()->m_strFileNameAndPath).c_str());
- else
- execute.Format("PlayMedia(%s)", StringUtils::Paramify(item->GetPath()).c_str());
- }
- return execute;
-}
+++ /dev/null
-#pragma once
-
-/*
- * Copyright (C) 2005-2013 Team XBMC
- * http://www.xbmc.org
- *
- * This Program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
- * any later version.
- *
- * This Program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with XBMC; see the file COPYING. If not, see
- * <http://www.gnu.org/licenses/>.
- *
- */
-
-#include "utils/StdString.h"
-
-class CFileItemList;
-class CFileItem;
-
-class CFavourites
-{
-public:
- static bool Load(CFileItemList& items);
- static bool LoadFavourites(CStdString& strPath, CFileItemList& items);
- static bool AddOrRemove(CFileItem *item, int contextWindow);
- static bool Save(const CFileItemList& items);
- static bool IsFavourite(CFileItem *item, int contextWindow);
-private:
- static CStdString GetExecutePath(const CFileItem *item, int contextWindow);
-};
DatabaseManager.cpp \
DbUrl.cpp \
DynamicDll.cpp \
- Favourites.cpp \
FileItem.cpp \
GUIInfoManager.cpp \
GUILargeTextureManager.cpp \
#include "settings/AdvancedSettings.h"
#include "settings/Settings.h"
#include "ApplicationMessenger.h"
-#include "Favourites.h"
+#include "filesystem/FavouritesDirectory.h"
#include "utils/JobManager.h"
#include "dialogs/GUIDialogYesNo.h"
#include "addons/AddonManager.h"
bool bSave(false);
CFileItemList items;
- CFavourites::Load(items);
+ XFILE::CFavouritesDirectory::Load(items);
for (int i=0; i < items.Size(); ++i)
{
if (items[i]->GetPath().Find(m_addon->ID()) > -1)
}
if (bSave)
- CFavourites::Save(items);
+ CFavouritesDirectory::Save(items);
if (m_addon->Type() == ADDON_PVRDLL)
{
#include "GUIDialogFavourites.h"
#include "GUIDialogContextMenu.h"
#include "GUIDialogFileBrowser.h"
-#include "Favourites.h"
+#include "filesystem/Directory.h"
+#include "filesystem/FavouritesDirectory.h"
#include "guilib/GUIWindowManager.h"
#include "guilib/GUIKeyboardFactory.h"
#include "guilib/Key.h"
void CGUIDialogFavourites::OnInitWindow()
{
- CFavourites::Load(*m_favourites);
+ XFILE::CDirectory::GetDirectory("favourites://", *m_favourites);
UpdateList();
CGUIWindow::OnInitWindow();
}
if (nextItem < 0) nextItem += m_favourites->Size();
m_favourites->Swap(item, nextItem);
- CFavourites::Save(*m_favourites);
+ CFavouritesDirectory::Save(*m_favourites);
CGUIMessage message(GUI_MSG_ITEM_SELECT, GetID(), FAVOURITES_LIST, nextItem);
OnMessage(message);
if (item < 0 || item >= m_favourites->Size())
return;
m_favourites->Remove(item);
- CFavourites::Save(*m_favourites);
+ CFavouritesDirectory::Save(*m_favourites);
CGUIMessage message(GUI_MSG_ITEM_SELECT, GetID(), FAVOURITES_LIST, item < m_favourites->Size() ? item : item - 1);
OnMessage(message);
if (CGUIKeyboardFactory::ShowAndGetInput(label, g_localizeStrings.Get(16008), false))
(*m_favourites)[item]->SetLabel(label);
- CFavourites::Save(*m_favourites);
+ CFavouritesDirectory::Save(*m_favourites);
UpdateList();
}
return;
(*m_favourites)[item]->SetArt("thumb", thumb);
- CFavourites::Save(*m_favourites);
+ CFavouritesDirectory::Save(*m_favourites);
UpdateList();
}
#include "MusicDatabaseDirectory.h"
#include "MusicSearchDirectory.h"
#include "VideoDatabaseDirectory.h"
+#include "FavouritesDirectory.h"
#include "LibraryDirectory.h"
#include "AddonsDirectory.h"
#include "SourcesDirectory.h"
if (strProtocol == "musicsearch") return new CMusicSearchDirectory();
if (strProtocol == "videodb") return new CVideoDatabaseDirectory();
if (strProtocol == "library") return new CLibraryDirectory();
+ if (strProtocol == "favourites") return new CFavouritesDirectory();
if (strProtocol == "filereader")
return CDirectoryFactory::Create(url.GetFileName());
--- /dev/null
+/*
+ * Copyright (C) 2005-2013 Team XBMC
+ * http://www.xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "FavouritesDirectory.h"
+#include "File.h"
+#include "Util.h"
+#include "profiles/ProfilesManager.h"
+#include "FileItem.h"
+#include "utils/XBMCTinyXML.h"
+#include "utils/log.h"
+#include "utils/StringUtils.h"
+#include "utils/URIUtils.h"
+#include "settings/AdvancedSettings.h"
+#include "video/VideoInfoTag.h"
+#include "URL.h"
+
+namespace XFILE
+{
+
+
+bool CFavouritesDirectory::GetDirectory(const CStdString& strPath, CFileItemList &items)
+{
+ items.Clear();
+ CURL url(strPath);
+
+ if (url.GetProtocol() == "favourites")
+ {
+ Load(items); //load the default favourite files
+ }
+ return LoadFavourites(strPath, items); //directly load the given file
+}
+
+bool CFavouritesDirectory::Exists(const char* strPath)
+{
+ CURL url(strPath);
+
+ if (url.GetProtocol() == "favourites")
+ {
+ return XFILE::CFile::Exists("special://xbmc/system/favourites.xml")
+ || XFILE::CFile::Exists(URIUtils::AddFileToFolder(CProfilesManager::Get().GetProfileUserDataFolder(), "favourites.xml"));
+ }
+ return XFILE::CFile::Exists(strPath); //directly load the given file
+}
+
+bool CFavouritesDirectory::Load(CFileItemList &items)
+{
+ items.Clear();
+ CStdString favourites;
+
+ favourites = "special://xbmc/system/favourites.xml";
+ if(XFILE::CFile::Exists(favourites))
+ CFavouritesDirectory::LoadFavourites(favourites, items);
+ else
+ CLog::Log(LOGDEBUG, "CFavourites::Load - no system favourites found, skipping");
+ favourites = URIUtils::AddFileToFolder(CProfilesManager::Get().GetProfileUserDataFolder(), "favourites.xml");
+ if(XFILE::CFile::Exists(favourites))
+ CFavouritesDirectory::LoadFavourites(favourites, items);
+ else
+ CLog::Log(LOGDEBUG, "CFavourites::Load - no userdata favourites found, skipping");
+
+ return true;
+}
+
+bool CFavouritesDirectory::LoadFavourites(const CStdString& strPath, CFileItemList& items)
+{
+ CXBMCTinyXML doc;
+ if (!doc.LoadFile(strPath))
+ {
+ CLog::Log(LOGERROR, "Unable to load %s (row %i column %i)", strPath.c_str(), doc.Row(), doc.Column());
+ return false;
+ }
+ TiXmlElement *root = doc.RootElement();
+ if (!root || strcmp(root->Value(), "favourites"))
+ {
+ CLog::Log(LOGERROR, "Favourites.xml doesn't contain the <favourites> root element");
+ return false;
+ }
+
+ TiXmlElement *favourite = root->FirstChildElement("favourite");
+ while (favourite)
+ {
+ // format:
+ // <favourite name="Cool Video" thumb="foo.jpg">PlayMedia(c:\videos\cool_video.avi)</favourite>
+ // <favourite name="My Album" thumb="bar.tbn">ActivateWindow(MyMusic,c:\music\my album)</favourite>
+ // <favourite name="Apple Movie Trailers" thumb="path_to_thumb.png">RunScript(special://xbmc/scripts/apple movie trailers/default.py)</favourite>
+ const char *name = favourite->Attribute("name");
+ const char *thumb = favourite->Attribute("thumb");
+ if (name && favourite->FirstChild())
+ {
+ if(!items.Contains(favourite->FirstChild()->Value()))
+ {
+ CFileItemPtr item(new CFileItem(name));
+ item->SetPath(favourite->FirstChild()->Value());
+ if (thumb) item->SetArt("thumb", thumb);
+ items.Add(item);
+ }
+ }
+ favourite = favourite->NextSiblingElement("favourite");
+ }
+ return true;
+}
+
+bool CFavouritesDirectory::Save(const CFileItemList &items)
+{
+ CStdString favourites;
+ CXBMCTinyXML doc;
+ TiXmlElement xmlRootElement("favourites");
+ TiXmlNode *rootNode = doc.InsertEndChild(xmlRootElement);
+ if (!rootNode) return false;
+
+ for (int i = 0; i < items.Size(); i++)
+ {
+ const CFileItemPtr item = items[i];
+ TiXmlElement favNode("favourite");
+ favNode.SetAttribute("name", item->GetLabel().c_str());
+ if (item->HasArt("thumb"))
+ favNode.SetAttribute("thumb", item->GetArt("thumb").c_str());
+ TiXmlText execute(item->GetPath());
+ favNode.InsertEndChild(execute);
+ rootNode->InsertEndChild(favNode);
+ }
+
+ favourites = URIUtils::AddFileToFolder(CProfilesManager::Get().GetProfileUserDataFolder(), "favourites.xml");
+ return doc.SaveFile(favourites);
+}
+
+bool CFavouritesDirectory::AddOrRemove(CFileItem *item, int contextWindow)
+{
+ if (!item) return false;
+
+ // load our list
+ CFileItemList items;
+ Load(items);
+
+ CStdString executePath(GetExecutePath(item, contextWindow));
+
+ CFileItemPtr match = items.Get(executePath);
+ if (match)
+ { // remove the item
+ items.Remove(match.get());
+ }
+ else
+ { // create our new favourite item
+ CFileItemPtr favourite(new CFileItem(item->GetLabel()));
+ if (item->GetLabel().IsEmpty())
+ favourite->SetLabel(CUtil::GetTitleFromPath(item->GetPath(), item->m_bIsFolder));
+ favourite->SetArt("thumb", item->GetArt("thumb"));
+ favourite->SetPath(executePath);
+ items.Add(favourite);
+ }
+
+ // and save our list again
+ return Save(items);
+}
+
+bool CFavouritesDirectory::IsFavourite(CFileItem *item, int contextWindow)
+{
+ CFileItemList items;
+ if (!Load(items)) return false;
+
+ return items.Contains(GetExecutePath(item, contextWindow));
+}
+
+CStdString CFavouritesDirectory::GetExecutePath(const CFileItem *item, int contextWindow)
+{
+ CStdString execute;
+ if (item->m_bIsFolder && (g_advancedSettings.m_playlistAsFolders ||
+ !(item->IsSmartPlayList() || item->IsPlayList())))
+ execute.Format("ActivateWindow(%i,%s)", contextWindow, StringUtils::Paramify(item->GetPath()).c_str());
+ else if (item->IsScript())
+ execute.Format("RunScript(%s)", StringUtils::Paramify(item->GetPath().Mid(9)).c_str());
+ else if (item->IsAndroidApp())
+ execute.Format("StartAndroidActivity(%s)", StringUtils::Paramify(item->GetPath().Mid(26)).c_str());
+ else // assume a media file
+ {
+ if (item->IsVideoDb() && item->HasVideoInfoTag())
+ execute.Format("PlayMedia(%s)", StringUtils::Paramify(item->GetVideoInfoTag()->m_strFileNameAndPath).c_str());
+ else
+ execute.Format("PlayMedia(%s)", StringUtils::Paramify(item->GetPath()).c_str());
+ }
+ return execute;
+}
+
+}
--- /dev/null
+#pragma once
+
+/*
+ * Copyright (C) 2005-2013 Team XBMC
+ * http://www.xbmc.org
+ *
+ * This Program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This Program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with XBMC; see the file COPYING. If not, see
+ * <http://www.gnu.org/licenses/>.
+ *
+ */
+
+#include "utils/StdString.h"
+#include "IDirectory.h"
+
+class CFileItemList;
+class CFileItem;
+
+namespace XFILE
+{
+
+class CFavouritesDirectory : public IDirectory
+{
+public:
+ virtual bool GetDirectory(const CStdString& strPath, CFileItemList &items);
+ virtual bool Exists(const char* strPath);
+ static bool Load(CFileItemList &items);
+ static bool LoadFavourites(const CStdString& strPath, CFileItemList& items);
+
+ static bool AddOrRemove(CFileItem *item, int contextWindow);
+ static bool Save(const CFileItemList& items);
+ static bool IsFavourite(CFileItem *item, int contextWindow);
+private:
+ static CStdString GetExecutePath(const CFileItem *item, int contextWindow);
+};
+
+}
SRCS += DirectoryFactory.cpp
SRCS += DirectoryHistory.cpp
SRCS += DllLibCurl.cpp
+SRCS += FavouritesDirectory.cpp
SRCS += File.cpp
SRCS += FileCache.cpp
SRCS += FileDirectoryFactory.cpp
*/
#include "FavouritesOperations.h"
-#include "Favourites.h"
+#include "filesystem/FavouritesDirectory.h"
#include "input/ButtonTranslator.h"
#include "utils/RegExp.h"
#include "utils/StringUtils.h"
using namespace std;
using namespace JSONRPC;
+using namespace XFILE;
JSONRPC_STATUS CFavouritesOperations::GetFavourites(const CStdString &method, ITransportLayer *transport, IClient *client, const CVariant ¶meterObject, CVariant &result)
{
CFileItemList favourites;
- CFavourites::Load(favourites);
+ CFavouritesDirectory::Load(favourites);
string type = !parameterObject["type"].isNull() ? parameterObject["type"].asString() : "";
if (ParameterNotNull(parameterObject,"thumbnail"))
item.SetArt("thumb", parameterObject["thumbnail"].asString());
- if (CFavourites::AddOrRemove(&item, contextWindow))
+ if (CFavouritesDirectory::AddOrRemove(&item, contextWindow))
return ACK;
else
return FailedToExecute;
#include "guilib/GUIKeyboardFactory.h"
#include "guilib/Key.h"
#include "GUIUserMessages.h"
-#include "Favourites.h"
+#include "filesystem/FavouritesDirectory.h"
#include "profiles/ProfilesManager.h"
#include "settings/MediaSettings.h"
#include "settings/Settings.h"
buttons.Add(CONTEXT_BUTTON_PLAY_WITH, 15213); // Play With...
buttons.Add(CONTEXT_BUTTON_SONG_INFO, 658); // Song Info
- if (CFavourites::IsFavourite(item.get(), GetID()))
+ if (XFILE::CFavouritesDirectory::IsFavourite(item.get(), GetID()))
buttons.Add(CONTEXT_BUTTON_ADD_FAVOURITE, 14077); // Remove Favourite
else
buttons.Add(CONTEXT_BUTTON_ADD_FAVOURITE, 14076); // Add To Favourites;
case CONTEXT_BUTTON_ADD_FAVOURITE:
{
CFileItemPtr item = m_vecItems->Get(itemNumber);
- CFavourites::AddOrRemove(item.get(), GetID());
+ XFILE::CFavouritesDirectory::AddOrRemove(item.get(), GetID());
return true;
}
#include "guilib/GUIWindowManager.h"
#include "guilib/GUIKeyboardFactory.h"
#include "GUIUserMessages.h"
-#include "Favourites.h"
-#include "settings/MediaSettings.h"
+#include "filesystem/FavouritesDirectory.h"
#include "settings/Settings.h"
+#include "settings/MediaSettings.h"
#include "guilib/Key.h"
#include "guilib/LocalizeStrings.h"
#include "utils/log.h"
if (vecCores.size() > 1)
buttons.Add(CONTEXT_BUTTON_PLAY_WITH, 15213); // Play With...
- if (CFavourites::IsFavourite(item.get(), GetID()))
+ if (XFILE::CFavouritesDirectory::IsFavourite(item.get(), GetID()))
buttons.Add(CONTEXT_BUTTON_ADD_FAVOURITE, 14077); // Remove Favourite
else
buttons.Add(CONTEXT_BUTTON_ADD_FAVOURITE, 14076); // Add To Favourites;
case CONTEXT_BUTTON_ADD_FAVOURITE:
{
CFileItemPtr item = m_vecItems->Get(itemNumber);
- CFavourites::AddOrRemove(item.get(), GetID());
+ XFILE::CFavouritesDirectory::AddOrRemove(item.get(), GetID());
return true;
}
case CONTEXT_BUTTON_CANCEL_PARTYMODE:
#include "PartyModeManager.h"
#include "dialogs/GUIDialogMediaSource.h"
#include "GUIWindowFileManager.h"
-#include "Favourites.h"
+#include "filesystem/FavouritesDirectory.h"
#include "utils/LabelFormatter.h"
#include "dialogs/GUIDialogProgress.h"
#include "profiles/ProfilesManager.h"
if (!item->IsParentFolder() && !item->GetPath().Equals("add") && !item->GetPath().Equals("newplaylist://") &&
!item->GetPath().Left(19).Equals("newsmartplaylist://") && !item->GetPath().Left(9).Equals("newtag://"))
{
- if (CFavourites::IsFavourite(item.get(), GetID()))
+ if (XFILE::CFavouritesDirectory::IsFavourite(item.get(), GetID()))
buttons.Add(CONTEXT_BUTTON_ADD_FAVOURITE, 14077); // Remove Favourite
else
buttons.Add(CONTEXT_BUTTON_ADD_FAVOURITE, 14076); // Add To Favourites;
case CONTEXT_BUTTON_ADD_FAVOURITE:
{
CFileItemPtr item = m_vecItems->Get(itemNumber);
- CFavourites::AddOrRemove(item.get(), GetID());
+ XFILE::CFavouritesDirectory::AddOrRemove(item.get(), GetID());
return true;
}
case CONTEXT_BUTTON_PLUGIN_SETTINGS:
#include "guilib/GUIKeyboardFactory.h"
#include "dialogs/GUIDialogProgress.h"
#include "dialogs/GUIDialogExtendedProgressBar.h"
-#include "Favourites.h"
+#include "filesystem/FavouritesDirectory.h"
#include "playlists/PlayList.h"
#include "utils/AsyncFileCopy.h"
#include "storage/MediaManager.h"
{
choices.Add(1, 188); // SelectAll
if (!pItem->IsParentFolder())
- choices.Add(2, CFavourites::IsFavourite(pItem.get(), GetID()) ? 14077 : 14076); // Add/Remove Favourite
+ choices.Add(2, XFILE::CFavouritesDirectory::IsFavourite(pItem.get(), GetID()) ? 14077 : 14076); // Add/Remove Favourite
if (vecCores.size() > 1)
choices.Add(3, 15213); // Play Using...
if (CanRename(list) && !pItem->IsParentFolder())
}
if (btnid == 2)
{
- CFavourites::AddOrRemove(pItem.get(), GetID());
+ XFILE::CFavouritesDirectory::AddOrRemove(pItem.get(), GetID());
return;
}
if (btnid == 3)