Ejemplo n.º 1
0
def getTagger(_isAlertIfNotExist=False, _isReloadAgain=False):
    global loaddedTagger
    try:
        if not _isReloadAgain and loaddedTagger is not None:
            return loaddedTagger
        preferedTaggerModule = uni.MySettings["preferedTaggerModule"]
        taggerModule = __import__("Taggers." + preferedTaggerModule, globals(), locals(), ["isAvailable", "Tagger", preferedTaggerModule], 0)
        if taggerModule.isAvailable:
            loaddedTagger = taggerModule.Tagger()
            return loaddedTagger

        taggersNames = uni.getTaggersMachineNames()
        for tagger in taggersNames:
            taggerModule = __import__("Taggers." + tagger, globals(), locals(), ["isAvailable", "Tagger", tagger], 0)
            if taggerModule.isAvailable:
                uni.setMySetting("preferedTaggerModule", tagger)
                loaddedTagger = taggerModule.Tagger()
                return loaddedTagger
        if _isAlertIfNotExist:
            Dialogs.show(translate("Taggers", "You Have Not Any Tagger"),
                         translate("Taggers", "Not found any tagger in your system. "
                                              "Please install a tagger module. "
                                              "Now supporting only eyeD3 module (python-eyed3)."))
        return None
    except:
        ReportBug.ReportBug()
Ejemplo n.º 2
0
def readMusicFile(_filePath, _isAlertWhenNotAvailable=True):
    _directoryPath = fu.getDirName(_filePath)
    isCanNoncompatible = False
    if fu.isReadableFileOrDir(_filePath):
        tagger = Taggers.getTagger()
        try:
            tagger.loadFile(_filePath)
        except:
            Dialogs.showError(translate("FileUtils/Musics", "Incorrect Tag"),
                              str(translate("FileUtils/Musics",
                                            "\"%s\" : this file has the incorrect tag so can't read tags.")
                              ) % Organizer.getLink(_filePath))
        if tagger.isAvailableFile() is False:
            isCanNoncompatible = True
        content = {}
        content["path"] = _filePath
        content["baseNameOfDirectory"] = fu.getBaseName(_directoryPath)
        content["baseName"] = fu.getBaseName(_filePath)
        content["artist"] = tagger.getArtist()
        content["title"] = tagger.getTitle()
        content["album"] = tagger.getAlbum()
        content["albumArtist"] = tagger.getAlbumArtist()
        content["trackNum"] = tagger.getTrackNum()
        content["year"] = tagger.getYear()
        content["genre"] = tagger.getGenre()
        content["firstComment"] = tagger.getFirstComment()
        content["firstLyrics"] = tagger.getFirstLyrics()
        content["images"] = tagger.getImages()
        if isCanNoncompatible and _isAlertWhenNotAvailable:
            Dialogs.show(translate("FileUtils/Musics", "Possible ID3 Mismatch"),
                         translate("FileUtils/Musics",
                                   "Some of the files presented in the table may not support ID3 technology.<br>Please check the files and make sure they support ID3 information before proceeding."))
        return content
Ejemplo n.º 3
0
 def uninstallPlugin(self, _pluginName, _isQuiet=False):
     isUninstalled = False
     pluginModule = __import__("MyPlugins." + _pluginName, globals(), locals(),
                               ["pluginName", "pluginFiles", "pluginDirectory", "uninstallThisPlugin",
                                "setupDirectory", "pluginVersion"], 0)
     if pluginModule.uninstallThisPlugin is None:
         if pluginModule.pluginDirectory == "":
             for pluginFile in pluginModule.pluginFiles:
                 if fu.isFile(fu.joinPath(pluginModule.setupDirectory, pluginFile)):
                     fu.removeFileOrDir(fu.joinPath(pluginModule.setupDirectory, pluginFile))
             isUninstalled = True
         else:
             if fu.isDir(fu.joinPath(pluginModule.setupDirectory, pluginModule.pluginDirectory)):
                 fu.removeFileOrDir(fu.joinPath(pluginModule.setupDirectory, pluginModule.pluginDirectory))
             isUninstalled = True
     else:
         isUninstalled = pluginModule.uninstallThisPlugin()
     if isUninstalled:
         Settings.setUniversalSetting(str(pluginModule.pluginName), str(""))
         if _isQuiet is False:
             Dialogs.show(translate("MyPlugins", "Plug-in Uninstallation Is Complete"),
                          str(translate("MyPlugins", "\"%s\" is uninstalled on your system.")) % (
                              pluginModule.pluginName))
     elif isUninstalled == "AlreadyUninstalled":
         if _isQuiet is False:
             Dialogs.show(translate("MyPlugins", "Plug-in Already Uninstalled"),
                          str(translate("MyPlugins", "\"%s\" already uninstalled on your system.")) % (
                              pluginModule.pluginName))
     else:
         if _isQuiet is False:
             Dialogs.showError(translate("MyPlugins", "Plug-in Uninstallation Failed"),
                               str(translate("MyPlugins", "\"%s\" failed to uninstall on your system.")) % (
                                   pluginModule.pluginName))
Ejemplo n.º 4
0
 def hash(self):
     sourceFile = str(self.lePathOfPackage.text())
     sourceFile = fu.checkSource(sourceFile, "file")
     if sourceFile is not None:
         hashType = str(self.cbHash.currentText())
         if hashType is not None:
             hashDigestContent = fu.getHashDigest(sourceFile, hashType)
             if hashDigestContent is not False:
                 self.teHashDigest.setText(str(hashDigestContent))
                 if self.cbHashOutput.currentIndex() == 1:
                     if fu.createHashDigestFile(sourceFile, str(self.leHashDigestFile.text()), hashType, False,
                                                hashDigestContent):
                         Dialogs.show(translate("Hasher", "Hash Digest File Created"),
                                      str(translate("Hasher", "Hash digest writed into %s")) % str(
                                          self.leHashDigestFile.text()))
                     else:
                         Dialogs.showError(translate("Hasher", "Hash Digest File Is Not Created"),
                                           translate("Hasher", "Hash digest file not cteated."))
                 elif self.cbHashOutput.currentIndex() == 2:
                     MApplication.clipboard().setText(str(hashDigestContent))
                     Dialogs.show(translate("Hasher", "Hash Digest Copied To Clipboard"),
                                  str(translate("Hasher",
                                                "Hash digest copied to clipboard.Hash digest is : <br>%s")) % hashDigestContent)
             else:
                 Dialogs.showError(translate("Hasher", "Hash Digest Is Not Created"),
                                   translate("Hasher", "Hash digest not cteated."))
Ejemplo n.º 5
0
def createReadOnlyEmbeddedDB(_isNoAlertIfSuccessfully=True):
    stopReadOnlyEmbeddedDB()
    if fu.isDir(fu.pathOfSettingsDirectory + "/Amarok"):
        fu.removeFileOrDir(fu.pathOfSettingsDirectory + "/Amarok")
    fu.makeDirs(fu.pathOfSettingsDirectory + "/Amarok/mysqle")
    fu.copyFileOrDir(
        fu.HamsiManagerDirectory + "/Amarok/EmbeddedDBFiles/mysql",
        fu.pathOfSettingsDirectory + "/Amarok/mysqle/mysql",
    )
    fu.copyFileOrDir(
        fu.HamsiManagerDirectory + "/Amarok/EmbeddedDBFiles/my-readOnly.cnf",
        fu.pathOfSettingsDirectory + "/Amarok/my.cnf")
    MyConfigure.reConfigureFile(fu.pathOfSettingsDirectory + "/Amarok/my.cnf")
    fu.makeDirs(fu.pathOfSettingsDirectory + "/Amarok/mysqle/amarok")
    fu.copyFileOrDir(
        uni.getKDE4HomePath() + "/share/apps/amarok/mysqle/ib_logfile0",
        fu.pathOfSettingsDirectory + "/Amarok/mysqle/ib_logfile0")
    fu.copyFileOrDir(
        uni.getKDE4HomePath() + "/share/apps/amarok/mysqle/ib_logfile1",
        fu.pathOfSettingsDirectory + "/Amarok/mysqle/ib_logfile1")
    fu.copyFileOrDir(
        uni.getKDE4HomePath() + "/share/apps/amarok/mysqle/ibdata1",
        fu.pathOfSettingsDirectory + "/Amarok/mysqle/ibdata1")
    generateReadOnlyEmbeddedD()
    if _isNoAlertIfSuccessfully is False:
        Dialogs.show(
            translate("EmbeddedDBCore", "Created Embedded Server"),
            translate(
                "EmbeddedDBCore",
                "Embedded Amarok database server created and generated."))
    return True
Ejemplo n.º 6
0
 def emendDirectoryWithContents(self):
     try:
         _path = self.checkSource(str(QuickMakeParameters[1]), "directory")
         if _path is not None:
             if uni.getBoolValue("isShowQuickMakeWindow"):
                 newEmendedName = str(self.leNewValue.text())
             else:
                 newEmendedName = Organizer.emend(_path, fu.getObjectType(_path))
             fu.activateSmartCheckIcon()
             oldFileName = _path
             newDirName = fu.moveOrChange(oldFileName, newEmendedName, "directory")
             if newDirName != oldFileName:
                 fileAndDirectoryNames = fu.readDirectory(newDirName, "fileAndDirectory")
                 for fileAndDirs in fileAndDirectoryNames:
                     objectType = fu.getObjectType(fu.joinPath(newDirName, fileAndDirs))
                     fu.moveOrChange(fu.joinPath(newDirName, fileAndDirs),
                                     fu.joinPath(newDirName, Organizer.emend(fileAndDirs, objectType)), objectType)
                 if uni.isActiveDirectoryCover and uni.getBoolValue(
                     "isActiveAutoMakeIconToDirectory") and uni.getBoolValue(
                     "isAutoMakeIconToDirectoryWhenFileMove"):
                     fu.checkIcon(newDirName)
                 if fu.isDir(newDirName):
                     fu.completeSmartCheckIcon()
                 Dialogs.show(translate("QuickMake", "Directory And Contents Emended"),
                              str(translate("QuickMake",
                                            "\"%s\" is emended based on the criteria you set.This directory is \"%s\" now.")) %
                              (Organizer.getLink(_path), Organizer.getLink(newDirName)))
         self.close()
     except:
         ReportBug.ReportBug()
Ejemplo n.º 7
0
    def search(self, _searchValue=""):
        try:
            import re

            if self.setSourceToSearch(False):
                if self.cckbIsRegExp.checkState() == Mt.Checked:
                    searchValueList = [str(self.leSearch.text())]
                else:
                    searchValueList = self.getSearchValueList()
                if len(searchValueList) != 0:
                    searchValueListForToolTip = ""
                    resultOfSearch = ""
                    arrayOfSource = str(self.sourceToSearch).split("\n\r")
                    if len(arrayOfSource) == 1: arrayOfSource = str(self.sourceToSearch).split("\n")
                    if len(arrayOfSource) == 1: arrayOfSource = str(self.sourceToSearch).split("<br>")
                    if len(arrayOfSource) == 1: arrayOfSource = str(self.sourceToSearch).split("<br/>")
                    if len(arrayOfSource) == 1: arrayOfSource = str(self.sourceToSearch).split("<br >")
                    if len(arrayOfSource) == 1: arrayOfSource = str(self.sourceToSearch).split("<br />")
                    for row in arrayOfSource:
                        for searchVal in searchValueList:
                            if self.cckbIsRegExp.checkState() == Mt.Checked:
                                try:
                                    if self.cckbIsCaseInsensitive.checkState() == Mt.Checked:
                                        pattern = re.compile(uni.trUnicode(searchVal), re.I | re.U)
                                        if re.search(pattern, uni.trUnicode(row)) is not None:
                                            resultOfSearch += row + "\n"
                                            break
                                    else:
                                        pattern = re.compile(uni.trUnicode(searchVal), re.U)
                                        if re.search(pattern, uni.trUnicode(row)) is not None:
                                            resultOfSearch += row + "\n"
                                            break
                                except:
                                    Dialogs.show(translate("Searcher", "Incorrect Syntax"), translate("Searcher",
                                                                                                      "Search value is not correct for Regular Expression (RegExp). Please check it and try again."))
                                    return False
                            else:
                                if row.find(searchVal) != -1:
                                    resultOfSearch += row + "\n"
                                    break
                                if self.cckbIsCaseInsensitive.checkState() == Mt.Checked:
                                    pattern = re.compile(re.escape(uni.trUnicode(searchVal)), re.I | re.U)
                                    if re.search(pattern, uni.trUnicode(row)) is not None:
                                        resultOfSearch += row + "\n"
                                        break
                                else:
                                    pattern = re.compile(re.escape(uni.trUnicode(searchVal)), re.U)
                                    if re.search(pattern, uni.trUnicode(row)) is not None:
                                        resultOfSearch += row + "\n"
                                        break
                    for searchVal in searchValueList:
                        searchValueListForToolTip += "'" + searchVal + "', "
                    self.lblSearchListValues.setText(str(searchValueListForToolTip[0:-2]))
                else:
                    resultOfSearch = str(self.sourceToSearch)
                    self.lblSearchListValues.setText(str(""))
                self.teSearchResult.setText(str(resultOfSearch))
        except:
            ReportBug.ReportBug()
