diff -r ea40955a0937 -r 8ad353f31184 WebBrowser/Tools/WebBrowserTools.py --- a/WebBrowser/Tools/WebBrowserTools.py Sun Feb 21 18:54:48 2016 +0100 +++ b/WebBrowser/Tools/WebBrowserTools.py Sun Feb 21 19:54:14 2016 +0100 @@ -13,7 +13,9 @@ except NameError: pass -from PyQt5.QtCore import QFile, QByteArray +import os + +from PyQt5.QtCore import QFile, QByteArray, QUrl def readAllFileContents(filename): @@ -60,3 +62,73 @@ return True return False + + +def ensureUniqueFilename(name, appendFormat="({0})"): + """ + Module function to generate an unique file name based on a pattern. + + @param name desired file name (string) + @param appendFormat format pattern to be used to make the unique name + (string) + @return unique file name + """ + if not os.path.exists(name): + return name + + tmpFileName = name + i = 1 + while os.path.exists(tmpFileName): + tmpFileName = name + index = tmpFileName.rfind(".") + + appendString = appendFormat.format(i) + if index == -1: + tmpFileName += appendString + else: + tmpFileName = tmpFileName[:index] + appendString + \ + tmpFileName[index:] + i += 1 + + return tmpFileName + + +def getFileNameFromUrl(url): + """ + Module function to generate a file name based on the given URL. + + @param url URL (QUrl) + @return file name (string) + """ + fileName = url.toString(QUrl.RemoveFragment | QUrl.RemoveQuery | + QUrl.RemoveScheme | QUrl.RemovePort) + if fileName.find("/") != -1: + pos = fileName.rfind("/") + fileName = fileName[pos:] + fileName = fileName.replace("/", "") + + fileName = filterCharsFromFilename(fileName) + + if not fileName: + fileName = filterCharsFromFilename(url.host().replace(".", "_")) + + return fileName + + +def filterCharsFromFilename(name): + """ + Module function to filter illegal characters. + + @param name name to be sanitized (string) + @return sanitized name (string) + """ + return name\ + .replace("/", "_")\ + .replace("\\", "")\ + .replace(":", "")\ + .replace("*", "")\ + .replace("?", "")\ + .replace('"', "")\ + .replace("<", "")\ + .replace(">", "")\ + .replace("|", "")