--- a/PluginManager/PluginRepositoryDialog.py Fri Nov 17 18:47:07 2017 +0100 +++ b/PluginManager/PluginRepositoryDialog.py Fri Nov 17 18:51:40 2017 +0100 @@ -14,6 +14,7 @@ import os import zipfile import glob +import re from PyQt5.QtCore import pyqtSignal, pyqtSlot, Qt, QFile, QIODevice, QUrl, \ QProcess, QPoint, QCoreApplication @@ -877,22 +878,31 @@ if not os.path.isfile(os.path.join(downloadPath, pluginFile)): continue - pluginName = pluginFile.rsplit("-", 1)[0] + pluginName, pluginVersion = \ + pluginFile.replace(".zip", "").rsplit("-", 1) + pluginVersionList = re.split("[._-]", pluginVersion) + for index in range(len(pluginVersionList)): + try: + pluginVersionList[index] = int(pluginVersionList[index]) + except ValueError: + # use default of 0 + pluginVersionList[index] = 0 + if pluginName not in downloads: downloads[pluginName] = [] - downloads[pluginName].append(pluginFile) + downloads[pluginName].append((pluginFile, tuple(pluginVersionList))) # step 2: delete old entries hiddenPlugins = Preferences.getPluginManager("HiddenPlugins") for pluginName in downloads: - downloads[pluginName].sort() + downloads[pluginName].sort(key=lambda x: x[1]) if pluginName in hiddenPlugins and \ not Preferences.getPluginManager("KeepHidden"): - removeFiles = downloads[pluginName] + removeFiles = downloads[pluginName][0] else: - removeFiles = downloads[pluginName][ - :-Preferences.getPluginManager("KeepGenerations")] + removeFiles = [f[0] for f in downloads[pluginName][ + :-Preferences.getPluginManager("KeepGenerations")]] for removeFile in removeFiles: try: os.remove(os.path.join(downloadPath, removeFile))