Ejemplo n.º 8
0
 def backup(self):
     backupEmbeddedDB()
     Dialogs.show(
         translate("EmbeddedDBConfigurator", "Backup Completed"),
         translate(
             "EmbeddedDBConfigurator",
             "Backup successfully completed.<br> You can restore when you want."
         ))
     self.pbtnRestore.setEnabled(isHasEmbeddedDBBackup())
Ejemplo n.º 9
0
def whatDoesSpecialCommandDo(_actionCommand, _isShowAlert=False, _isReturnDetails=False):
    splitterIndex = _actionCommand.index("~||~")
    leftKeys = _actionCommand[:splitterIndex]
    rightKeys = _actionCommand[splitterIndex + 1:]
    if len(leftKeys) > 0 and len(rightKeys) > 0:
        details = ""
        leftNames = ""
        rightNames = ""
        for objectNameAndPoint in leftKeys:
            objectNameAndPointList = objectNameAndPoint.split("~|~")
            objectName = objectNameAndPointList[0]
            point = ""
            if len(objectNameAndPointList) > 1:
                point = objectNameAndPointList[1]
            if objectName.find("Concatenate") == -1:
                leftNames += getMainTable().getColumnNameFromKey(objectName)
            else:
                leftNames += translate("Organizer", "Concatenate")
            if point != "":
                if objectName.find("Concatenate") == -1:
                    leftNames += " " + (str(translate("Organizer", "(can be separated by \"%s\")")) % (point))
                else:
                    leftNames += " " + (str(translate("Organizer", "(can be concatenated by \"%s\")")) % (point))
            if leftKeys[-1] != objectNameAndPoint:
                leftNames += " ,"
        for objectNameAndPoint in rightKeys:
            objectNameAndPointList = objectNameAndPoint.split("~|~")
            objectName = objectNameAndPointList[0]
            point = ""
            if len(objectNameAndPointList) > 1:
                point = objectNameAndPointList[1]
            if objectName.find("Concatenate") == -1:
                rightNames += getMainTable().getColumnNameFromKey(objectName)
            else:
                rightNames += translate("Organizer", "Concatenate")
            if point != "":
                if objectName.find("Concatenate") == -1:
                    rightNames += " " + (str(translate("Organizer", "(can be separated by \"%s\")")) % (point))
                else:
                    rightNames += " " + (str(translate("Organizer", "(can be concatenated by \"%s\")")) % (point))
            if rightKeys[-1] != objectNameAndPoint:
                rightNames += " ,"

        details = str(translate("Organizer",
                                "\"%s\" will be concatenated and/or separated then it will be set as \"%s\" respectively.")) % (
                      leftNames, rightNames)

        if _isShowAlert:
            Dialogs.show(translate("Organizer", "What Does This Command Do?"), str(details))
        if _isReturnDetails is False:
            return True
        else:
            return details
    else:
        Dialogs.showError(translate("Organizer", "Missing Command"),
                          translate("Organizer", "You have to add at least a \"Column\"!.."))
        return False
Ejemplo n.º 10
0
 def copyPath(self):
     try:
         _path = self.checkSource(str(QuickMakeParameters[1]), "fileAndDirectory", False)
         if _path is not None:
             MApplication.clipboard().setText(str(_path))
             Dialogs.show(translate("QuickMake", "Copied To Clipboard"),
                          str(translate("QuickMake", "\"%s\" copied to clipboard.")) % Organizer.getLink(_path))
         self.close()
     except:
         ReportBug.ReportBug()
Ejemplo n.º 11
0
def generateReadOnlyEmbeddedD(_isNoAlertIfSuccessfully=True):
    stopReadOnlyEmbeddedDB()
    if fu.isExist(fu.pathOfSettingsDirectory + "/Amarok/mysqle/amarok"):
        fu.removeFileOrDir(fu.pathOfSettingsDirectory + "/Amarok/mysqle/amarok")
    fu.copyFileOrDir(uni.getKDE4HomePath() + "/share/apps/amarok/mysqle/amarok",
                     fu.pathOfSettingsDirectory + "/Amarok/mysqle/amarok")
    if _isNoAlertIfSuccessfully is False:
        Dialogs.show(translate("EmbeddedDBCore", "Generated Embedded Server"),
                     translate("EmbeddedDBCore", "Embedded Amarok database server generated."))
    return True
Ejemplo n.º 12
0
 def uninstallPlugin(self, _pluginName, _isQuiet=False):
     isUninstalled = False
     pluginModule = __import__(
         "MyPlugins." + _pluginName, globals(), locals(), [
             "pluginName", "pluginFiles", "pluginDirectory",
             "uninstallThisPlugin", "setupDirectory", "pluginVersion"
         ], 0)
     if pluginModule.uninstallThisPlugin is None:
         if pluginModule.pluginDirectory == "":
             for pluginFile in pluginModule.pluginFiles:
                 if fu.isFile(
                         fu.joinPath(pluginModule.setupDirectory,
                                     pluginFile)):
                     fu.removeFileOrDir(
                         fu.joinPath(pluginModule.setupDirectory,
                                     pluginFile))
             isUninstalled = True
         else:
             if fu.isDir(
                     fu.joinPath(pluginModule.setupDirectory,
                                 pluginModule.pluginDirectory)):
                 fu.removeFileOrDir(
                     fu.joinPath(pluginModule.setupDirectory,
                                 pluginModule.pluginDirectory))
             isUninstalled = True
     else:
         isUninstalled = pluginModule.uninstallThisPlugin()
     if isUninstalled:
         Settings.setUniversalSetting(str(pluginModule.pluginName), str(""))
         if _isQuiet is False:
             Dialogs.show(
                 translate("MyPlugins",
                           "Plug-in Uninstallation Is Complete"),
                 str(
                     translate("MyPlugins",
                               "\"%s\" is uninstalled on your system.")) %
                 (pluginModule.pluginName))
     elif isUninstalled == "AlreadyUninstalled":
         if _isQuiet is False:
             Dialogs.show(
                 translate("MyPlugins", "Plug-in Already Uninstalled"),
                 str(
                     translate(
                         "MyPlugins",
                         "\"%s\" already uninstalled on your system.")) %
                 (pluginModule.pluginName))
     else:
         if _isQuiet is False:
             Dialogs.showError(
                 translate("MyPlugins", "Plug-in Uninstallation Failed"),
                 str(
                     translate(
                         "MyPlugins",
                         "\"%s\" failed to uninstall on your system.")) %
                 (pluginModule.pluginName))
Ejemplo n.º 13
0
 def checkReadOnlyColumn(self, _columnKey, _isAlert=True):
     if _columnKey in self.tableReadOnlyColumnsKey:
         if _isAlert:
             Dialogs.show(
                 translate("Tables", "Read Only Column"),
                 str(
                     translate("Tables",
                               "%s is read only so you can't change it.")) %
                 self.tableColumns[self.tableColumnsKey.index(_columnKey)])
         return False
     return True
Ejemplo n.º 14
0
 def clearIgnoreds(self):
     try:
         _path = self.checkSource(str(QuickMakeParameters[1]), "directory")
         if _path is not None:
             fu.clearIgnoreds(_path)
             Dialogs.show(translate("QuickMake", "Directory Cleaned"),
                          str(translate("QuickMake",
                                        "\"%s\" is cleaned based on the criteria you set.")) % Organizer.getLink(
                              _path))
         self.close()
     except:
         ReportBug.ReportBug()
Ejemplo n.º 15
0
 def checkIcon(self):
     try:
         _path = self.checkSource(str(QuickMakeParameters[1]), "directory")
         if _path is not None:
             fu.checkIcon(_path)
             Dialogs.show(translate("QuickMake", "Directory Icon Checked"),
                          str(translate("QuickMake",
                                        "\"%s\"`s icon checked.<br>The default action based on the data is executed.")) % Organizer.getLink(
                              _path))
         self.close()
     except:
         ReportBug.ReportBug()
Ejemplo n.º 16
0
def configureEmbeddedDB(_isNoAlertIfSuccessfully=True):
    stopEmbeddedDB()
    backupEmbeddedDB()
    fu.copyDirContent(fu.HamsiManagerDirectory + "/Amarok/EmbeddedDBFiles/mysql",
                      uni.getKDE4HomePath() + "/share/apps/amarok/mysqle/mysql")
    fu.copyFileOrDir(fu.HamsiManagerDirectory + "/Amarok/EmbeddedDBFiles/my.cnf",
                     uni.getKDE4HomePath() + "/share/apps/amarok/mysqle/my.cnf")
    MyConfigure.reConfigureFile(uni.getKDE4HomePath() + "/share/apps/amarok/mysqle/my.cnf")
    if _isNoAlertIfSuccessfully is False:
        Dialogs.show(translate("EmbeddedDBCore", "Created Embedded Server"),
                     translate("EmbeddedDBCore", "Embedded Amarok database server created and generated."))
    return True
Ejemplo n.º 17
0
 def restore(self):
     answer = Dialogs.ask(translate("Amarok", "Restore Amarok Database"),
                          translate("Amarok", "Are you want to restore backup database?"))
     if answer == Dialogs.Yes:
         if isRunning():
             self.stopEmbeddedDB(True)
         Dialogs.show(translate("EmbeddedDBConfigurator", "Close Amarok"),
                      translate("EmbeddedDBConfigurator", "Please close Amarok if it is running."))
         restoreEmbeddedDB()
         Dialogs.show(translate("EmbeddedDBConfigurator", "Restore Completed"), translate("EmbeddedDBConfigurator",
                                                                                          "Restore successfully completed.<br> You can run Amarok now if you want."))
         self.checkRunState()
Ejemplo n.º 18
0
def stopReadOnlyEmbeddedDB(_isNoAlertIfSuccessfully=True):
    global isReadOnlyStarted
    if isReadOnlyStarted is False:
        return True
    isReadOnlyStarted = False
    mysqldPID = getReadOnlyPID()
    if mysqldPID is not None:
        Execute.execute(["kill", "-TERM", str(mysqldPID)])
        Dialogs.sleep(translate("EmbeddedDBCore", "Stopping Embedded Server..."), 3)
    if _isNoAlertIfSuccessfully is False:
        Dialogs.show(translate("EmbeddedDBCore", "Stopped Embedded Server"),
                     translate("EmbeddedDBCore", "Embedded Amarok database server stopped."))
    return True
Ejemplo n.º 19
0
def generateReadOnlyEmbeddedD(_isNoAlertIfSuccessfully=True):
    stopReadOnlyEmbeddedDB()
    if fu.isExist(fu.pathOfSettingsDirectory + "/Amarok/mysqle/amarok"):
        fu.removeFileOrDir(fu.pathOfSettingsDirectory +
                           "/Amarok/mysqle/amarok")
    fu.copyFileOrDir(
        uni.getKDE4HomePath() + "/share/apps/amarok/mysqle/amarok",
        fu.pathOfSettingsDirectory + "/Amarok/mysqle/amarok")
    if _isNoAlertIfSuccessfully is False:
        Dialogs.show(
            translate("EmbeddedDBCore", "Generated Embedded Server"),
            translate("EmbeddedDBCore",
                      "Embedded Amarok database server generated."))
    return True
Ejemplo n.º 20
0
 def isReadOnlyRunning(self):
     try:
         if isReadOnlyRunning():
             self.pbtnStopEmbeddedDB.setEnabled(True)
             self.pbtnStartEmbeddedDB.setEnabled(False)
             Dialogs.show(translate("EmbeddedDBConfigurator", "Running Embedded Server"),
                          translate("EmbeddedDBConfigurator", "Embedded Amarok database server is running."))
         else:
             self.pbtnStopEmbeddedDB.setEnabled(False)
             self.pbtnStartEmbeddedDB.setEnabled(True)
             Dialogs.show(translate("EmbeddedDBConfigurator", "Not Running Embedded Server"),
                          translate("EmbeddedDBConfigurator", "Embedded Amarok database server is not running."))
     except:
         ReportBug.ReportBug()
Ejemplo n.º 21
0
    def install(self, _fileName):
        if self.isNotInstall is False and uni.isBuilt():
            self.setWindowTitle(translate("UpdateControl", "Installing The Latest Release"))
            self.lblInfo.setText(translate("UpdateControl", "Latest release downloaded, initializing installation."))
            from Core.Execute import openWith

            openWith([str(_fileName)])
            self.close()
            self.parent().close()
        else:
            Dialogs.show(translate("UpdateControl", "The New Version Downloaded"),
                         translate("UpdateControl",
                                   "New version of Hamsi Manager downloaded, you can install it manually."))
            self.close()
Ejemplo n.º 22
0
def startEmbeddedDB(_isNoAlertIfSuccessfully=True):
    global isStarted
    if isStarted:
        return True
    if uni.checkMysqldSafe():
        Execute.executeWithThread([uni.MySettings["pathOfMysqldSafe"],
                                   "--defaults-file=" + uni.getKDE4HomePath() + "/share/apps/amarok/mysqle/my.cnf"])
        Dialogs.sleep(translate("EmbeddedDBCore", "Starting Embedded Server..."), 3)
        if _isNoAlertIfSuccessfully is False:
            Dialogs.show(translate("EmbeddedDBCore", "Started Embedded Server"),
                         translate("EmbeddedDBCore", "Embedded Amarok database server started."))
        isStarted = True
        return True
    isStarted = False
    return False
