diff --git a/xbmc/Application.cpp b/xbmc/Application.cpp index 5b1d26abea555..738b766065b6d 100644 --- a/xbmc/Application.cpp +++ b/xbmc/Application.cpp @@ -1866,7 +1866,7 @@ bool CApplication::LoadUserWindows() { CLog::Log(LOGINFO, "Loading user windows, path %s", vecSkinPath[i].c_str()); CFileItemList items; - if (CDirectory::GetDirectory(vecSkinPath[i], items, ".xml", false)) + if (CDirectory::GetDirectory(vecSkinPath[i], items, ".xml", DIR_FLAG_NO_FILE_DIRS)) { for (int i = 0; i < items.Size(); ++i) { diff --git a/xbmc/FileItem.cpp b/xbmc/FileItem.cpp index 0922fde24881b..5cd38730959d1 100644 --- a/xbmc/FileItem.cpp +++ b/xbmc/FileItem.cpp @@ -2071,7 +2071,7 @@ void CFileItemList::StackFolders() if (bMatch) { CFileItemList items; - CDirectory::GetDirectory(item->GetPath(),items,g_settings.m_videoExtensions,true); + CDirectory::GetDirectory(item->GetPath(),items,g_settings.m_videoExtensions); // optimized to only traverse listing once by checking for filecount // and recording last file item for later use int nFiles = 0; @@ -2874,11 +2874,11 @@ CStdString CFileItem::GetLocalFanart() const return ""; CFileItemList items; - CDirectory::GetDirectory(strDir, items, g_settings.m_pictureExtensions, false, false, DIR_CACHE_ALWAYS, false, true); + CDirectory::GetDirectory(strDir, items, g_settings.m_pictureExtensions, DIR_FLAG_NO_FILE_DIRS | DIR_FLAG_READ_CACHE | DIR_FLAG_NO_FILE_INFO); if (IsOpticalMediaFile()) { // grab from the optical media parent folder as well - see GetUserVideoThumb CFileItemList moreItems; - CDirectory::GetDirectory(GetLocalMetadataPath(), moreItems, g_settings.m_pictureExtensions, false, false, DIR_CACHE_ALWAYS, false, true); + CDirectory::GetDirectory(GetLocalMetadataPath(), moreItems, g_settings.m_pictureExtensions, DIR_FLAG_NO_FILE_DIRS | DIR_FLAG_READ_CACHE | DIR_FLAG_NO_FILE_INFO); items.Append(moreItems); } @@ -3127,7 +3127,7 @@ CStdString CFileItem::FindTrailer() const CStdString strDir; URIUtils::GetDirectory(strFile, strDir); CFileItemList items; - CDirectory::GetDirectory(strDir, items, g_settings.m_videoExtensions, true, false, DIR_CACHE_ALWAYS, false, true); + CDirectory::GetDirectory(strDir, items, g_settings.m_videoExtensions, DIR_FLAG_READ_CACHE | DIR_FLAG_NO_FILE_INFO); URIUtils::RemoveExtension(strFile); strFile += "-trailer"; CStdString strFile3 = URIUtils::AddFileToFolder(strDir, "movie-trailer"); diff --git a/xbmc/Util.cpp b/xbmc/Util.cpp index 271c8cb706dc2..1a3486081a38e 100644 --- a/xbmc/Util.cpp +++ b/xbmc/Util.cpp @@ -710,7 +710,7 @@ void CUtil::RemoveTempFiles() { CStdString searchPath = g_settings.GetDatabaseFolder(); CFileItemList items; - if (!XFILE::CDirectory::GetDirectory(searchPath, items, ".tmp", false)) + if (!XFILE::CDirectory::GetDirectory(searchPath, items, ".tmp", DIR_FLAG_NO_FILE_DIRS)) return; for (int i = 0; i < items.Size(); ++i) @@ -747,7 +747,7 @@ void CUtil::ClearTempFonts() return; CFileItemList items; - CDirectory::GetDirectory(searchPath, items, "", false, false, XFILE::DIR_CACHE_NEVER); + CDirectory::GetDirectory(searchPath, items, "", DIR_FLAG_NO_FILE_DIRS | DIR_FLAG_BYPASS_CACHE); for (int i=0; im_bIsFolder) @@ -1789,7 +1792,7 @@ void CUtil::GetRecursiveListing(const CStdString& strPath, CFileItemList& items, void CUtil::GetRecursiveDirsListing(const CStdString& strPath, CFileItemList& item) { CFileItemList myItems; - CDirectory::GetDirectory(strPath,myItems,"",false); + CDirectory::GetDirectory(strPath,myItems,"",DIR_FLAG_NO_FILE_DIRS); for (int i=0;im_bIsFolder && !myItems[i]->GetPath().Equals("..")) @@ -2358,7 +2361,7 @@ void CUtil::ScanForExternalSubtitles(const CStdString& strMovie, std::vector CGUIDialogAddonSettings::GetFileEnumValues(const CStdString & // fetch directory CFileItemList items; if (!mask.IsEmpty()) - CDirectory::GetDirectory(fullPath, items, mask, false); + CDirectory::GetDirectory(fullPath, items, mask, XFILE::DIR_FLAG_NO_FILE_DIRS); else - CDirectory::GetDirectory(fullPath, items, "", false); + CDirectory::GetDirectory(fullPath, items, "", XFILE::DIR_FLAG_NO_FILE_DIRS); vector values; for (int i = 0; i < items.Size(); ++i) diff --git a/xbmc/addons/Skin.cpp b/xbmc/addons/Skin.cpp index 25b9c9798951d..63b7ed02800de 100644 --- a/xbmc/addons/Skin.cpp +++ b/xbmc/addons/Skin.cpp @@ -105,7 +105,7 @@ void CSkinInfo::Start(const CStdString &strBaseDir) if (!m_resolutions.size()) { // try falling back to whatever resolutions exist in the directory CFileItemList items; - CDirectory::GetDirectory(Path(), items, "", false); + CDirectory::GetDirectory(Path(), items, "", DIR_FLAG_NO_FILE_DIRS); for (int i = 0; i < items.Size(); i++) { RESOLUTION_INFO res; diff --git a/xbmc/dialogs/GUIDialogFileBrowser.cpp b/xbmc/dialogs/GUIDialogFileBrowser.cpp index 3ee85ca6b7abc..d06ce58ebfcb2 100644 --- a/xbmc/dialogs/GUIDialogFileBrowser.cpp +++ b/xbmc/dialogs/GUIDialogFileBrowser.cpp @@ -893,7 +893,7 @@ void CGUIDialogFileBrowser::OnAddNetworkLocation() { // verify the path by doing a GetDirectory. CFileItemList items; - if (CDirectory::GetDirectory(path, items, "", false, true) || CGUIDialogYesNo::ShowAndGetInput(1001,1002,1003,1004)) + if (CDirectory::GetDirectory(path, items, "", DIR_FLAG_NO_FILE_DIRS | DIR_FLAG_ALLOW_PROMPT) || CGUIDialogYesNo::ShowAndGetInput(1001,1002,1003,1004)) { // add the network location to the shares list CMediaSource share; share.strPath = path; //setPath(path); diff --git a/xbmc/dialogs/GUIDialogMediaSource.cpp b/xbmc/dialogs/GUIDialogMediaSource.cpp index ffbe20f2e9905..d9d71e0fe19e5 100644 --- a/xbmc/dialogs/GUIDialogMediaSource.cpp +++ b/xbmc/dialogs/GUIDialogMediaSource.cpp @@ -327,7 +327,7 @@ void CGUIDialogMediaSource::OnOK() VECSOURCES *shares = g_settings.GetSourcesFromType(m_type); if (shares) shares->push_back(share); - if (share.strPath.Left(9).Equals("plugin://") || CDirectory::GetDirectory(share.strPath, items, "", false, true) || CGUIDialogYesNo::ShowAndGetInput(1001,1025,1003,1004)) + if (share.strPath.Left(9).Equals("plugin://") || CDirectory::GetDirectory(share.strPath, items, "", DIR_FLAG_NO_FILE_DIRS | DIR_FLAG_ALLOW_PROMPT) || CGUIDialogYesNo::ShowAndGetInput(1001,1025,1003,1004)) { m_confirmed = true; Close(); diff --git a/xbmc/dialogs/GUIDialogSmartPlaylistRule.cpp b/xbmc/dialogs/GUIDialogSmartPlaylistRule.cpp index 8dfe1beeaee93..d1a4ab7a86435 100644 --- a/xbmc/dialogs/GUIDialogSmartPlaylistRule.cpp +++ b/xbmc/dialogs/GUIDialogSmartPlaylistRule.cpp @@ -184,7 +184,7 @@ void CGUIDialogSmartPlaylistRule::OnBrowse() CStdString path = "special://videoplaylists/"; if (m_type.Equals("songs") || m_type.Equals("albums")) path = "special://musicplaylists/"; - XFILE::CDirectory::GetDirectory(path, items, ".xsp",false,false,XFILE::DIR_CACHE_ONCE,true,true); + XFILE::CDirectory::GetDirectory(path, items, ".xsp", XFILE::DIR_FLAG_NO_FILE_DIRS); for (int i = 0; i < items.Size(); i++) { CFileItemPtr item = items[i]; diff --git a/xbmc/filesystem/AFPDirectory.cpp b/xbmc/filesystem/AFPDirectory.cpp index d5e3345310a8d..10a25330e44df 100644 --- a/xbmc/filesystem/AFPDirectory.cpp +++ b/xbmc/filesystem/AFPDirectory.cpp @@ -132,7 +132,7 @@ bool CAFPDirectory::GetDirectory(const CStdString& strPath, CFileItemList &items { if (afpError == CAfpConnection::AfpAuth) { - if (m_allowPrompting) + if (m_flags & DIR_FLAG_ALLOW_PROMPT) { RequireAuthentication(url.Get()); } @@ -200,7 +200,7 @@ bool CAFPDirectory::GetDirectory(const CStdString& strPath, CFileItemList &items { struct stat info = {0}; - if (m_extFileInfo && g_advancedSettings.m_sambastatfiles) + if ((m_flags & DIR_FLAG_NO_FILE_INFO)==0 && g_advancedSettings.m_sambastatfiles) { // make sure we use the authenticated path wich contains any default username CStdString strFullName = strDirName + strFile; diff --git a/xbmc/filesystem/AddonsDirectory.cpp b/xbmc/filesystem/AddonsDirectory.cpp index 402b285e92662..5d061bd8b0f4f 100644 --- a/xbmc/filesystem/AddonsDirectory.cpp +++ b/xbmc/filesystem/AddonsDirectory.cpp @@ -40,8 +40,6 @@ namespace XFILE CAddonsDirectory::CAddonsDirectory(void) { - m_allowPrompting = true; - m_cacheDirectory = DIR_CACHE_ONCE; } CAddonsDirectory::~CAddonsDirectory(void) diff --git a/xbmc/filesystem/Directory.cpp b/xbmc/filesystem/Directory.cpp index c761047f0ea0a..ecf5b50622832 100644 --- a/xbmc/filesystem/Directory.cpp +++ b/xbmc/filesystem/Directory.cpp @@ -118,7 +118,15 @@ CDirectory::CDirectory() CDirectory::~CDirectory() {} -bool CDirectory::GetDirectory(const CStdString& strPath, CFileItemList &items, CStdString strMask /*=""*/, bool bUseFileDirectories /* = true */, bool allowPrompting /* = false */, DIR_CACHE_TYPE cacheDirectory /* = DIR_CACHE_ONCE */, bool extFileInfo /* = true */, bool allowThreads /* = false */, bool getHidden /* = false */) +bool CDirectory::GetDirectory(const CStdString& strPath, CFileItemList &items, const CStdString &strMask /*=""*/, int flags /*=DIR_FLAG_DEFAULTS*/, bool allowThreads /* = false */) +{ + CHints hints; + hints.flags = flags; + hints.mask = strMask; + return GetDirectory(strPath, items, hints); +} + +bool CDirectory::GetDirectory(const CStdString& strPath, CFileItemList &items, const CHints &hints, bool allowThreads) { try { @@ -128,19 +136,16 @@ bool CDirectory::GetDirectory(const CStdString& strPath, CFileItemList &items, C return false; // check our cache for this path - if (g_directoryCache.GetDirectory(strPath, items, cacheDirectory == DIR_CACHE_ALWAYS)) + if (g_directoryCache.GetDirectory(strPath, items, (hints.flags & DIR_FLAG_READ_CACHE) == DIR_FLAG_READ_CACHE)) items.SetPath(strPath); else { // need to clear the cache (in case the directory fetch fails) // and (re)fetch the folder - if (cacheDirectory != DIR_CACHE_NEVER) + if (hints.flags & DIR_FLAG_BYPASS_CACHE) g_directoryCache.ClearDirectory(strPath); - pDirectory->SetAllowPrompting(allowPrompting); - pDirectory->SetCacheDirectory(cacheDirectory); - pDirectory->SetUseFileDirectories(bUseFileDirectories); - pDirectory->SetExtFileInfo(extFileInfo); + pDirectory->SetFlags(hints.flags); bool result = false, cancel = false; while (!result && !cancel) @@ -187,19 +192,19 @@ bool CDirectory::GetDirectory(const CStdString& strPath, CFileItemList &items, C } // cache the directory, if necessary - if (cacheDirectory != DIR_CACHE_NEVER) + if (hints.flags & DIR_FLAG_BYPASS_CACHE) g_directoryCache.SetDirectory(strPath, items, pDirectory->GetCacheType(strPath)); } // now filter for allowed files - pDirectory->SetMask(strMask); + pDirectory->SetMask(hints.mask); for (int i = 0; i < items.Size(); ++i) { CFileItemPtr item = items[i]; // TODO: we shouldn't be checking the gui setting here; // callers should use getHidden instead if ((!item->m_bIsFolder && !pDirectory->IsAllowed(item->GetPath())) || - (item->GetProperty("file:hidden").asBoolean() && !getHidden && !g_guiSettings.GetBool("filelists.showhidden"))) + (item->GetProperty("file:hidden").asBoolean() && !(hints.flags & DIR_FLAG_GET_HIDDEN) && !g_guiSettings.GetBool("filelists.showhidden"))) { items.Remove(i); i--; // don't confuse loop @@ -208,8 +213,8 @@ bool CDirectory::GetDirectory(const CStdString& strPath, CFileItemList &items, C // Should any of the files we read be treated as a directory? // Disable for database folders, as they already contain the extracted items - if (bUseFileDirectories && !items.IsMusicDb() && !items.IsVideoDb() && !items.IsSmartPlayList()) - FilterFileDirectories(items, strMask); + if (!(hints.flags & DIR_FLAG_NO_FILE_DIRS) && !items.IsMusicDb() && !items.IsVideoDb() && !items.IsSmartPlayList()) + FilterFileDirectories(items, hints.mask); return true; } diff --git a/xbmc/filesystem/Directory.h b/xbmc/filesystem/Directory.h index 7ad728a0110e4..5b6c568265ffc 100644 --- a/xbmc/filesystem/Directory.h +++ b/xbmc/filesystem/Directory.h @@ -34,15 +34,26 @@ class CDirectory CDirectory(void); virtual ~CDirectory(void); + class CHints + { + public: + CHints() : flags(DIR_FLAG_DEFAULTS) + { + }; + CStdString mask; + int flags; + }; + + static bool GetDirectory(const CStdString& strPath + , CFileItemList &items + , const CStdString &strMask="" + , int flags=DIR_FLAG_DEFAULTS + , bool allowThreads=false); + static bool GetDirectory(const CStdString& strPath - , CFileItemList &items - , CStdString strMask="" - , bool bUseFileDirectories=true - , bool allowPrompting=false - , DIR_CACHE_TYPE cacheDirectory=DIR_CACHE_ONCE - , bool extFileInfo=true - , bool allowThreads=false - , bool getHidden=false); + , CFileItemList &items + , const CHints &hints + , bool allowThreads=false); static bool Create(const CStdString& strPath); static bool Exists(const CStdString& strPath); diff --git a/xbmc/filesystem/DirectoryCache.cpp b/xbmc/filesystem/DirectoryCache.cpp index 84bc32e6ba833..4863fc012a539 100644 --- a/xbmc/filesystem/DirectoryCache.cpp +++ b/xbmc/filesystem/DirectoryCache.cpp @@ -222,7 +222,7 @@ void CDirectoryCache::InitCache(set& dirs) { const CStdString& strDir = *it; CFileItemList items; - CDirectory::GetDirectory(strDir, items, "", false); + CDirectory::GetDirectory(strDir, items, "", DIR_FLAG_NO_FILE_DIRS); items.Clear(); } } diff --git a/xbmc/filesystem/IDirectory.cpp b/xbmc/filesystem/IDirectory.cpp index 67f91d6c93aa6..784427e6a0ad1 100644 --- a/xbmc/filesystem/IDirectory.cpp +++ b/xbmc/filesystem/IDirectory.cpp @@ -33,10 +33,7 @@ using namespace XFILE; IDirectory::IDirectory(void) { m_strFileMask = ""; - m_allowPrompting = false; - m_cacheDirectory = DIR_CACHE_NEVER; - m_useFileDirectories = false; - m_extFileInfo = true; + m_flags = DIR_FLAG_DEFAULTS; } IDirectory::~IDirectory(void) @@ -103,46 +100,12 @@ void IDirectory::SetMask(const CStdString& strMask) } /*! - \brief Set whether the directory handlers can prompt the user. - \param allowPrompting Set true to allow prompting to occur (default is false). - - Directory handlers should only prompt the user as a direct result of the - users actions. - */ - -void IDirectory::SetAllowPrompting(bool allowPrompting) -{ - m_allowPrompting = allowPrompting; -} - -/*! - \brief Set whether the directory should be cached by our directory cache. - \param cacheDirectory Set DIR_CACHE_NEVER or DIR_CACHE_ALWAYS to enable or disable caching (default is DIR_CACHE_ONCE). - */ - -void IDirectory::SetCacheDirectory(DIR_CACHE_TYPE cacheDirectory) -{ - m_cacheDirectory = cacheDirectory; -} - -/*! - \brief Set whether the directory should allow file directories. - \param useFileDirectories Set true to enable file directories (default is true). - */ - -void IDirectory::SetUseFileDirectories(bool useFileDirectories) -{ - m_useFileDirectories = useFileDirectories; -} - -/*! - \brief Set whether the GetDirectory call will retrieve extended file information (stat calls for example). - \param extFileInfo Set true to enable extended file info (default is true). + \brief Set the flags for this directory handler. + \param flags - \sa XFILE::DIR_FLAG for a description. */ - -void IDirectory::SetExtFileInfo(bool extFileInfo) +void IDirectory::SetFlags(int flags) { - m_extFileInfo = extFileInfo; + m_flags = flags; } bool IDirectory::ProcessRequirements() diff --git a/xbmc/filesystem/IDirectory.h b/xbmc/filesystem/IDirectory.h index 5729c232e80dd..419176a82d82d 100644 --- a/xbmc/filesystem/IDirectory.h +++ b/xbmc/filesystem/IDirectory.h @@ -34,6 +34,20 @@ namespace XFILE DIR_CACHE_ALWAYS ///< Always cache this directory to memory, so that each additional fetch of this folder will utilize the cache (until it's cleared) }; + /*! \brief Available directory flags + The defaults are to allow file directories, no prompting, retrieve file information, hide hidden files, and utilise the directory cache + based on the implementation's wishes. + */ + enum DIR_FLAG + { + DIR_FLAG_DEFAULTS = 0, + DIR_FLAG_NO_FILE_DIRS = (2 << 0), ///< Don't convert files (zip, rar etc.) to directories + DIR_FLAG_ALLOW_PROMPT = (2 << 1), ///< Allow prompting for further info (passwords etc.) + DIR_FLAG_NO_FILE_INFO = (2 << 2), ///< Don't read additional file info (stat for example) + DIR_FLAG_GET_HIDDEN = (2 << 3), ///< Get hidden files + DIR_FLAG_READ_CACHE = (2 << 4), ///< Force reading from the directory cache (if available) + DIR_FLAG_BYPASS_CACHE = (2 << 5) ///< Completely bypass the directory cache (no reading, no writing) + }; /*! \ingroup filesystem \brief Interface to the directory on a file system. @@ -91,10 +105,7 @@ class IDirectory virtual DIR_CACHE_TYPE GetCacheType(const CStdString& strPath) const { return DIR_CACHE_ONCE; }; void SetMask(const CStdString& strMask); - void SetAllowPrompting(bool allowPrompting); - void SetCacheDirectory(DIR_CACHE_TYPE cacheDirectory); - void SetUseFileDirectories(bool useFileDirectories); - void SetExtFileInfo(bool extFileInfo); + void SetFlags(int flags); /*! \brief Process additional requirements before the directory fetch is performed. Some directory fetches may require authentication, keyboard input etc. The IDirectory subclass @@ -137,10 +148,8 @@ class IDirectory void RequireAuthentication(const CStdString &url); CStdString m_strFileMask; ///< Holds the file mask specified by SetMask() - bool m_allowPrompting; ///< If true, the directory handlers may prompt the user - DIR_CACHE_TYPE m_cacheDirectory; ///< If !DIR_CACHE_NEVER the directory is cached by g_directoryCache (defaults to DIR_CACHE_ONCE) - bool m_useFileDirectories; ///< If true the directory may allow file directories (defaults to false) - bool m_extFileInfo; ///< If true the GetDirectory call can retrieve extra file information (defaults to true) + + int m_flags; ///< Directory flags - see DIR_FLAG CVariant m_requirements; }; diff --git a/xbmc/filesystem/MultiPathDirectory.cpp b/xbmc/filesystem/MultiPathDirectory.cpp index 8c8b8179ae29e..9fc431baeaebc 100644 --- a/xbmc/filesystem/MultiPathDirectory.cpp +++ b/xbmc/filesystem/MultiPathDirectory.cpp @@ -88,7 +88,7 @@ bool CMultiPathDirectory::GetDirectory(const CStdString& strPath, CFileItemList CFileItemList tempItems; CLog::Log(LOGDEBUG,"Getting Directory (%s)", vecPaths[i].c_str()); - if (CDirectory::GetDirectory(vecPaths[i], tempItems, m_strFileMask, m_useFileDirectories, m_allowPrompting, m_cacheDirectory, m_extFileInfo)) + if (CDirectory::GetDirectory(vecPaths[i], tempItems, m_strFileMask, m_flags)) items.Append(tempItems); else { diff --git a/xbmc/filesystem/RSSDirectory.cpp b/xbmc/filesystem/RSSDirectory.cpp index 01432492665cc..8e217bee335d7 100644 --- a/xbmc/filesystem/RSSDirectory.cpp +++ b/xbmc/filesystem/RSSDirectory.cpp @@ -72,7 +72,6 @@ CCriticalSection CRSSDirectory::m_section; CRSSDirectory::CRSSDirectory() { - SetCacheDirectory(DIR_CACHE_ONCE); } CRSSDirectory::~CRSSDirectory() diff --git a/xbmc/filesystem/SMBDirectory.cpp b/xbmc/filesystem/SMBDirectory.cpp index 75e2a4a9663be..998da90e0426b 100644 --- a/xbmc/filesystem/SMBDirectory.cpp +++ b/xbmc/filesystem/SMBDirectory.cpp @@ -150,7 +150,7 @@ bool CSMBDirectory::GetDirectory(const CStdString& strPath, CFileItemList &items #else struct stat info = {0}; #endif - if (m_extFileInfo && g_advancedSettings.m_sambastatfiles) + if ((m_flags & DIR_FLAG_NO_FILE_INFO)==0 && g_advancedSettings.m_sambastatfiles) { // make sure we use the authenticated path wich contains any default username CStdString strFullName = strAuth + smb.URLEncode(strFile); @@ -305,7 +305,7 @@ int CSMBDirectory::OpenDir(const CURL& url, CStdString& strAuth) if (errno == EACCES) #endif { - if (m_allowPrompting) + if (m_flags & DIR_FLAG_ALLOW_PROMPT) RequireAuthentication(urlIn.Get()); break; } @@ -324,7 +324,7 @@ int CSMBDirectory::OpenDir(const CURL& url, CStdString& strAuth) cError = strerror(errno); #endif - if (m_allowPrompting) + if (m_flags & DIR_FLAG_ALLOW_PROMPT) SetErrorDialog(257, cError.c_str()); break; } diff --git a/xbmc/filesystem/SmbFile.cpp b/xbmc/filesystem/SmbFile.cpp index 4ab5f76b6657d..382553c42b4e1 100644 --- a/xbmc/filesystem/SmbFile.cpp +++ b/xbmc/filesystem/SmbFile.cpp @@ -493,7 +493,7 @@ int CSmbFile::OpenFile(const CURL &url, CStdString& strAuth) CSMBDirectory smbDir; // TODO: Currently we always allow prompting on files. This may need to // change in the future as background scanners are more prolific. - smbDir.SetAllowPrompting(true); + smbDir.SetFlags(DIR_FLAG_ALLOW_PROMPT); fd = smbDir.Open(urlshare); // directory open worked, try opening the file again diff --git a/xbmc/filesystem/SpecialProtocolDirectory.cpp b/xbmc/filesystem/SpecialProtocolDirectory.cpp index fc488e36e7dc1..62b7c4cb02dba 100644 --- a/xbmc/filesystem/SpecialProtocolDirectory.cpp +++ b/xbmc/filesystem/SpecialProtocolDirectory.cpp @@ -39,7 +39,7 @@ bool CSpecialProtocolDirectory::GetDirectory(const CStdString& strPath, CFileIte { CStdString untranslatedPath = strPath; // Why do I need a copy??? - the GetDirectory() call below will override strPath??? CStdString translatedPath = CSpecialProtocol::TranslatePath(strPath); - if (CDirectory::GetDirectory(translatedPath, items, m_strFileMask, m_useFileDirectories, m_allowPrompting, m_cacheDirectory, m_extFileInfo, false, true)) + if (CDirectory::GetDirectory(translatedPath, items, m_strFileMask, m_flags | DIR_FLAG_GET_HIDDEN)) { // replace our paths as necessary items.SetPath(untranslatedPath); for (int i = 0; i < items.Size(); i++) diff --git a/xbmc/filesystem/VirtualDirectory.cpp b/xbmc/filesystem/VirtualDirectory.cpp index 064639f5fcec4..1299730a5e563 100644 --- a/xbmc/filesystem/VirtualDirectory.cpp +++ b/xbmc/filesystem/VirtualDirectory.cpp @@ -42,8 +42,7 @@ namespace XFILE CVirtualDirectory::CVirtualDirectory(void) { - m_allowPrompting = true; // by default, prompting is allowed. - m_cacheDirectory = DIR_CACHE_ONCE; // by default, caching is done. + m_flags = DIR_FLAG_ALLOW_PROMPT; m_allowNonLocalSources = true; m_allowThreads = true; } @@ -76,8 +75,11 @@ bool CVirtualDirectory::GetDirectory(const CStdString& strPath, CFileItemList &i } bool CVirtualDirectory::GetDirectory(const CStdString& strPath, CFileItemList &items, bool bUseFileDirectories) { + int flags = m_flags; + if (!bUseFileDirectories) + flags |= DIR_FLAG_NO_FILE_DIRS; if (!strPath.IsEmpty() && strPath != "files://") - return CDirectory::GetDirectory(strPath, items, m_strFileMask, bUseFileDirectories, m_allowPrompting, m_cacheDirectory, m_extFileInfo, m_allowThreads); + return CDirectory::GetDirectory(strPath, items, m_strFileMask, flags, m_allowThreads); // if strPath is blank, clear the list (to avoid parent items showing up) if (strPath.IsEmpty()) diff --git a/xbmc/filesystem/ZeroconfDirectory.cpp b/xbmc/filesystem/ZeroconfDirectory.cpp index b4333f00dfd36..f7b42e903e0cf 100644 --- a/xbmc/filesystem/ZeroconfDirectory.cpp +++ b/xbmc/filesystem/ZeroconfDirectory.cpp @@ -241,7 +241,7 @@ bool CZeroconfDirectory::GetDirectory(const CStdString& strPath, CFileItemList & } else//no txt record path - so let the CDirectory handler show the folders { - return CDirectory::GetDirectory(service.Get(), items, "", true, true); + return CDirectory::GetDirectory(service.Get(), items, "", DIR_FLAG_ALLOW_PROMPT); } } } catch (std::runtime_error& e) { diff --git a/xbmc/filesystem/windows/WINSMBDirectory.cpp b/xbmc/filesystem/windows/WINSMBDirectory.cpp index 5e2c2de24d980..02d1a46399b32 100644 --- a/xbmc/filesystem/windows/WINSMBDirectory.cpp +++ b/xbmc/filesystem/windows/WINSMBDirectory.cpp @@ -379,7 +379,7 @@ bool CWINSMBDirectory::ConnectToShare(const CURL& url) if(dwRet == ERROR_ACCESS_DENIED || dwRet == ERROR_INVALID_PASSWORD || dwRet == ERROR_LOGON_FAILURE) { CLog::Log(LOGERROR,"Couldn't connect to %s, access denied", strUNC.c_str()); - if (m_allowPrompting) + if (m_flags & DIR_FLAG_ALLOW_PROMPT) RequireAuthentication(urlIn.Get()); break; } diff --git a/xbmc/music/GUIViewStateMusic.cpp b/xbmc/music/GUIViewStateMusic.cpp index 2499e4fc20bd0..dff52ae6dfb57 100644 --- a/xbmc/music/GUIViewStateMusic.cpp +++ b/xbmc/music/GUIViewStateMusic.cpp @@ -569,7 +569,7 @@ VECSOURCES& CGUIViewStateWindowMusicNav::GetSources() m_sources.clear(); // Musicdb shares CFileItemList items; - CDirectory::GetDirectory("musicdb://", items, "", true, false, DIR_CACHE_ONCE, true, false); + CDirectory::GetDirectory("musicdb://", items, ""); for (int i=0; iIsCBZ() || pItem->IsCBR()) { - CDirectory::GetDirectory(strPath, items, g_settings.m_pictureExtensions, false, false); + CDirectory::GetDirectory(strPath, items, g_settings.m_pictureExtensions, DIR_FLAG_NO_FILE_DIRS); for (int i=0;iContent() != CONTENT_TVSHOWS) { CFileItemList items; - CDirectory::GetDirectory(item.GetPath(), items, g_settings.m_videoExtensions,true,false,DIR_CACHE_ONCE,true,true); + CDirectory::GetDirectory(item.GetPath(), items, g_settings.m_videoExtensions); items.Stack(); // check for media files diff --git a/xbmc/video/windows/GUIWindowVideoNav.cpp b/xbmc/video/windows/GUIWindowVideoNav.cpp index a43b689fd9710..c748297b6fc6d 100644 --- a/xbmc/video/windows/GUIWindowVideoNav.cpp +++ b/xbmc/video/windows/GUIWindowVideoNav.cpp @@ -282,7 +282,6 @@ bool CGUIWindowVideoNav::GetDirectory(const CStdString &strDirectory, CFileItemL if (m_thumbLoader.IsLoading()) m_thumbLoader.StopThread(); - m_rootDir.SetCacheDirectory(DIR_CACHE_ONCE); items.ClearProperties(); bool bResult = CGUIWindowVideoBase::GetDirectory(strDirectory, items); @@ -684,7 +683,7 @@ void CGUIWindowVideoNav::OnDeleteItem(CFileItemPtr pItem) if (pDialog->IsConfirmed()) { CFileItemList items; - CDirectory::GetDirectory(pItem->GetPath(),items,"",false,false,DIR_CACHE_ONCE,true,true); + CDirectory::GetDirectory(pItem->GetPath(),items,"",DIR_FLAG_NO_FILE_DIRS); for (int i=0;i