3 * Copyright (C) 2005-2013 Team XBMC
6 * This Program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2, or (at your option)
11 * This Program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with XBMC; see the file COPYING. If not, see
18 * <http://www.gnu.org/licenses/>.
28 #include "MediaSource.h"
30 // A list of filesystem types for LegalPath/FileName
32 #define LEGAL_WIN32_COMPAT 1
44 struct sortstringbyname
46 bool operator()(const CStdString& strItem1, const CStdString& strItem2)
48 CStdString strLine1 = strItem1;
49 CStdString strLine2 = strItem2;
50 strLine1 = strLine1.ToLower();
51 strLine2 = strLine2.ToLower();
52 return strcmp(strLine1.c_str(), strLine2.c_str()) < 0;
61 static void CleanString(const CStdString& strFileName, CStdString& strTitle, CStdString& strTitleAndYear, CStdString& strYear, bool bRemoveExtension = false, bool bCleanChars = true);
62 static CStdString GetTitleFromPath(const CStdString& strFileNameAndPath, bool bIsFolder = false);
63 static void GetQualifiedFilename(const CStdString &strBasePath, CStdString &strFilename);
64 static void RunShortcut(const char* szPath);
65 static void GetHomePath(CStdString& strPath, const CStdString& strTarget = "XBMC_HOME");
66 static bool IsPVR(const CStdString& strFile);
67 static bool IsHTSP(const CStdString& strFile);
68 static bool IsLiveTV(const CStdString& strFile);
69 static bool IsTVRecording(const CStdString& strFile);
70 static bool ExcludeFileOrFolder(const CStdString& strFileOrFolder, const CStdStringArray& regexps);
71 static void GetFileAndProtocol(const CStdString& strURL, CStdString& strDir);
72 static int GetDVDIfoTitle(const CStdString& strPathFile);
74 static bool IsPicture(const CStdString& strFile);
76 /*! \brief retrieve MD5sum of a file
77 \param strPath - path to the file to MD5sum
78 \return md5 sum of the file
80 static CStdString GetFileMD5(const CStdString& strPath);
81 static bool GetDirectoryName(const CStdString& strFileName, CStdString& strDescription);
82 static void GetDVDDriveIcon( const CStdString& strPath, CStdString& strIcon );
83 static void RemoveTempFiles();
84 static void ClearTempFonts();
86 static void ClearSubtitles();
87 static void ScanForExternalSubtitles(const CStdString& strMovie, std::vector<CStdString>& vecSubtitles );
88 static int ScanArchiveForSubtitles( const CStdString& strArchivePath, const CStdString& strMovieFileNameNoExt, std::vector<CStdString>& vecSubtitles );
89 static bool FindVobSubPair( const std::vector<CStdString>& vecSubtitles, const CStdString& strIdxPath, CStdString& strSubPath );
90 static bool IsVobSub( const std::vector<CStdString>& vecSubtitles, const CStdString& strSubPath );
91 static int64_t ToInt64(uint32_t high, uint32_t low);
92 static CStdString GetNextFilename(const CStdString &fn_template, int max);
93 static CStdString GetNextPathname(const CStdString &path_template, int max);
94 static void StatToStatI64(struct _stati64 *result, struct stat *stat);
95 static void Stat64ToStatI64(struct _stati64 *result, struct __stat64 *stat);
96 static void StatI64ToStat64(struct __stat64 *result, struct _stati64 *stat);
97 static void Stat64ToStat(struct stat *result, struct __stat64 *stat);
99 static void Stat64ToStat64i32(struct _stat64i32 *result, struct __stat64 *stat);
101 static bool CreateDirectoryEx(const CStdString& strPath);
103 #ifdef TARGET_WINDOWS
104 static CStdString MakeLegalFileName(const CStdString &strFile, int LegalType=LEGAL_WIN32_COMPAT);
105 static CStdString MakeLegalPath(const CStdString &strPath, int LegalType=LEGAL_WIN32_COMPAT);
107 static CStdString MakeLegalFileName(const CStdString &strFile, int LegalType=LEGAL_NONE);
108 static CStdString MakeLegalPath(const CStdString &strPath, int LegalType=LEGAL_NONE);
110 static CStdString ValidatePath(const CStdString &path, bool bFixDoubleSlashes = false); ///< return a validated path, with correct directory separators.
112 static bool IsUsingTTFSubtitles();
114 /*! \brief Split a comma separated parameter list into separate parameters.
115 Takes care of the case where we may have a quoted string containing commas, or we may
116 have a function (i.e. parentheses) with multiple parameters as a single parameter.
120 foo, bar(param1, param2), foo
124 "foo", "bar(param1, param2)", and "foo".
126 \param paramString the string to break up
127 \param parameters the returned parameters
129 static void SplitParams(const CStdString ¶mString, std::vector<CStdString> ¶meters);
130 static void SplitExecFunction(const CStdString &execString, CStdString &function, std::vector<CStdString> ¶meters);
131 static int GetMatchingSource(const CStdString& strPath, VECSOURCES& VECSOURCES, bool& bIsSourceName);
132 static CStdString TranslateSpecialSource(const CStdString &strSpecial);
133 static void DeleteDirectoryCache(const CStdString &prefix = "");
134 static void DeleteMusicDatabaseDirectoryCache();
135 static void DeleteVideoDatabaseDirectoryCache();
136 static CStdString MusicPlaylistsLocation();
137 static CStdString VideoPlaylistsLocation();
139 static void GetSkinThemes(std::vector<CStdString>& vecTheme);
140 static void GetRecursiveListing(const CStdString& strPath, CFileItemList& items, const CStdString& strMask, bool bUseFileDirectories=false);
141 static void GetRecursiveDirsListing(const CStdString& strPath, CFileItemList& items);
142 static void ForceForwardSlashes(CStdString& strPath);
144 static double AlbumRelevance(const CStdString& strAlbumTemp1, const CStdString& strAlbum1, const CStdString& strArtistTemp1, const CStdString& strArtist1);
145 static bool MakeShortenPath(CStdString StrInput, CStdString& StrOutput, int iTextMaxLength);
146 /*! \brief Checks wether the supplied path supports Write file operations (e.g. Rename, Delete, ...)
148 \param strPath the path to be checked
150 \return true if Write file operations are supported, false otherwise
152 static bool SupportsWriteFileOperations(const CStdString& strPath);
153 /*! \brief Checks wether the supplied path supports Read file operations (e.g. Copy, ...)
155 \param strPath the path to be checked
157 \return true if Read file operations are supported, false otherwise
159 static bool SupportsReadFileOperations(const CStdString& strPath);
160 static CStdString GetDefaultFolderThumb(const CStdString &folderThumb);
163 static bool TestSplitExec();
164 static bool TestGetQualifiedFilename();
165 static bool TestMakeLegalPath();
168 static void InitRandomSeed();
170 // Get decimal integer representation of roman digit, ivxlcdm are valid
171 // return 0 for other chars;
172 static int LookupRomanDigit(char roman_digit);
173 // Translate a string of roman numerals to decimal a decimal integer
174 // return -1 on error, valid range is 1-3999
175 static int TranslateRomanNumeral(const char* roman_numeral);
178 // this will run the command using sudo in a new process.
179 // the user that runs xbmc should be allowed to issue the given sudo command.
180 // in order to allow a user to run sudo without supplying the password you'll need to edit sudoers
182 // and add a line at the end defining the user and allowed commands
183 static bool SudoCommand(const CStdString &strCommand);
186 // Forks to execute a shell command.
188 static bool Command(const CStdStringArray& arrArgs, bool waitExit = false);
191 // Forks to execute an unparsed shell command line.
193 static bool RunCommandLine(const CStdString& cmdLine, bool waitExit = false);
195 static CStdString ResolveExecutablePath();
196 static CStdString GetFrameworksPath(bool forPython = false);
198 static bool CanBindPrivileged();
199 static bool ValidatePort(int port);
202 * \brief Thread-safe random number generation
204 static int GetRandomNumber();
206 #if !defined(TARGET_WINDOWS)
208 static unsigned int s_randomSeed;