Ejemplo n.º 23
0
def startReadOnlyEmbeddedDB(_isNoAlertIfSuccessfully=True):
    global isReadOnlyStarted
    if isReadOnlyStarted:
        return True
    if uni.checkMysqldSafe():
        Execute.executeWithThread(
            [uni.MySettings["pathOfMysqldSafe"], "--defaults-file=" + fu.pathOfSettingsDirectory + "/Amarok/my.cnf"])
        Dialogs.sleep(translate("EmbeddedDBCore", "Starting Embedded Server..."), 3)
        if _isNoAlertIfSuccessfully is False:
            Dialogs.show(translate("EmbeddedDBCore", "Started Embedded Server"),
                         translate("EmbeddedDBCore", "Embedded Amarok database server started."))
        isReadOnlyStarted = True
        return True
    isReadOnlyStarted = False
    return False
Ejemplo n.º 24
0
def stopReadOnlyEmbeddedDB(_isNoAlertIfSuccessfully=True):
    global isReadOnlyStarted
    if isReadOnlyStarted is False:
        return True
    isReadOnlyStarted = False
    mysqldPID = getReadOnlyPID()
    if mysqldPID is not None:
        Execute.execute(["kill", "-TERM", str(mysqldPID)])
        Dialogs.sleep(
            translate("EmbeddedDBCore", "Stopping Embedded Server..."), 3)
    if _isNoAlertIfSuccessfully is False:
        Dialogs.show(
            translate("EmbeddedDBCore", "Stopped Embedded Server"),
            translate("EmbeddedDBCore",
                      "Embedded Amarok database server stopped."))
    return True
Ejemplo n.º 25
0
 def clearEmptyDirectories(self):
     try:
         _path = self.checkSource(str(QuickMakeParameters[1]), "directory")
         if _path is not None:
             if fu.isWritableFileOrDir(_path):
                 fu.activateSmartCheckIcon()
                 fu.checkEmptyDirectories(_path, True, True, True, True)
                 if fu.isDir(_path):
                     fu.completeSmartCheckIcon()
                 Dialogs.show(translate("QuickMake", "Directory Cleaned"),
                              str(translate("QuickMake",
                                            "\"%s\" is cleaned based on the criteria you set.")) % Organizer.getLink(
                                  _path))
         self.close()
     except:
         ReportBug.ReportBug()
Ejemplo n.º 26
0
    def continueSave(self, _returned=None):
        try:
            if _returned:
                from Core import Records

                if uni.tableType in ["0", "1", "2", "3", "4", "9"]:
                    if uni.getBoolValue("isClearEmptyDirectoriesWhenSave"):
                        fu.checkEmptyDirectories(
                            self.currentDirectoryPath, True, True,
                            uni.getBoolValue("isAutoCleanSubFolderWhenSave"))
                fu.completeSmartCheckEmptyDirectories(True, True)
                isDirStillExist = fu.isDir(self.currentDirectoryPath)
                if uni.tableType in ["0", "1", "2", "3", "9"]:
                    if (uni.isActiveDirectoryCover and
                            uni.getBoolValue("isActiveAutoMakeIconToDirectory")
                            and uni.getBoolValue(
                                "isAutoMakeIconToDirectoryWhenSave")):
                        if isDirStillExist:
                            fu.checkIcon(self.currentDirectoryPath)
                        if self.currentDirectoryPath != self.newDirectoryPath:
                            fu.checkIcon(self.newDirectoryPath)
                fu.completeSmartCheckIcon()
                Records.saveAllRecords()
                if self.changedValueNumber == 0:
                    Dialogs.show(
                        translate("Tables", "Did Not Change Any Things"),
                        translate(
                            "Tables",
                            "Did not change any things in this table.Please check the criteria you select."
                        ))
                else:
                    if uni.getBoolValue("isShowTransactionDetails"):
                        Dialogs.show(
                            translate("Tables", "Transaction Details"),
                            str(translate("Tables", "%s value(s) changed.")) %
                            self.changedValueNumber)
                if not isDirStillExist and self.currentDirectoryPath == self.newDirectoryPath:
                    getMainWindow().FileManager.goUp()
                elif not isDirStillExist and self.currentDirectoryPath != self.newDirectoryPath:
                    getMainWindow().FileManager.makeRefresh(
                        self.newDirectoryPath)
                else:
                    getMainWindow().FileManager.makeRefresh("")
                    if uni.tableType in ["5", "6", "7", "8"]:
                        self.refresh(self.newDirectoryPath)
        except:
            ReportBug.ReportBug()
Ejemplo n.º 27
0
 def emendDirectory(self):
     try:
         _path = self.checkSource(str(QuickMakeParameters[1]), "directory")
         if _path is not None:
             if uni.getBoolValue("isShowQuickMakeWindow"):
                 newEmendedName = str(self.leNewValue.text())
             else:
                 newEmendedName = Organizer.emend(_path, fu.getObjectType(_path))
             oldFileName = _path
             newDirName = fu.moveOrChange(oldFileName, newEmendedName, "directory")
             if newDirName != oldFileName:
                 Dialogs.show(translate("QuickMake", "Directory Emended"),
                              str(translate("QuickMake",
                                            "\"%s\" is emended based on the criteria you set.This directory is \"%s\" now.")) %
                              (Organizer.getLink(_path), Organizer.getLink(newDirName)))
         self.close()
     except:
         ReportBug.ReportBug()
Ejemplo n.º 28
0
def configureEmbeddedDB(_isNoAlertIfSuccessfully=True):
    stopEmbeddedDB()
    backupEmbeddedDB()
    fu.copyDirContent(
        fu.HamsiManagerDirectory + "/Amarok/EmbeddedDBFiles/mysql",
        uni.getKDE4HomePath() + "/share/apps/amarok/mysqle/mysql")
    fu.copyFileOrDir(
        fu.HamsiManagerDirectory + "/Amarok/EmbeddedDBFiles/my.cnf",
        uni.getKDE4HomePath() + "/share/apps/amarok/mysqle/my.cnf")
    MyConfigure.reConfigureFile(uni.getKDE4HomePath() +
                                "/share/apps/amarok/mysqle/my.cnf")
    if _isNoAlertIfSuccessfully is False:
        Dialogs.show(
            translate("EmbeddedDBCore", "Created Embedded Server"),
            translate(
                "EmbeddedDBCore",
                "Embedded Amarok database server created and generated."))
    return True
Ejemplo n.º 29
0
 def Clear(self):
     try:
         uni.isCanBeShowOnMainWindow = False
         answer = Dialogs.ask(translate("Cleaner", "Your Files Will Be Removed"),
                              str(translate("Cleaner",
                                            "The files in the \"%s\" folder will be cleared according to the criteria you set.<br>" +
                                            "This action will delete the files completely, without any chance to recover.<br>" +
                                            "Are you sure you want to perform the action?")) % Organizer.getLink(
                                  Organizer.getLink(str(self.lePathOfProject.text()))))
         if answer == Dialogs.Yes:
             if fu.isWritableFileOrDir(str(self.lePathOfProject.text())):
                 if fu.clearCleaningDirectory(str(self.lePathOfProject.text()), True, True):
                     Dialogs.show(translate("Cleaner", "Directory Is Cleared"),
                                  str(translate("Cleaner",
                                                "This directory is cleared : \"%s\"")) % Organizer.getLink(
                                      str(self.lePathOfProject.text())))
         uni.isCanBeShowOnMainWindow = True
     except:
         ReportBug.ReportBug()
Ejemplo n.º 30
0
 def restore(self):
     answer = Dialogs.ask(
         translate("Amarok", "Restore Amarok Database"),
         translate("Amarok", "Are you want to restore backup database?"))
     if answer == Dialogs.Yes:
         if isRunning():
             self.stopEmbeddedDB(True)
         Dialogs.show(
             translate("EmbeddedDBConfigurator", "Close Amarok"),
             translate("EmbeddedDBConfigurator",
                       "Please close Amarok if it is running."))
         restoreEmbeddedDB()
         Dialogs.show(
             translate("EmbeddedDBConfigurator", "Restore Completed"),
             translate(
                 "EmbeddedDBConfigurator",
                 "Restore successfully completed.<br> You can run Amarok now if you want."
             ))
         self.checkRunState()
Ejemplo n.º 31
0
 def removeOnlySubFiles(self):
     try:
         _path = self.checkSource(str(QuickMakeParameters[1]), "directory")
         if _path is not None:
             answer = Dialogs.ask(translate("QuickMake", "All Files Will Be Removed"),
                                  str(translate("QuickMake",
                                                "Are you sure you want to remove only all files in \"%s\"?<br>Note:Do not will remove directory and subfolders.")) % Organizer.getLink(
                                      _path))
             if answer == Dialogs.Yes:
                 getMainWindow().setEnabled(False)
                 fu.removeOnlySubFiles(_path)
                 getMainWindow().setEnabled(True)
                 Dialogs.show(translate("QuickMake", "Removed Only All Files"),
                              str(translate("QuickMake",
                                            "Removed only all files in \"%s\".<br>Note:Do not removed directory and subfolders.")) % Organizer.getLink(
                                  _path))
         self.close()
     except:
         ReportBug.ReportBug()
Ejemplo n.º 32
0
def startReadOnlyEmbeddedDB(_isNoAlertIfSuccessfully=True):
    global isReadOnlyStarted
    if isReadOnlyStarted:
        return True
    if uni.checkMysqldSafe():
        Execute.executeWithThread([
            uni.MySettings["pathOfMysqldSafe"],
            "--defaults-file=" + fu.pathOfSettingsDirectory + "/Amarok/my.cnf"
        ])
        Dialogs.sleep(
            translate("EmbeddedDBCore", "Starting Embedded Server..."), 3)
        if _isNoAlertIfSuccessfully is False:
            Dialogs.show(
                translate("EmbeddedDBCore", "Started Embedded Server"),
                translate("EmbeddedDBCore",
                          "Embedded Amarok database server started."))
        isReadOnlyStarted = True
        return True
    isReadOnlyStarted = False
    return False
Ejemplo n.º 33
0
def startEmbeddedDB(_isNoAlertIfSuccessfully=True):
    global isStarted
    if isStarted:
        return True
    if uni.checkMysqldSafe():
        Execute.executeWithThread([
            uni.MySettings["pathOfMysqldSafe"], "--defaults-file=" +
            uni.getKDE4HomePath() + "/share/apps/amarok/mysqle/my.cnf"
        ])
        Dialogs.sleep(
            translate("EmbeddedDBCore", "Starting Embedded Server..."), 3)
        if _isNoAlertIfSuccessfully is False:
            Dialogs.show(
                translate("EmbeddedDBCore", "Started Embedded Server"),
                translate("EmbeddedDBCore",
                          "Embedded Amarok database server started."))
        isStarted = True
        return True
    isStarted = False
    return False
Ejemplo n.º 34
0
 def hash(self):
     sourceFile = str(self.lePathOfPackage.text())
     sourceFile = fu.checkSource(sourceFile, "file")
     if sourceFile is not None:
         hashType = str(self.cbHash.currentText())
         if hashType is not None:
             hashDigestContent = fu.getHashDigest(sourceFile, hashType)
             if hashDigestContent is not False:
                 self.teHashDigest.setText(str(hashDigestContent))
                 if self.cbHashOutput.currentIndex() == 1:
                     if fu.createHashDigestFile(
                             sourceFile, str(self.leHashDigestFile.text()),
                             hashType, False, hashDigestContent):
                         Dialogs.show(
                             translate("Hasher",
                                       "Hash Digest File Created"),
                             str(
                                 translate("Hasher",
                                           "Hash digest writed into %s")) %
                             str(self.leHashDigestFile.text()))
                     else:
                         Dialogs.showError(
                             translate("Hasher",
                                       "Hash Digest File Is Not Created"),
                             translate("Hasher",
                                       "Hash digest file not cteated."))
                 elif self.cbHashOutput.currentIndex() == 2:
                     MApplication.clipboard().setText(
                         str(hashDigestContent))
                     Dialogs.show(
                         translate("Hasher",
                                   "Hash Digest Copied To Clipboard"),
                         str(
                             translate(
                                 "Hasher",
                                 "Hash digest copied to clipboard.Hash digest is : <br>%s"
                             )) % hashDigestContent)
             else:
                 Dialogs.showError(
                     translate("Hasher", "Hash Digest Is Not Created"),
                     translate("Hasher", "Hash digest not cteated."))
Ejemplo n.º 35
0
    def install(self, _fileName):
        if self.isNotInstall is False and uni.isBuilt():
            self.setWindowTitle(
                translate("UpdateControl", "Installing The Latest Release"))
            self.lblInfo.setText(
                translate(
                    "UpdateControl",
                    "Latest release downloaded, initializing installation."))
            from Core.Execute import openWith

            openWith([str(_fileName)])
            self.close()
            self.parent().close()
        else:
            Dialogs.show(
                translate("UpdateControl", "The New Version Downloaded"),
                translate(
                    "UpdateControl",
                    "New version of Hamsi Manager downloaded, you can install it manually."
                ))
            self.close()
