fixed: removables weren't autosourced in the video library files node
[xbmc:paulepanters-xbmc.git] / xbmc / filesystem / SourcesDirectory.cpp
1 /*
2  *      Copyright (C) 2005-2008 Team XBMC
3  *      http://www.xbmc.org
4  *
5  *  This Program is free software; you can redistribute it and/or modify
6  *  it under the terms of the GNU General Public License as published by
7  *  the Free Software Foundation; either version 2, or (at your option)
8  *  any later version.
9  *
10  *  This Program is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  *  GNU General Public License for more details.
14  *
15  *  You should have received a copy of the GNU General Public License
16  *  along with XBMC; see the file COPYING.  If not, write to
17  *  the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
18  *  http://www.gnu.org/copyleft/gpl.html
19  *
20  */
21
22 #include "SourcesDirectory.h"
23 #include "URL.h"
24 #include "Util.h"
25 #include "FileItem.h"
26 #include "File.h"
27 #include "settings/Settings.h"
28 #include "guilib/TextureManager.h"
29 #include "storage/MediaManager.h"
30
31 using namespace XFILE;
32
33 CSourcesDirectory::CSourcesDirectory(void)
34 {
35 }
36
37 CSourcesDirectory::~CSourcesDirectory(void)
38 {
39 }
40
41 bool CSourcesDirectory::GetDirectory(const CStdString& strPath, CFileItemList &items)
42 {
43   // break up our path
44   // format is:  sources://<type>/
45   CURL url(strPath);
46   CStdString type(url.GetHostName());
47
48   VECSOURCES sources = *g_settings.GetSourcesFromType(url.GetHostName());
49   g_mediaManager.GetRemovableDrives(sources);
50
51   if (sources.empty())
52     return false;
53
54   return GetDirectory(sources, items);
55 }
56
57 bool CSourcesDirectory::GetDirectory(const VECSOURCES &sources, CFileItemList &items)
58 {
59   for (unsigned int i = 0; i < sources.size(); ++i)
60   {
61     const CMediaSource& share = sources[i];
62     CFileItemPtr pItem(new CFileItem(share));
63     if (pItem->IsLastFM() || (pItem->m_strPath.Left(14).Equals("musicsearch://")))
64       pItem->SetCanQueue(false);
65     CStdString strPathUpper = pItem->m_strPath;
66     strPathUpper.ToUpper();
67     
68     CStdString strIcon;
69     // We have the real DVD-ROM, set icon on disktype
70     if (share.m_iDriveType == CMediaSource::SOURCE_TYPE_DVD && share.m_strThumbnailImage.IsEmpty())
71     {
72       CUtil::GetDVDDriveIcon( pItem->m_strPath, strIcon );
73       // CDetectDVDMedia::SetNewDVDShareUrl() caches disc thumb as special://temp/dvdicon.tbn
74       CStdString strThumb = "special://temp/dvdicon.tbn";
75       if (XFILE::CFile::Exists(strThumb))
76         pItem->SetThumbnailImage(strThumb);
77     }
78     else if (pItem->m_strPath.Left(9) == "addons://")
79       strIcon = "DefaultHardDisk.png";
80     else if (pItem->IsLastFM()
81              || pItem->IsVideoDb()
82              || pItem->IsMusicDb()
83              || pItem->IsPlugin()
84              || pItem->m_strPath == "special://musicplaylists/"
85              || pItem->m_strPath == "special://videoplaylists/"
86              || pItem->m_strPath == "musicsearch://")
87       strIcon = "DefaultFolder.png";
88     else if (pItem->IsRemote())
89       strIcon = "DefaultNetwork.png";
90     else if (pItem->IsISO9660())
91       strIcon = "DefaultDVDRom.png";
92     else if (pItem->IsDVD())
93       strIcon = "DefaultDVDRom.png";
94     else if (pItem->IsCDDA())
95       strIcon = "DefaultCDDA.png";
96     else if (pItem->IsRemovable() && g_TextureManager.HasTexture("DefaultRemovableDisk.png"))
97       strIcon = "DefaultRemovableDisk.png";
98     else
99       strIcon = "DefaultHardDisk.png";
100     
101     pItem->SetIconImage(strIcon);
102     if (share.m_iHasLock == 2 && g_settings.GetMasterProfile().getLockMode() != LOCK_MODE_EVERYONE)
103       pItem->SetOverlayImage(CGUIListItem::ICON_OVERLAY_LOCKED);
104     else
105       pItem->SetOverlayImage(CGUIListItem::ICON_OVERLAY_NONE);
106     
107     items.Add(pItem);
108   }
109   return true;
110 }
111
112 bool CSourcesDirectory::Exists(const char* strPath)
113 {
114   return true;
115 }