Ejemplo n.º 36
0
 def isReadOnlyRunning(self):
     try:
         if isReadOnlyRunning():
             self.pbtnStopEmbeddedDB.setEnabled(True)
             self.pbtnStartEmbeddedDB.setEnabled(False)
             Dialogs.show(
                 translate("EmbeddedDBConfigurator",
                           "Running Embedded Server"),
                 translate("EmbeddedDBConfigurator",
                           "Embedded Amarok database server is running."))
         else:
             self.pbtnStopEmbeddedDB.setEnabled(False)
             self.pbtnStartEmbeddedDB.setEnabled(True)
             Dialogs.show(
                 translate("EmbeddedDBConfigurator",
                           "Not Running Embedded Server"),
                 translate(
                     "EmbeddedDBConfigurator",
                     "Embedded Amarok database server is not running."))
     except:
         ReportBug.ReportBug()
Ejemplo n.º 37
0
 def installPlugin(self, _pluginName, _isQuiet=False):
     isInstalled = False
     pluginModule = __import__("MyPlugins." + _pluginName, globals(), locals(),
                               ["pluginName", "pluginFiles", "pluginDirectory", "installThisPlugin",
                                "setupDirectory", "pluginVersion"], 0)
     if pluginModule.installThisPlugin is None:
         if pluginModule.pluginDirectory == "":
             try: fu.makeDirs(pluginModule.setupDirectory)
             except: pass
             for pluginFile in pluginModule.pluginFiles:
                 fu.copyOrChange(fu.joinPath(fu.HamsiManagerDirectory, "MyPlugins", _pluginName, pluginFile),
                                 fu.joinPath(pluginModule.setupDirectory, pluginFile), "file", "only", True)
                 MyConfigure.reConfigureFile(fu.joinPath(pluginModule.setupDirectory, pluginFile))
             isInstalled = True
         else:
             oldFilePath = fu.joinPath(fu.HamsiManagerDirectory, "MyPlugins", _pluginName,
                                       pluginModule.pluginDirectory)
             newFilePath = fu.copyOrChange(oldFilePath,
                                           fu.joinPath(pluginModule.setupDirectory, pluginModule.pluginDirectory),
                                           "directory", "only", True)
             if newFilePath != oldFilePath:
                 isInstalled = True
     else:
         isInstalled = pluginModule.installThisPlugin()
     if isInstalled:
         Settings.setUniversalSetting(str(pluginModule.pluginName), str(pluginModule.pluginVersion))
         if _isQuiet is False:
             Dialogs.show(translate("MyPlugins", "Plug-in Installation Is Complete"),
                          str(translate("MyPlugins", "\"%s\" is installed on your system.")) % (
                              pluginModule.pluginName))
     elif isInstalled == "AlreadyInstalled":
         if _isQuiet is False:
             Dialogs.show(translate("MyPlugins", "Plug-in Already Installed"),
                          str(translate("MyPlugins", "\"%s\" already installed on your system.")) % (
                              pluginModule.pluginName))
     else:
         if _isQuiet is False:
             Dialogs.showError(translate("MyPlugins", "Plug-in Installation Failed"),
                               str(translate("MyPlugins", "\"%s\" failed to install on your system.")) % (
                                   pluginModule.pluginName))
Ejemplo n.º 38
0
 def sendFinished(self, _nrpBack):
     try:
         Dialogs.showState(translate("SuggestIdea", "Sending Your Idea"),
                           100, 100)
         if _nrpBack.error() == MNetworkReply.NoError:
             Dialogs.show(
                 translate("SuggestIdea",
                           "Suggestion Received Successfully"),
                 translate(
                     "SuggestIdea",
                     "Thank you for sending us your idea. You have contributed a lot to make the next release even better."
                 ))
             self.close()
         elif _nrpBack.error() == MNetworkReply.OperationCanceledError:
             Dialogs.show(
                 translate("SuggestIdea", "Suggestion Canceled"),
                 translate("SuggestIdea",
                           "Suggestion canceled successfully."))
         else:
             Dialogs.show(
                 translate("SuggestIdea", "An Error Has Occurred."),
                 translate(
                     "SuggestIdea",
                     "An unknown error has occurred. Please try again."))
         uni.isCanBeShowOnMainWindow = True
         self.namMain = None
         self.nrqPost = None
         self.nrpBack = None
     except:
         ReportBug.ReportBug()
Ejemplo n.º 39
0
 def triggered(self, _action):
     try:
         if _action.objectName() == "You Have Not Any Search Engine":
             Dialogs.show(
                 translate("SearchEngines",
                           "You Have Not Any Search Engine"),
                 translate(
                     "SearchEngines",
                     "Not found any search engine in your system. Please install a search engine module. Now supporting only musicbrainz module (python-musicbrainz2)."
                 ))
         else:
             if self.parent().rowCount() != 0:
                 if str(_action.objectName()).find("-MusicBrainz-") != -1:
                     selectedSearchDepth = 3
                     info = _action.objectName().split("-")
                     engine = self.searchEnginesNames[int(info[0])]
                     selectedSearchDepth = info[2]
                     sEngineModule = __import__("SearchEngines." + engine,
                                                globals(), locals(),
                                                ["Search"], 0)
                     sEngineModule.Search(self.parent(),
                                          self.isCheckSingleFile,
                                          selectedSearchDepth)
                 else:
                     engine = self.searchEnginesNames[int(
                         _action.objectName())]
                     sEngineModule = __import__("SearchEngines." + engine,
                                                globals(), locals(),
                                                ["Search"], 0)
                     sEngineModule.Search(self.parent(),
                                          self.isCheckSingleFile)
             else:
                 Dialogs.show(
                     translate("SearchEngines", "Table Is Empty"),
                     translate(
                         "SearchEngines",
                         "Nothing to be done because the table is empty."))
     except:
         ReportBug.ReportBug()
Ejemplo n.º 40
0
def createReadOnlyEmbeddedDB(_isNoAlertIfSuccessfully=True):
    stopReadOnlyEmbeddedDB()
    if fu.isDir(fu.pathOfSettingsDirectory + "/Amarok"):
        fu.removeFileOrDir(fu.pathOfSettingsDirectory + "/Amarok")
    fu.makeDirs(fu.pathOfSettingsDirectory + "/Amarok/mysqle")
    fu.copyFileOrDir(fu.HamsiManagerDirectory + "/Amarok/EmbeddedDBFiles/mysql",
                     fu.pathOfSettingsDirectory + "/Amarok/mysqle/mysql", )
    fu.copyFileOrDir(fu.HamsiManagerDirectory + "/Amarok/EmbeddedDBFiles/my-readOnly.cnf",
                     fu.pathOfSettingsDirectory + "/Amarok/my.cnf")
    MyConfigure.reConfigureFile(fu.pathOfSettingsDirectory + "/Amarok/my.cnf")
    fu.makeDirs(fu.pathOfSettingsDirectory + "/Amarok/mysqle/amarok")
    fu.copyFileOrDir(uni.getKDE4HomePath() + "/share/apps/amarok/mysqle/ib_logfile0",
                     fu.pathOfSettingsDirectory + "/Amarok/mysqle/ib_logfile0")
    fu.copyFileOrDir(uni.getKDE4HomePath() + "/share/apps/amarok/mysqle/ib_logfile1",
                     fu.pathOfSettingsDirectory + "/Amarok/mysqle/ib_logfile1")
    fu.copyFileOrDir(uni.getKDE4HomePath() + "/share/apps/amarok/mysqle/ibdata1",
                     fu.pathOfSettingsDirectory + "/Amarok/mysqle/ibdata1")
    generateReadOnlyEmbeddedD()
    if _isNoAlertIfSuccessfully is False:
        Dialogs.show(translate("EmbeddedDBCore", "Created Embedded Server"),
                     translate("EmbeddedDBCore", "Embedded Amarok database server created and generated."))
    return True
Ejemplo n.º 41
0
def runScript(_content, _isShowAlertIsSuccessfully=True):
    try:
        try:
            if _content is not None:
                exec(_content)
                if _isShowAlertIsSuccessfully:
                    Dialogs.show(
                        translate("ScriptManager",
                                  "Script Has Run Successfully"),
                        translate(
                            "ScriptManager",
                            "Script which you selected has run successfully."))
                return True
            else:
                Dialogs.showError(
                    translate("ScriptManager", "Script Is Not Available"),
                    translate(
                        "ScriptManager",
                        "Script content is not available or Script file couldn`t read."
                    ))
        except Exception as error:
            import traceback

            cla, error, trbk = sys.exc_info()
            errorName = cla.__name__
            try:
                excArgs = error.__dict__["args"]
            except KeyError:
                excArgs = "<no args>"
            errorDetail = traceback.format_tb(trbk, 5)
            errorDetails = str(errorName) + "\n" + str(error) + "\n" + str(
                excArgs) + "\n" + str(errorDetail[0])
            Dialogs.showError(
                translate("ScriptManager", "Error: Failed To Run The Query"),
                str(translate("ScriptManager", "Error details: <br> \"%s\"")) %
                (errorDetails))
            return False
    except:
        ReportBug.ReportBug()
Ejemplo n.º 42
0
 def build(self):
     try:
         uni.isCanBeShowOnMainWindow = False
         outputTarget = "file"
         outputType = "html"
         contentType = "fileTree"
         if self.cbOutputTarget.currentIndex() == 1:
             outputTarget = "dialog"
         elif self.cbOutputTarget.currentIndex() == 2:
             outputTarget = "clipboard"
         if self.cbOutputType.currentIndex() == 1:
             outputType = "plainText"
         if self.cbContentType.currentIndex() == 1:
             contentType = "fileList"
         fu.getFileTree(str(self.lePath.text()),
                        self.cbSubDirectoryDeep.currentText(),
                        outputTarget, outputType, contentType, "title")
         if self.cbOutputTarget.currentIndex() == 2:
             Dialogs.show(translate("FileTreeBuilder", "Builded File Tree"),
                          translate("FileTreeBuilder", "File tree copied to clipboard."))
         uni.isCanBeShowOnMainWindow = True
     except:
         ReportBug.ReportBug()
Ejemplo n.º 43
0
 def sendFinished(self, _nrpBack):
     Dialogs.showState(translate("ReportBug", "Sending Your Report"), 100, 100)
     if _nrpBack.error() == MNetworkReply.NoError:
         Dialogs.show(translate("ReportBug", "Report Received Successfully"), translate("ReportBug",
                                                                                        "Thank you for sending us your report. You have contributed a lot to make the next release even better."))
         self.close()
     elif _nrpBack.error() == MNetworkReply.OperationCanceledError:
         Dialogs.show(translate("ReportBug", "Report Sending Canceled"),
                      translate("ReportBug", "Report sending canceled successfully."))
     else:
         Dialogs.show(translate("ReportBug", "An Error Has Occurred."),
                      translate("ReportBug", "An unknown error has occurred. Please try again."))
     uni.isCanBeShowOnMainWindow = True
     self.namMain = None
     self.nrqPost = None
     self.nrpBack = None
Ejemplo n.º 44
0
def checkAndGetDB(_isNoAlertIfSuccessfully=True, _isReCheck=False):
    global isCheckAgain
    if _isReCheck:
        isCheckAgain = True
    if checkAmarok():
        try:
            db = connectAndGetDB()
            if db is not None:
                if isCheckAgain:
                    db.query("SELECT version FROM admin WHERE component='DB_VERSION'")
                    rows = db.store_result().fetch_row(1)
                    dbVersion = int(rows[0][0])
                    if dbVersion not in availableDBVersions:
                        answer = Dialogs.ask(translate("Amarok", "Your Amarok DB Version Is Not Tested"),
                                             str(translate("Amarok",
                                                       "Your Amarok DB version is not tested. We don`t suggest but you can use at your own risk. Are you sure you want to use?"
                                                       "<br>Your Amarok DB Version:%s"
                                                       "<br>Tested Amarok DB Versions:%s")) % (str(dbVersion), str(
                                                 availableDBVersions)))
                        if answer is not Dialogs.Yes:
                            return None
                    if _isNoAlertIfSuccessfully is False:
                        Dialogs.show(translate("Amarok", "Connected To Database"),
                                     str(translate("Amarok", "Connected successfully to \"%s\"")) % uni.MySettings[
                                         "amarokDBDB"])
                isCheckAgain = False
                return db
            else:
                Dialogs.showError(translate("Amarok", "Amarok Database Is Not Usable"),
                                  translate("Amarok", "Amarok database is not accessible."))
            return None
        except:
            cla, currentError, trbk = sys.exc_info()
            if str(currentError).find("Unknown MySQL server host") != -1:
                Dialogs.showError(translate("Amarok", "Not Connected To Database"), str(
                    translate("Amarok", "Unknown MySQL server host \"%s\" <br><b>Details</b> : %s")) % (
                                      uni.MySettings["amarokDBHost"], str(currentError)))
            elif str(currentError).find("Access denied for user") != -1:
                Dialogs.showError(translate("Amarok", "Not Connected To Database"),
                                  str(translate("Amarok", "Access denied for user \"%s\" <br><b>Details</b> : %s")) % (
                                      uni.MySettings["amarokDBUser"], str(currentError)))
            elif str(currentError).find("Unknown database") != -1:
                Dialogs.showError(translate("Amarok", "Not Connected To Database"),
                                  str(translate("Amarok", "Unknown database \"%s\" <br><b>Details</b> : %s")) % (
                                      uni.MySettings["amarokDBDB"], str(currentError)))
            elif str(currentError).find("Can't connect to local MySQL server through socket") != -1:
                Dialogs.showError(translate("Amarok", "Not Connected To Database"), str(translate("Amarok",
                                                                                                  "Can't connect to local MySQL server through socket \"%s\" <br><b>Details</b> : %s")) % (
                                      str(currentError).replace(
                                          "(2002, \"Can't connect to local MySQL server through socket '",
                                          "").replace("' (2)\")", ""), str(currentError)))
            else:
                ReportBug.ReportBug()
            return None
    else:
        if isLoadedMysql is False:
            Dialogs.showError(translate("Amarok", "Amarok Module Is Not Usable"), translate("Amarok",
                                                                                            "\"python-mysql\" (MySQLdb / _mysql) named module is not installed on your system. Please install this module and try again."))
        elif uni.isAvailableKDE4() is False:
            Dialogs.showError(translate("Amarok", "Amarok Module Is Not Usable"),
                              translate("Amarok", "Please open user session with KDE4 once."))
        else:
            Dialogs.showError(translate("Amarok", "Amarok Module Is Not Usable"),
                              translate("Amarok", "Please run Amarok once."))
        return None
Ejemplo n.º 45
0
 def exportValues(self,
                  _actionType="return",
                  _formatType="html",
                  _extInfo="no"):
     info = ""
     if _formatType == "html":
         if _extInfo == "no":
             pass
         elif _extInfo == "title":
             info += " \n<h3>%s : </h3>" % (str(
                 translate("Tables", "Table Contents")))
         info += " \n<table border=1> \n<tr> \n<td>*</td> \n"
         for columnNo in range(self.columnCount()):
             if self.isColumnHidden(columnNo) is False:
                 info += "<td><b>"
                 info += str(self.tableColumns[columnNo])
                 info += "</b></td> \n"
         info += "</tr> \n"
         for rowNo in range(self.rowCount()):
             if self.isRowHidden(rowNo) is False:
                 info += " \n<tr> \n<td>" + str(rowNo + 1) + "</td> \n"
                 for columnNo in range(self.columnCount()):
                     if self.isColumnHidden(columnNo) is False:
                         info += "<td>"
                         info += str(str(self.item(rowNo, columnNo).text()))
                         info += "</td> \n"
                 info += "</tr> \n"
         info += "</table> \n"
     elif _formatType == "plainText":
         if _extInfo == "no":
             pass
         elif _extInfo == "title":
             info += " %s : \n" % (str(translate("Tables",
                                                 "Table Contents")))
         info += "*\t"
         for columnNo in range(self.columnCount()):
             if self.isColumnHidden(columnNo) is False:
                 info += str(self.tableColumns[columnNo])
                 info += "\t"
         info += "\n"
         for rowNo in range(self.rowCount()):
             info += str(rowNo + 1) + "\t"
             if self.isRowHidden(rowNo) is False:
                 for columnNo in range(self.columnCount()):
                     if self.isColumnHidden(columnNo) is False:
                         info += str(str(self.item(rowNo, columnNo).text()))
                         info += "\t"
                 info += "\n"
     if _actionType == "return":
         return info
     elif _actionType == "file":
         fileExt = None
         formatTypeName = None
         if _formatType == "html":
             if _extInfo != "no":
                 strHeader = (
                     "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN\" \n"
                     +
                     "\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\"> \n"
                     +
                     "<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"tr\" lang=\"tr\" dir=\"ltr\"> \n"
                     +
                     "<head> \n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" /> \n</head> \n<body> \n"
                 )
                 strFooter = " \n</body> \n</html>"
                 info = strHeader + info + strFooter
             formatTypeName = translate("Tables", "HTML")
             fileExt = "html"
         elif _formatType == "plainText":
             formatTypeName = translate("Tables", "Plain Text")
             fileExt = "txt"
         filePath = Dialogs.getSaveFileName(
             translate("Tables", "Save As"),
             fu.joinPath(
                 fu.userDirectoryPath,
                 fu.getBaseName(self.currentDirectoryPath) + "." + fileExt),
             formatTypeName + " (*." + fileExt + ")", 2)
         if filePath is not None:
             if _formatType == "html" and filePath[-5:] != ".html":
                 filePath += ".html"
             elif _formatType == "plainText" and filePath[-4:] != ".txt":
                 filePath += ".txt"
             fu.writeToFile(filePath, info)
             Dialogs.show(
                 translate("Tables", "Table Exported"),
                 str(
                     translate(
                         "Tables",
                         "Table contents are exported to file: \"%s\".")) %
                 Organizer.getLink(filePath))
     elif _actionType == "dialog":
         dDialog = MDialog(getMainWindow())
         if isActivePyKDE4:
             dDialog.setButtons(MDialog.NoDefault)
         dDialog.setWindowTitle(translate("Tables", "Table Contents"))
         mainPanel = MWidget(dDialog)
         vblMain = MVBoxLayout(mainPanel)
         if _formatType == "html":
             QtWebKit = getMyObject("QtWebKit")
             wvWeb = QtWebKit.QWebView()
             wvWeb.setHtml(str(info))
             vblMain.addWidget(wvWeb)
         elif _formatType == "plainText":
             teContent = MTextEdit()
             teContent.setPlainText(str(info))
             vblMain.addWidget(teContent)
         pbtnClose = MPushButton(translate("Tables", "OK"))
         MObject.connect(pbtnClose, SIGNAL("clicked()"), dDialog.close)
         vblMain.addWidget(pbtnClose)
         if isActivePyKDE4:
             dDialog.setMainWidget(mainPanel)
         else:
             dDialog.setLayout(vblMain)
         dDialog.setMinimumWidth(600)
         dDialog.setMinimumHeight(400)
         dDialog.show()
     elif _actionType == "clipboard":
         MApplication.clipboard().setText(str(info))
Ejemplo n.º 46
0
 def backup(self):
     backupEmbeddedDB()
     Dialogs.show(translate("EmbeddedDBConfigurator", "Backup Completed"), translate("EmbeddedDBConfigurator",
                                                                                     "Backup successfully completed.<br> You can restore when you want."))
     self.pbtnRestore.setEnabled(isHasEmbeddedDBBackup())
Ejemplo n.º 47
0
def clickedAnAction(_action):
    try:
        actionName = _action.objectName()
        if actionName == "Open State":
            f = Dialogs.getOpenFileName(translate("MenuBar", "Open State Of Hamsi Manager"),
                                        fu.userDirectoryPath,
                                        translate("MenuBar", "Application Runner") + " (*.desktop)")
            if f is not None:
                Settings.openStateOfSettings(f)
        elif actionName == "Save State":
            f = Dialogs.getSaveFileName(translate("MenuBar", "Save State Of Hamsi Manager"),
                                        fu.joinPath(fu.userDirectoryPath, "HamsiManager.desktop"),
                                        translate("MenuBar", "Application Runner") + " (*.desktop)")
            if f is not None:
                Settings.saveStateOfSettings(f)
                Dialogs.show(translate("MenuBar", "Current State Saved"),
                             translate("MenuBar",
                                       "Current state saved with preferences.<br>You can continue where you left off."))
        elif actionName == "With This Profile (My Settings)":
            if Execute.executeAsRootWithThread(["--sDirectoryPath", fu.pathOfSettingsDirectory], "HamsiManager"):
                getMainWindow().close()
            else:
                Dialogs.showError(translate("MenuBar", "Can Not Run As Root"),
                                  translate("MenuBar", "Hamsi Manager can not run as root."))
        elif actionName == "With Root Profile (Own Settings)":
            if Execute.executeAsRootWithThread([], "HamsiManager"):
                getMainWindow().close()
            else:
                Dialogs.showError(translate("MenuBar", "Can Not Run As Root"),
                                  translate("MenuBar", "Hamsi Manager can not run as root."))
        elif actionName == "Quit":
            getMainWindow().close()
        elif actionName == "HTML Format":
            if _action.parent().objectName() == "Export To File":
                getMainTable().exportValues("file", "html", "title")
            elif _action.parent().objectName() == "Show In New Window":
                getMainTable().exportValues("dialog", "html", "title")
            elif _action.parent().objectName() == "Copy To Clipboard":
                getMainTable().exportValues("clipboard", "html", "title")
        elif actionName == "Text Format":
            if _action.parent().objectName() == "Export To File":
                getMainTable().exportValues("file", "plainText", "title")
            elif _action.parent().objectName() == "Show In New Window":
                getMainTable().exportValues("dialog", "plainText", "title")
            elif _action.parent().objectName() == "Copy To Clipboard":
                getMainTable().exportValues("clipboard", "plainText", "title")
        elif actionName == "HTML Format (File Tree)":
            if _action.parent().objectName() == "Export To File":
                fu.getFileTree((getMainWindow().FileManager.currentDirectory), 0, "file", "html", "fileTree",
                               "title")
            elif _action.parent().objectName() == "Show In New Window":
                fu.getFileTree((getMainWindow().FileManager.currentDirectory), 0, "dialog", "html", "fileTree",
                               "title")
            elif _action.parent().objectName() == "Copy To Clipboard":
                fu.getFileTree((getMainWindow().FileManager.currentDirectory), 0, "clipboard", "html", "fileTree",
                               "title")
        elif actionName == "Text Format (File Tree)":
            if _action.parent().objectName() == "Export To File":
                fu.getFileTree((getMainWindow().FileManager.currentDirectory), 0, "file", "plainText", "fileTree",
                               "title")
            elif _action.parent().objectName() == "Show In New Window":
                fu.getFileTree((getMainWindow().FileManager.currentDirectory), 0, "dialog", "plainText", "fileTree",
                               "title")
            elif _action.parent().objectName() == "Copy To Clipboard":
                fu.getFileTree((getMainWindow().FileManager.currentDirectory), 0, "clipboard", "plainText",
                               "fileTree", "title")
        elif actionName == "About QT":
            if isActivePyKDE4:
                QMessageBox.aboutQt(getMainWindow(), translate("MenuBar", "About QT"))
            else:
                MMessageBox.aboutQt(getMainWindow(), translate("MenuBar", "About QT"))
        elif actionName == "Options":
            from Options import OptionsForm

            OptionsForm.OptionsForm(getMainWindow())
        elif actionName == "My Plugins":
            import MyPlugins

            MyPlugins.MyPlugins()
        elif actionName == "Reconfigure":
            from Tools import Configurator

            Configurator.Configurator("configurePage")
        elif actionName == "My Plugins (System)":
            Execute.execute(["--qm", "--plugins", "--runAsRoot"], "HamsiManager")
        elif actionName == "Reconfigure (System)":
            Execute.execute(["--qm", "--configurator", "--runAsRoot"], "HamsiManager")
        elif actionName == "Update":
            from Core import UpdateControl

            UpdateControl.UpdateControl(getMainWindow())
        elif actionName == "Report Bug":
            ReportBug.ReportBug(True)
        elif actionName == "Suggest Idea":
            from Core import SuggestIdea

            SuggestIdea.SuggestIdea()
        elif actionName == "About Hamsi Manager":
            if isActivePyKDE4 is False:
                MMessageBox.about(getMainWindow(), translate("MenuBar", "About Hamsi Manager"),
                                  uni.aboutOfHamsiManager)
        elif actionName == translate("ToolsBar", "Check Icon"):
            getMainWindow().setEnabled(False)
            fu.checkIcon(getMainWindow().FileManager.getCurrentDirectoryPath())
            Dialogs.show(translate("ToolsBar", "Directory Icon Checked"),
                         translate("ToolsBar",
                                   "Current directory icon checked.<br>The default action based on the data is executed."))
            getMainWindow().setEnabled(True)
        elif actionName == "Clear Empty Directories":
            if getMainTable().checkUnSavedValues() is False:
                _action.setChecked(False)
                return False
            answer = Dialogs.ask(translate("ToolsBar", "Empty Directories Will Be Removed"),
                                 str(translate("ToolsBar",
                                               "Are you sure you want to remove empty directories based on the criteria you set in \"%s\"?")) % Organizer.getLink(
                                     getMainWindow().FileManager.getCurrentDirectoryPath()))
            if answer == Dialogs.Yes:
                getMainWindow().setEnabled(False)
                currentDirPath = getMainWindow().FileManager.getCurrentDirectoryPath()
                if fu.isWritableFileOrDir(currentDirPath):
                    fu.checkEmptyDirectories(currentDirPath, True, True, True, True)
                    Dialogs.show(translate("ToolsBar", "Directory Cleaned"),
                                 translate("ToolsBar",
                                           "The current directory is cleaned based on the criteria you set."))
                getMainWindow().setEnabled(True)
                getMainWindow().FileManager.makeRefresh()
        elif actionName == "Pack":
            from Tools import Packager

            Packager.Packager(getMainWindow().FileManager.getCurrentDirectoryPath())
        elif actionName == "Hash":
            from Tools import Hasher

            Hasher.Hasher(getMainWindow().FileManager.getCurrentDirectoryPath())
        elif actionName == "Clear":
            from Tools import Cleaner

            Cleaner.Cleaner(getMainWindow().FileManager.getCurrentDirectoryPath())
        elif actionName == "Text Corrector":
            from Tools import TextCorrector

            TextCorrector.TextCorrector(getMainWindow().FileManager.getCurrentDirectoryPath())
        elif actionName == "File Tree":
            from Tools import FileTreeBuilder

            FileTreeBuilder.FileTreeBuilder(getMainWindow().FileManager.getCurrentDirectoryPath())
        elif actionName == "Search":
            from Tools import Searcher

            Searcher.Searcher([getMainWindow().FileManager.getCurrentDirectoryPath()])
        elif actionName == "Script Manager":
            from Tools import ScriptManager

            if ScriptManager.ScriptManager.checkScriptManager():
                ScriptManager.ScriptManager(getMainWindow())
        elif actionName == "Show Last Actions":
            from Core import RecordsForm

            RecordsForm.RecordsForm(getMainWindow())
        elif actionName == "Remove Sub Files":
            answer = Dialogs.ask(translate("ToolsBar", "All Files Will Be Removed"),
                                 str(translate("ToolsBar",
                                               "Are you sure you want to remove only all files in \"%s\"?<br>Note:Do not will remove directory and subfolders.")) % Organizer.getLink(
                                     getMainWindow().FileManager.getCurrentDirectoryPath()))
            if answer == Dialogs.Yes:
                getMainWindow().setEnabled(False)
                fu.removeOnlySubFiles(getMainWindow().FileManager.getCurrentDirectoryPath())
                getMainWindow().setEnabled(True)
                Dialogs.show(translate("ToolsBar", "Removed Only All Files"),
                             str(translate("ToolsBar",
                                           "Removed only all files in \"%s\".<br>Note:Do not removed directory and subfolders.")) % Organizer.getLink(
                                 getMainWindow().FileManager.getCurrentDirectoryPath()))
        elif actionName == "Amarok Embedded Database Configurator":
            import Amarok

            if Amarok.checkAmarok():
                Amarok.openEmbeddedDBConfigurator()
        elif _action.parent().objectName() == "Table Types":
            changeTableType(_action)
        elif _action.parent().objectName() == "File Renamer Types":
            changeReNamerType(_action)
        elif _action.parent().objectName() == "Scripts":
            from Core import Scripts

            Scripts.runScriptFile(fu.joinPath(Scripts.pathOfScripsDirectory, actionName))
        Records.saveAllRecords()
    except:
        ReportBug.ReportBug()
Ejemplo n.º 48
0
def clickedAnAction(_action):
    try:
        actionName = _action.objectName()
        if actionName == "Open State":
            f = Dialogs.getOpenFileName(
                translate("MenuBar", "Open State Of Hamsi Manager"),
                fu.userDirectoryPath,
                translate("MenuBar", "Application Runner") + " (*.desktop)")
            if f is not None:
                Settings.openStateOfSettings(f)
        elif actionName == "Save State":
            f = Dialogs.getSaveFileName(
                translate("MenuBar", "Save State Of Hamsi Manager"),
                fu.joinPath(fu.userDirectoryPath, "HamsiManager.desktop"),
                translate("MenuBar", "Application Runner") + " (*.desktop)")
            if f is not None:
                Settings.saveStateOfSettings(f)
                Dialogs.show(
                    translate("MenuBar", "Current State Saved"),
                    translate(
                        "MenuBar",
                        "Current state saved with preferences.<br>You can continue where you left off."
                    ))
        elif actionName == "With This Profile (My Settings)":
            if Execute.executeAsRootWithThread(
                ["--sDirectoryPath", fu.pathOfSettingsDirectory],
                    "HamsiManager"):
                getMainWindow().close()
            else:
                Dialogs.showError(
                    translate("MenuBar", "Can Not Run As Root"),
                    translate("MenuBar", "Hamsi Manager can not run as root."))
        elif actionName == "With Root Profile (Own Settings)":
            if Execute.executeAsRootWithThread([], "HamsiManager"):
                getMainWindow().close()
            else:
                Dialogs.showError(
                    translate("MenuBar", "Can Not Run As Root"),
                    translate("MenuBar", "Hamsi Manager can not run as root."))
        elif actionName == "Quit":
            getMainWindow().close()
        elif actionName == "HTML Format":
            if _action.parent().objectName() == "Export To File":
                getMainTable().exportValues("file", "html", "title")
            elif _action.parent().objectName() == "Show In New Window":
                getMainTable().exportValues("dialog", "html", "title")
            elif _action.parent().objectName() == "Copy To Clipboard":
                getMainTable().exportValues("clipboard", "html", "title")
        elif actionName == "Text Format":
            if _action.parent().objectName() == "Export To File":
                getMainTable().exportValues("file", "plainText", "title")
            elif _action.parent().objectName() == "Show In New Window":
                getMainTable().exportValues("dialog", "plainText", "title")
            elif _action.parent().objectName() == "Copy To Clipboard":
                getMainTable().exportValues("clipboard", "plainText", "title")
        elif actionName == "HTML Format (File Tree)":
            if _action.parent().objectName() == "Export To File":
                fu.getFileTree((getMainWindow().FileManager.currentDirectory),
                               0, "file", "html", "fileTree", "title")
            elif _action.parent().objectName() == "Show In New Window":
                fu.getFileTree((getMainWindow().FileManager.currentDirectory),
                               0, "dialog", "html", "fileTree", "title")
            elif _action.parent().objectName() == "Copy To Clipboard":
                fu.getFileTree((getMainWindow().FileManager.currentDirectory),
                               0, "clipboard", "html", "fileTree", "title")
        elif actionName == "Text Format (File Tree)":
            if _action.parent().objectName() == "Export To File":
                fu.getFileTree((getMainWindow().FileManager.currentDirectory),
                               0, "file", "plainText", "fileTree", "title")
            elif _action.parent().objectName() == "Show In New Window":
                fu.getFileTree((getMainWindow().FileManager.currentDirectory),
                               0, "dialog", "plainText", "fileTree", "title")
            elif _action.parent().objectName() == "Copy To Clipboard":
                fu.getFileTree((getMainWindow().FileManager.currentDirectory),
                               0, "clipboard", "plainText", "fileTree",
                               "title")
        elif actionName == "About QT":
            if isActivePyKDE4:
                QMessageBox.aboutQt(getMainWindow(),
                                    translate("MenuBar", "About QT"))
            else:
                MMessageBox.aboutQt(getMainWindow(),
                                    translate("MenuBar", "About QT"))
        elif actionName == "Options":
            from Options import OptionsForm

            OptionsForm.OptionsForm(getMainWindow())
        elif actionName == "My Plugins":
            import MyPlugins

            MyPlugins.MyPlugins()
        elif actionName == "Reconfigure":
            from Tools import Configurator

            Configurator.Configurator("configurePage")
        elif actionName == "My Plugins (System)":
            Execute.execute(["--qm", "--plugins", "--runAsRoot"],
                            "HamsiManager")
        elif actionName == "Reconfigure (System)":
            Execute.execute(["--qm", "--configurator", "--runAsRoot"],
                            "HamsiManager")
        elif actionName == "Update":
            from Core import UpdateControl

            UpdateControl.UpdateControl(getMainWindow())
        elif actionName == "Report Bug":
            ReportBug.ReportBug(True)
        elif actionName == "Suggest Idea":
            from Core import SuggestIdea

            SuggestIdea.SuggestIdea()
        elif actionName == "About Hamsi Manager":
            if isActivePyKDE4 is False:
                MMessageBox.about(getMainWindow(),
                                  translate("MenuBar", "About Hamsi Manager"),
                                  uni.aboutOfHamsiManager)
        elif actionName == translate("ToolsBar", "Check Icon"):
            getMainWindow().setEnabled(False)
            fu.checkIcon(getMainWindow().FileManager.getCurrentDirectoryPath())
            Dialogs.show(
                translate("ToolsBar", "Directory Icon Checked"),
                translate(
                    "ToolsBar",
                    "Current directory icon checked.<br>The default action based on the data is executed."
                ))
            getMainWindow().setEnabled(True)
        elif actionName == "Clear Empty Directories":
            if getMainTable().checkUnSavedValues() is False:
                _action.setChecked(False)
                return False
            answer = Dialogs.ask(
                translate("ToolsBar", "Empty Directories Will Be Removed"),
                str(
                    translate(
                        "ToolsBar",
                        "Are you sure you want to remove empty directories based on the criteria you set in \"%s\"?"
                    )) % Organizer.getLink(
                        getMainWindow().FileManager.getCurrentDirectoryPath()))
            if answer == Dialogs.Yes:
                getMainWindow().setEnabled(False)
                currentDirPath = getMainWindow(
                ).FileManager.getCurrentDirectoryPath()
                if fu.isWritableFileOrDir(currentDirPath):
                    fu.checkEmptyDirectories(currentDirPath, True, True, True,
                                             True)
                    Dialogs.show(
                        translate("ToolsBar", "Directory Cleaned"),
                        translate(
                            "ToolsBar",
                            "The current directory is cleaned based on the criteria you set."
                        ))
                getMainWindow().setEnabled(True)
                getMainWindow().FileManager.makeRefresh()
        elif actionName == "Pack":
            from Tools import Packager

            Packager.Packager(
                getMainWindow().FileManager.getCurrentDirectoryPath())
        elif actionName == "Hash":
            from Tools import Hasher

            Hasher.Hasher(
                getMainWindow().FileManager.getCurrentDirectoryPath())
        elif actionName == "Clear":
            from Tools import Cleaner

            Cleaner.Cleaner(
                getMainWindow().FileManager.getCurrentDirectoryPath())
        elif actionName == "Text Corrector":
            from Tools import TextCorrector

            TextCorrector.TextCorrector(
                getMainWindow().FileManager.getCurrentDirectoryPath())
        elif actionName == "File Tree":
            from Tools import FileTreeBuilder

            FileTreeBuilder.FileTreeBuilder(
                getMainWindow().FileManager.getCurrentDirectoryPath())
        elif actionName == "Search":
            from Tools import Searcher

            Searcher.Searcher(
                [getMainWindow().FileManager.getCurrentDirectoryPath()])
        elif actionName == "Script Manager":
            from Tools import ScriptManager

            if ScriptManager.ScriptManager.checkScriptManager():
                ScriptManager.ScriptManager(getMainWindow())
        elif actionName == "Show Last Actions":
            from Core import RecordsForm

            RecordsForm.RecordsForm(getMainWindow())
        elif actionName == "Remove Sub Files":
            answer = Dialogs.ask(
                translate("ToolsBar", "All Files Will Be Removed"),
                str(
                    translate(
                        "ToolsBar",
                        "Are you sure you want to remove only all files in \"%s\"?<br>Note:Do not will remove directory and subfolders."
                    )) % Organizer.getLink(
                        getMainWindow().FileManager.getCurrentDirectoryPath()))
            if answer == Dialogs.Yes:
                getMainWindow().setEnabled(False)
                fu.removeOnlySubFiles(
                    getMainWindow().FileManager.getCurrentDirectoryPath())
                getMainWindow().setEnabled(True)
                Dialogs.show(
                    translate("ToolsBar", "Removed Only All Files"),
                    str(
                        translate(
                            "ToolsBar",
                            "Removed only all files in \"%s\".<br>Note:Do not removed directory and subfolders."
                        )) %
                    Organizer.getLink(
                        getMainWindow().FileManager.getCurrentDirectoryPath()))
        elif actionName == "Amarok Embedded Database Configurator":
            import Amarok

            if Amarok.checkAmarok():
                Amarok.openEmbeddedDBConfigurator()
        elif _action.parent().objectName() == "Table Types":
            changeTableType(_action)
        elif _action.parent().objectName() == "File Renamer Types":
            changeReNamerType(_action)
        elif _action.parent().objectName() == "Scripts":
            from Core import Scripts

            Scripts.runScriptFile(
                fu.joinPath(Scripts.pathOfScripsDirectory, actionName))
        Records.saveAllRecords()
    except:
        ReportBug.ReportBug()
Ejemplo n.º 49
0
    def changeFile(self, _filePath, _readFrom="tag"):
        self.musicFile = _filePath
        self.musicValues = None
        self.isPlayNow = MToolButton()
        self.isPlayNow.setToolTip(
            translate("MusicDetails", "Play Suddenly Music When Open"))
        self.isPlayNow.setText(translate("MusicDetails", "Play When Open"))
        self.isPlayNow.setCheckable(True)
        self.isPlayNow.setChecked(uni.getBoolValue("isPlayNow"))
        self.isGetFromAmarok = MToolButton()
        self.isGetFromAmarok.setToolTip(
            translate("MusicDetails", "Get Values From Amarok"))
        self.isGetFromAmarok.setText(
            translate("MusicDetails", "Get From Amarok"))
        self.isGetFromAmarok.setCheckable(True)
        if _readFrom.count("Amarok") > 0:
            import Amarok

            uni.startThreadAction()
            Dialogs.showState(
                translate("MusicDetails", "Getting Values From Amarok"), 0, 1)
            if Amarok.checkAmarok():
                isContinueThreadAction = uni.isContinueThreadAction()
                if isContinueThreadAction:
                    from Amarok import Operations

                    musicFileRows = Operations.getAllMusicFileValuesWithNames(
                        "filename:\"" + _filePath + "\"")
                    Dialogs.showState(
                        translate("MusicDetails",
                                  "Values Are Being Processed"), 1, 1)
                    if len(musicFileRows) > 0:
                        musicFileRow = musicFileRows[0]
                        content = {}
                        content["path"] = musicFileRow["filePath"]
                        content["baseNameOfDirectory"] = fu.getBaseName(
                            fu.getDirName(musicFileRow["filePath"]))
                        content["baseName"] = fu.getBaseName(
                            musicFileRow["filePath"])
                        content["artist"] = musicFileRow["artist"]
                        content["title"] = musicFileRow["title"]
                        content["album"] = musicFileRow["album"]
                        content["albumArtist"] = musicFileRow["albumArtist"]
                        content["trackNum"] = musicFileRow["trackNumber"]
                        content["year"] = musicFileRow["year"]
                        content["genre"] = musicFileRow["genre"]
                        content["firstComment"] = musicFileRow["comment"]
                        content["firstLyrics"] = musicFileRow["lyrics"]
                        content["images"] = []
                        if _readFrom == "Amarok (Smart)":
                            tagger = Taggers.getTagger()
                            try:
                                tagger.loadFile(musicFileRow["filePath"])
                            except:
                                pass
                            else:
                                if content["artist"].strip() == "":
                                    content["artist"] = tagger.getArtist()
                                if content["title"].strip() == "":
                                    content["title"] = tagger.getTitle()
                                if content["album"].strip() == "":
                                    content["album"] = tagger.getAlbum()
                                if content["albumArtist"].strip() == "":
                                    content[
                                        "albumArtist"] = tagger.getAlbumArtist(
                                        )
                                if str(content["trackNum"]).strip() == "":
                                    content["trackNum"] = tagger.getTrackNum()
                                if str(content["year"]).strip() == "":
                                    content["year"] = tagger.getYear()
                                if content["genre"].strip() == "":
                                    content["genre"] = tagger.getGenre()
                                if content["firstComment"].strip() == "":
                                    content[
                                        "firstComment"] = tagger.getFirstComment(
                                        )
                                if content["firstLyrics"].strip() == "":
                                    content[
                                        "firstLyrics"] = tagger.getFirstLyrics(
                                        )
                                content["images"] = tagger.getImages()
                        self.isGetFromAmarok.setChecked(True)
                        self.musicValues = content
                    else:
                        Dialogs.show(
                            translate("MusicDetails", "Not Exist In Amarok"),
                            translate(
                                "MusicDetails",
                                "This music file not exist in Amarok DB."))
            uni.finishThreadAction()
        if self.musicValues is None:
            self.isGetFromAmarok.setChecked(False)
            self.musicValues = Musics.readMusicFile(self.musicFile)
        self.setWindowTitle(str(fu.getBaseName(self.musicFile)))
        if self.pnlClearable is not None:
            clearAllChildren(self.pnlClearable, True)
        self.pnlClearable = MWidget()
        self.vblMain.insertWidget(0, self.pnlClearable, 20)
        vblClearable = MVBoxLayout(self.pnlClearable)
        self.player = MusicPlayer.MusicPlayer(self, "dialog", _filePath)
        self.infoLabels["baseNameOfDirectory"] = MLabel(self.labels[0])
        self.infoLabels["baseName"] = MLabel(self.labels[1])
        self.infoLabels["artist"] = MLabel(self.labels[2])
        self.infoLabels["title"] = MLabel(self.labels[3])
        self.infoLabels["album"] = MLabel(self.labels[4])
        self.infoLabels["albumArtist"] = MLabel(self.labels[5])
        self.infoLabels["trackNum"] = MLabel(self.labels[6])
        self.infoLabels["year"] = MLabel(self.labels[7])
        self.infoLabels["genre"] = MLabel(self.labels[8])
        self.infoValues["baseNameOfDirectory"] = MLineEdit(
            str(
                Organizer.emend(self.musicValues["baseNameOfDirectory"],
                                "directory", False)))
        self.infoValues["baseName"] = MLineEdit(
            str(Organizer.emend(self.musicValues["baseName"], "file")))
        self.infoValues["artist"] = MLineEdit(
            str(Organizer.emend(self.musicValues["artist"])))
        self.infoValues["title"] = MLineEdit(
            str(Organizer.emend(self.musicValues["title"])))
        self.infoValues["album"] = MLineEdit(
            str(Organizer.emend(self.musicValues["album"])))
        self.infoValues["albumArtist"] = MLineEdit(
            str(Organizer.emend(self.musicValues["albumArtist"])))
        self.infoValues["trackNum"] = MLineEdit(
            str(Organizer.emend(self.musicValues["trackNum"])))
        self.infoValues["year"] = MLineEdit(
            str(Organizer.emend(self.musicValues["year"])))
        self.infoValues["genre"] = MLineEdit(
            str(Organizer.emend(self.musicValues["genre"])))
        self.infoValues["firstComment"] = MPlainTextEdit(
            str(Organizer.emend(self.musicValues["firstComment"])))
        self.infoValues["firstLyrics"] = MPlainTextEdit(
            str(Organizer.emend(self.musicValues["firstLyrics"])))
        self.infoValues["firstComment"].setLineWrapMode(MPlainTextEdit.NoWrap)
        self.infoValues["firstLyrics"].setLineWrapMode(MPlainTextEdit.NoWrap)

        if Taggers.getTagger().isSupportImages:
            self.isOpenImageDetailsOnNewWindow = MCheckBox(
                translate("MusicDetails", "Show Images In New Window"))
            self.pbtnAddImage = MPushButton(translate("MusicDetails",
                                                      "Append"))
            self.pbtnDeleteImage = MPushButton(
                translate("MusicDetails", "Delete"))
            self.pbtnSaveAsImage = MPushButton(
                translate("MusicDetails", "Save As ..."))
            self.pbtnCancelAddImage = MPushButton(
                translate("MusicDetails", "Cancel"))
            self.pbtnSelectImage = MPushButton(
                translate("MusicDetails", "Choose Image"))
            MObject.connect(self.pbtnAddImage, SIGNAL("clicked()"),
                            self.addImage)
            MObject.connect(self.pbtnDeleteImage, SIGNAL("clicked()"),
                            self.deleteImage)
            MObject.connect(self.pbtnSaveAsImage, SIGNAL("clicked()"),
                            self.saveAsImage)
            MObject.connect(self.pbtnCancelAddImage, SIGNAL("clicked()"),
                            self.cancelAddImage)
            MObject.connect(self.pbtnSelectImage, SIGNAL("clicked()"),
                            self.selectImage)
            self.leImagePath = MLineEdit("")
            self.lblImagePath = MLabel(
                translate("MusicDetails", "Image Path: "))
            self.cbImageType = MComboBox()
            self.cbImageType.addItems(Taggers.getTagger().getImageTypes())
            self.lblImageType = MLabel(
                translate("MusicDetails", "Image Type: "))

            self.lstwImages = MListWidget()
            self.lstwImages.setGridSize(MSize(350, 100))
            self.lstwImages.setIconSize(MSize(98, 98))
            MObject.connect(self.lstwImages,
                            SIGNAL("doubleClicked(QModelIndex)"),
                            self.openImageDetails)
            MObject.connect(self.isGetFromAmarok, SIGNAL("toggled(bool)"),
                            self.isGetFromAmarokTiggered)
            self.lstwImages.clear()
            for image in self.musicValues["images"]:
                if len(image) == 5:
                    pixmImage = MPixmap()
                    pixmImage.loadFromData(image[3])
                    icnImage = QIcon(pixmImage)
                    icnImage.actualSize(MSize(98, 98))
                    item = MListWidgetItem(icnImage,
                                           image[1] + "\n(" + image[2] + ")")
                    item.setSizeHint(MSize(1, 100))
                    self.lstwImages.addItem(item)
        HBOXs = []
        HBOXs.append(MHBoxLayout())
        HBOXs[-1].addWidget(self.infoLabels["baseNameOfDirectory"])
        HBOXs[-1].addWidget(self.infoValues["baseNameOfDirectory"])
        HBOXs.append(MHBoxLayout())
        HBOXs[-1].addWidget(self.infoLabels["baseName"])
        HBOXs[-1].addWidget(self.infoValues["baseName"])
        HBOXs.append(MHBoxLayout())
        HBOXs[-1].addWidget(self.infoLabels["artist"])
        HBOXs[-1].addWidget(self.infoValues["artist"])
        HBOXs.append(MHBoxLayout())
        HBOXs[-1].addWidget(self.infoLabels["title"])
        HBOXs[-1].addWidget(self.infoValues["title"])
        HBOXs.append(MHBoxLayout())
        HBOXs[-1].addWidget(self.infoLabels["album"])
        HBOXs[-1].addWidget(self.infoValues["album"])
        HBOXs.append(MHBoxLayout())
        HBOXs[-1].addWidget(self.infoLabels["albumArtist"])
        HBOXs[-1].addWidget(self.infoValues["albumArtist"])
        HBOXs.append(MHBoxLayout())
        HBOXs[-1].addWidget(self.infoLabels["trackNum"])
        HBOXs[-1].addWidget(self.infoValues["trackNum"])
        HBOXs[-1].addWidget(self.infoLabels["year"])
        HBOXs[-1].addWidget(self.infoValues["year"])
        HBOXs[-1].addWidget(self.infoLabels["genre"])
        HBOXs[-1].addWidget(self.infoValues["genre"])
        vblInfos = MVBoxLayout()
        for hbox in HBOXs:
            vblInfos.addLayout(hbox)
        if Taggers.getTagger().isSupportImages:
            imageBoxs = []
            imageBoxs.append(MHBoxLayout())
            imageBoxs[0].addWidget(self.leImagePath)
            imageBoxs[0].addWidget(self.pbtnSelectImage)
            imageBoxs.append(MHBoxLayout())
            imageBoxs[1].addWidget(self.lblImageType)
            imageBoxs[1].addWidget(self.cbImageType)
            imageBoxs.append(MHBoxLayout())
            imageBoxs[2].addWidget(self.pbtnAddImage)
            imageBoxs[2].addWidget(self.pbtnDeleteImage)
            imageBoxs[2].addWidget(self.pbtnSaveAsImage)
            imageBoxs[2].addWidget(self.pbtnCancelAddImage)
            vblImages = MVBoxLayout()
            vblImages.addWidget(self.lstwImages)
            vblImages.addWidget(self.isOpenImageDetailsOnNewWindow)
            vblImages.addWidget(self.lblImagePath)
            vblImages.addLayout(imageBoxs[0])
            vblImages.addLayout(imageBoxs[1])
            vblImages.addLayout(imageBoxs[2])
        vblComments = MVBoxLayout()
        vblComments.addWidget(self.infoValues["firstComment"])
        vblLyrics = MVBoxLayout()
        vblLyrics.addWidget(self.infoValues["firstLyrics"])
        self.tabwTabs = MTabWidget(self.pnlMain)
        self.pnlComments = MWidget(self.tabwTabs)
        self.pnlComments.setLayout(vblComments)
        self.tabwTabs.addTab(self.pnlComments,
                             translate("MusicDetails", "Comments"))
        self.pnlLyrics = MWidget(self.tabwTabs)
        self.pnlLyrics.setLayout(vblLyrics)
        self.tabwTabs.addTab(self.pnlLyrics, translate("MusicDetails",
                                                       "Lyrics"))
        if Taggers.getTagger().isSupportImages:
            self.pnlImages = MWidget(self.tabwTabs)
            self.pnlImages.setLayout(vblImages)
            self.tabwTabs.addTab(self.pnlImages,
                                 translate("MusicDetails", "Images"))
            self.pbtnSelectImage.hide()
            self.leImagePath.hide()
            self.lblImagePath.hide()
            self.lblImageType.hide()
            self.cbImageType.hide()
            self.pbtnCancelAddImage.hide()
        hblPlayer = MHBoxLayout()
        vblExtraButtons = MVBoxLayout()
        hblPlayer.addWidget(self.player)
        vblExtraButtons.addWidget(self.isPlayNow)
        vblExtraButtons.addWidget(self.isGetFromAmarok)
        hblPlayer.addLayout(vblExtraButtons)
        vblClearable.addLayout(hblPlayer)
        vblClearable.addLayout(vblInfos)
        vblClearable.addWidget(self.tabwTabs)
Ejemplo n.º 50
0
    def changeFile(self, _filePath, _readFrom="tag"):
        self.musicFile = _filePath
        self.musicValues = None
        self.isPlayNow = MToolButton()
        self.isPlayNow.setToolTip(translate("MusicDetails", "Play Suddenly Music When Open"))
        self.isPlayNow.setText(translate("MusicDetails", "Play When Open"))
        self.isPlayNow.setCheckable(True)
        self.isPlayNow.setChecked(uni.getBoolValue("isPlayNow"))
        self.isGetFromAmarok = MToolButton()
        self.isGetFromAmarok.setToolTip(translate("MusicDetails", "Get Values From Amarok"))
        self.isGetFromAmarok.setText(translate("MusicDetails", "Get From Amarok"))
        self.isGetFromAmarok.setCheckable(True)
        if _readFrom.count("Amarok") > 0:
            import Amarok

            uni.startThreadAction()
            Dialogs.showState(translate("MusicDetails", "Getting Values From Amarok"), 0, 1)
            if Amarok.checkAmarok():
                isContinueThreadAction = uni.isContinueThreadAction()
                if isContinueThreadAction:
                    from Amarok import Operations

                    musicFileRows = Operations.getAllMusicFileValuesWithNames("filename:\"" + _filePath + "\"")
                    Dialogs.showState(translate("MusicDetails", "Values Are Being Processed"), 1, 1)
                    if len(musicFileRows)>0:
                        musicFileRow = musicFileRows[0]
                        content = {}
                        content["path"] = musicFileRow["filePath"]
                        content["baseNameOfDirectory"] = fu.getBaseName(
                            fu.getDirName(musicFileRow["filePath"]))
                        content["baseName"] = fu.getBaseName(musicFileRow["filePath"])
                        content["artist"] = musicFileRow["artist"]
                        content["title"] = musicFileRow["title"]
                        content["album"] = musicFileRow["album"]
                        content["albumArtist"] = musicFileRow["albumArtist"]
                        content["trackNum"] = musicFileRow["trackNumber"]
                        content["year"] = musicFileRow["year"]
                        content["genre"] = musicFileRow["genre"]
                        content["firstComment"] = musicFileRow["comment"]
                        content["firstLyrics"] = musicFileRow["lyrics"]
                        content["images"] = []
                        if _readFrom == "Amarok (Smart)":
                            tagger = Taggers.getTagger()
                            try:
                                tagger.loadFile(musicFileRow["filePath"])
                            except:
                                pass
                            else:
                                if content["artist"].strip() == "":
                                    content["artist"] = tagger.getArtist()
                                if content["title"].strip() == "":
                                    content["title"] = tagger.getTitle()
                                if content["album"].strip() == "":
                                    content["album"] = tagger.getAlbum()
                                if content["albumArtist"].strip() == "":
                                    content["albumArtist"] = tagger.getAlbumArtist()
                                if str(content["trackNum"]).strip() == "":
                                    content["trackNum"] = tagger.getTrackNum()
                                if str(content["year"]).strip() == "":
                                    content["year"] = tagger.getYear()
                                if content["genre"].strip() == "":
                                    content["genre"] = tagger.getGenre()
                                if content["firstComment"].strip() == "":
                                    content["firstComment"] = tagger.getFirstComment()
                                if content["firstLyrics"].strip() == "":
                                    content["firstLyrics"] = tagger.getFirstLyrics()
                                content["images"] = tagger.getImages()
                        self.isGetFromAmarok.setChecked(True)
                        self.musicValues = content
                    else:
                        Dialogs.show(translate("MusicDetails", "Not Exist In Amarok"),
                                     translate("MusicDetails", "This music file not exist in Amarok DB."))
            uni.finishThreadAction()
        if self.musicValues is None:
            self.isGetFromAmarok.setChecked(False)
            self.musicValues = Musics.readMusicFile(self.musicFile)
        self.setWindowTitle(str(fu.getBaseName(self.musicFile)))
        if self.pnlClearable is not None:
            clearAllChildren(self.pnlClearable, True)
        self.pnlClearable = MWidget()
        self.vblMain.insertWidget(0, self.pnlClearable, 20)
        vblClearable = MVBoxLayout(self.pnlClearable)
        self.player = MusicPlayer.MusicPlayer(self, "dialog", _filePath)
        self.infoLabels["baseNameOfDirectory"] = MLabel(self.labels[0])
        self.infoLabels["baseName"] = MLabel(self.labels[1])
        self.infoLabels["artist"] = MLabel(self.labels[2])
        self.infoLabels["title"] = MLabel(self.labels[3])
        self.infoLabels["album"] = MLabel(self.labels[4])
        self.infoLabels["albumArtist"] = MLabel(self.labels[5])
        self.infoLabels["trackNum"] = MLabel(self.labels[6])
        self.infoLabels["year"] = MLabel(self.labels[7])
        self.infoLabels["genre"] = MLabel(self.labels[8])
        self.infoValues["baseNameOfDirectory"] = MLineEdit(
            str(Organizer.emend(self.musicValues["baseNameOfDirectory"], "directory", False)))
        self.infoValues["baseName"] = MLineEdit(str(Organizer.emend(self.musicValues["baseName"], "file")))
        self.infoValues["artist"] = MLineEdit(str(Organizer.emend(self.musicValues["artist"])))
        self.infoValues["title"] = MLineEdit(str(Organizer.emend(self.musicValues["title"])))
        self.infoValues["album"] = MLineEdit(str(Organizer.emend(self.musicValues["album"])))
        self.infoValues["albumArtist"] = MLineEdit(str(Organizer.emend(self.musicValues["albumArtist"])))
        self.infoValues["trackNum"] = MLineEdit(str(Organizer.emend(self.musicValues["trackNum"])))
        self.infoValues["year"] = MLineEdit(str(Organizer.emend(self.musicValues["year"])))
        self.infoValues["genre"] = MLineEdit(str(Organizer.emend(self.musicValues["genre"])))
        self.infoValues["firstComment"] = MPlainTextEdit(str(Organizer.emend(self.musicValues["firstComment"])))
        self.infoValues["firstLyrics"] = MPlainTextEdit(str(Organizer.emend(self.musicValues["firstLyrics"])))
        self.infoValues["firstComment"].setLineWrapMode(MPlainTextEdit.NoWrap)
        self.infoValues["firstLyrics"].setLineWrapMode(MPlainTextEdit.NoWrap)

        if Taggers.getTagger().isSupportImages:
            self.isOpenImageDetailsOnNewWindow = MCheckBox(translate("MusicDetails", "Show Images In New Window"))
            self.pbtnAddImage = MPushButton(translate("MusicDetails", "Append"))
            self.pbtnDeleteImage = MPushButton(translate("MusicDetails", "Delete"))
            self.pbtnSaveAsImage = MPushButton(translate("MusicDetails", "Save As ..."))
            self.pbtnCancelAddImage = MPushButton(translate("MusicDetails", "Cancel"))
            self.pbtnSelectImage = MPushButton(translate("MusicDetails", "Choose Image"))
            MObject.connect(self.pbtnAddImage, SIGNAL("clicked()"), self.addImage)
            MObject.connect(self.pbtnDeleteImage, SIGNAL("clicked()"), self.deleteImage)
            MObject.connect(self.pbtnSaveAsImage, SIGNAL("clicked()"), self.saveAsImage)
            MObject.connect(self.pbtnCancelAddImage, SIGNAL("clicked()"), self.cancelAddImage)
            MObject.connect(self.pbtnSelectImage, SIGNAL("clicked()"), self.selectImage)
            self.leImagePath = MLineEdit("")
            self.lblImagePath = MLabel(translate("MusicDetails", "Image Path: "))
            self.cbImageType = MComboBox()
            self.cbImageType.addItems(Taggers.getTagger().getImageTypes())
            self.lblImageType = MLabel(translate("MusicDetails", "Image Type: "))

            self.lstwImages = MListWidget()
            self.lstwImages.setGridSize(MSize(350, 100))
            self.lstwImages.setIconSize(MSize(98, 98))
            MObject.connect(self.lstwImages, SIGNAL("doubleClicked(QModelIndex)"), self.openImageDetails)
            MObject.connect(self.isGetFromAmarok, SIGNAL("toggled(bool)"), self.isGetFromAmarokTiggered)
            self.lstwImages.clear()
            for image in self.musicValues["images"]:
                if len(image) == 5:
                    pixmImage = MPixmap()
                    pixmImage.loadFromData(image[3])
                    icnImage = QIcon(pixmImage)
                    icnImage.actualSize(MSize(98, 98))
                    item = MListWidgetItem(icnImage, image[1] + "\n(" + image[2] + ")")
                    item.setSizeHint(MSize(1, 100))
                    self.lstwImages.addItem(item)
        HBOXs = []
        HBOXs.append(MHBoxLayout())
        HBOXs[-1].addWidget(self.infoLabels["baseNameOfDirectory"])
        HBOXs[-1].addWidget(self.infoValues["baseNameOfDirectory"])
        HBOXs.append(MHBoxLayout())
        HBOXs[-1].addWidget(self.infoLabels["baseName"])
        HBOXs[-1].addWidget(self.infoValues["baseName"])
        HBOXs.append(MHBoxLayout())
        HBOXs[-1].addWidget(self.infoLabels["artist"])
        HBOXs[-1].addWidget(self.infoValues["artist"])
        HBOXs.append(MHBoxLayout())
        HBOXs[-1].addWidget(self.infoLabels["title"])
        HBOXs[-1].addWidget(self.infoValues["title"])
        HBOXs.append(MHBoxLayout())
        HBOXs[-1].addWidget(self.infoLabels["album"])
        HBOXs[-1].addWidget(self.infoValues["album"])
        HBOXs.append(MHBoxLayout())
        HBOXs[-1].addWidget(self.infoLabels["albumArtist"])
        HBOXs[-1].addWidget(self.infoValues["albumArtist"])
        HBOXs.append(MHBoxLayout())
        HBOXs[-1].addWidget(self.infoLabels["trackNum"])
        HBOXs[-1].addWidget(self.infoValues["trackNum"])
        HBOXs[-1].addWidget(self.infoLabels["year"])
        HBOXs[-1].addWidget(self.infoValues["year"])
        HBOXs[-1].addWidget(self.infoLabels["genre"])
        HBOXs[-1].addWidget(self.infoValues["genre"])
        vblInfos = MVBoxLayout()
        for hbox in HBOXs:
            vblInfos.addLayout(hbox)
        if Taggers.getTagger().isSupportImages:
            imageBoxs = []
            imageBoxs.append(MHBoxLayout())
            imageBoxs[0].addWidget(self.leImagePath)
            imageBoxs[0].addWidget(self.pbtnSelectImage)
            imageBoxs.append(MHBoxLayout())
            imageBoxs[1].addWidget(self.lblImageType)
            imageBoxs[1].addWidget(self.cbImageType)
            imageBoxs.append(MHBoxLayout())
            imageBoxs[2].addWidget(self.pbtnAddImage)
            imageBoxs[2].addWidget(self.pbtnDeleteImage)
            imageBoxs[2].addWidget(self.pbtnSaveAsImage)
            imageBoxs[2].addWidget(self.pbtnCancelAddImage)
            vblImages = MVBoxLayout()
            vblImages.addWidget(self.lstwImages)
            vblImages.addWidget(self.isOpenImageDetailsOnNewWindow)
            vblImages.addWidget(self.lblImagePath)
            vblImages.addLayout(imageBoxs[0])
            vblImages.addLayout(imageBoxs[1])
            vblImages.addLayout(imageBoxs[2])
        vblComments = MVBoxLayout()
        vblComments.addWidget(self.infoValues["firstComment"])
        vblLyrics = MVBoxLayout()
        vblLyrics.addWidget(self.infoValues["firstLyrics"])
        self.tabwTabs = MTabWidget(self.pnlMain)
        self.pnlComments = MWidget(self.tabwTabs)
        self.pnlComments.setLayout(vblComments)
        self.tabwTabs.addTab(self.pnlComments, translate("MusicDetails", "Comments"))
        self.pnlLyrics = MWidget(self.tabwTabs)
        self.pnlLyrics.setLayout(vblLyrics)
        self.tabwTabs.addTab(self.pnlLyrics, translate("MusicDetails", "Lyrics"))
        if Taggers.getTagger().isSupportImages:
            self.pnlImages = MWidget(self.tabwTabs)
            self.pnlImages.setLayout(vblImages)
            self.tabwTabs.addTab(self.pnlImages, translate("MusicDetails", "Images"))
            self.pbtnSelectImage.hide()
            self.leImagePath.hide()
            self.lblImagePath.hide()
            self.lblImageType.hide()
            self.cbImageType.hide()
            self.pbtnCancelAddImage.hide()
        hblPlayer = MHBoxLayout()
        vblExtraButtons = MVBoxLayout()
        hblPlayer.addWidget(self.player)
        vblExtraButtons.addWidget(self.isPlayNow)
        vblExtraButtons.addWidget(self.isGetFromAmarok)
        hblPlayer.addLayout(vblExtraButtons)
        vblClearable.addLayout(hblPlayer)
        vblClearable.addLayout(vblInfos)
        vblClearable.addWidget(self.tabwTabs)