Make minecraft installation list more robust
Current install is now stored as the install's path rather than its index. None install is now checked more often.
This commit is contained in:
parent
49e40cc7d2
commit
9fdf601d19
@ -514,15 +514,17 @@ class EditorSession(QtCore.QObject):
|
||||
|
||||
install = minecraftinstall.GetInstalls().getCurrentInstall()
|
||||
|
||||
for version in sorted(install.versions, reverse=True):
|
||||
versionAction = self.mcVersionMenu.addAction(version)
|
||||
self.mcVersionMapper.setMapping(versionAction, version)
|
||||
versionAction.triggered.connect(self.mcVersionMapper.map)
|
||||
if install is not None:
|
||||
|
||||
for resourcePack in sorted(install.resourcePacks):
|
||||
resourcePackAction = self.resourcePackMenu.addAction(resourcePack)
|
||||
self.resourcePackMapper.setMapping(resourcePackAction, resourcePack)
|
||||
resourcePackAction.triggered.connect(self.resourcePackMapper.map)
|
||||
for version in sorted(install.versions, reverse=True):
|
||||
versionAction = self.mcVersionMenu.addAction(version)
|
||||
self.mcVersionMapper.setMapping(versionAction, version)
|
||||
versionAction.triggered.connect(self.mcVersionMapper.map)
|
||||
|
||||
for resourcePack in sorted(install.resourcePacks):
|
||||
resourcePackAction = self.resourcePackMenu.addAction(resourcePack)
|
||||
self.resourcePackMapper.setMapping(resourcePackAction, resourcePack)
|
||||
resourcePackAction.triggered.connect(self.resourcePackMapper.map)
|
||||
|
||||
def toolbarTextChanged(self, enable):
|
||||
if enable:
|
||||
|
@ -18,10 +18,9 @@ log = logging.getLogger(__name__)
|
||||
|
||||
installationsOption = settings.Settings().getOption("minecraft_installs/installations", "json", [])
|
||||
multiMCInstallsOption = settings.Settings().getOption("minecraft_installs/multimc_installs", "json", [])
|
||||
currentInstallOption = settings.Settings().getOption("minecraft_installs/current_install", int, 0)
|
||||
currentInstallOption = settings.Settings().getOption("minecraft_installs/current_install_path", unicode, "")
|
||||
currentVersionOption = settings.Settings().getOption("minecraft_installs/current_version", unicode, "")
|
||||
currentResourcePackOption = settings.Settings().getOption("minecraft_installs/current_resource_pack", unicode, "")
|
||||
currentMMCInstanceOption = settings.Settings().getOption("minecraft_installs/current_mmc_instance", int)
|
||||
allowSnapshotsOption = settings.Settings().getOption("minecraft_installs/allow_snapshots", int, 0)
|
||||
|
||||
_installs = None
|
||||
@ -53,12 +52,12 @@ def getResourceLoaderForFilename(filename):
|
||||
|
||||
return loader
|
||||
|
||||
|
||||
def getSelectedResourceLoader():
|
||||
i = currentInstallOption.value()
|
||||
if i == -1:
|
||||
install = GetInstalls().getCurrentInstall()
|
||||
if install is None:
|
||||
return GetInstalls().getDefaultResourceLoader()
|
||||
|
||||
install = GetInstalls().getInstall(i)
|
||||
v = currentVersionOption.value()
|
||||
if not v:
|
||||
v = list(install.versions)[0]
|
||||
@ -72,12 +71,14 @@ def GetInstalls():
|
||||
_installs = MCInstallGroup()
|
||||
return _installs
|
||||
|
||||
|
||||
def md5hash(filename):
|
||||
md5 = hashlib.md5()
|
||||
with file(filename, "rb") as f:
|
||||
md5.update(f.read())
|
||||
return md5.hexdigest()
|
||||
|
||||
|
||||
class MCInstallGroup(object):
|
||||
def __init__(self):
|
||||
"""
|
||||
@ -91,6 +92,15 @@ class MCInstallGroup(object):
|
||||
"""
|
||||
self._installations = list(self._loadInstalls())
|
||||
self._mmcInstalls = list(self._loadMMCInstalls())
|
||||
path = currentInstallOption.value()
|
||||
install = self.getInstall(path)
|
||||
if install is None:
|
||||
if len(self._installations):
|
||||
path = self._installations[0].path
|
||||
currentInstallOption.setValue(path)
|
||||
else:
|
||||
currentInstallOption.setValue("")
|
||||
|
||||
self.getDefaultInstall()
|
||||
|
||||
def _loadMMCInstalls(self):
|
||||
@ -137,27 +147,40 @@ class MCInstallGroup(object):
|
||||
if value not in installationsOption.value():
|
||||
self._installations.append(defaultInstall)
|
||||
self._saveInstalls()
|
||||
if currentInstallOption.value() == "":
|
||||
currentInstallOption.setValue(defaultInstall.path)
|
||||
return defaultInstall
|
||||
|
||||
def selectedInstallIndex(self):
|
||||
return currentInstallOption.value(0)
|
||||
def selectedInstallPath(self):
|
||||
path = currentInstallOption.value()
|
||||
for install in self._installations:
|
||||
if install.path == path:
|
||||
return path
|
||||
|
||||
if len(self._installations):
|
||||
install = self._installations[0]
|
||||
currentInstallOption.setValue(install.path)
|
||||
return install.path
|
||||
|
||||
@property
|
||||
def installs(self):
|
||||
return list(self._installations)
|
||||
|
||||
def getInstall(self, index):
|
||||
return self._installations[index]
|
||||
def getInstall(self, path):
|
||||
for install in self._installations:
|
||||
if install.path == path:
|
||||
return install
|
||||
return None
|
||||
|
||||
def getCurrentInstall(self):
|
||||
return self.getInstall(self.selectedInstallIndex())
|
||||
return self.getInstall(self.selectedInstallPath())
|
||||
|
||||
def addInstall(self, install):
|
||||
self._installations.append(install)
|
||||
self._saveInstalls()
|
||||
|
||||
def removeInstall(self, index):
|
||||
del self._installations[index]
|
||||
def removeInstall(self, path):
|
||||
self._installations = [i for i in self._installations if i.path != path]
|
||||
self._saveInstalls()
|
||||
|
||||
def addMMCInstall(self, install):
|
||||
@ -470,13 +493,15 @@ class MinecraftInstallsDialog(QtGui.QDialog, Ui_installsWidget):
|
||||
super(MinecraftInstallsDialog, self).__init__(*args, **kwargs)
|
||||
self.setupUi(self)
|
||||
# populate list view
|
||||
for install in GetInstalls().installs:
|
||||
path = currentInstallOption.value()
|
||||
for i, install in enumerate(GetInstalls().installs):
|
||||
self._addInstall(install)
|
||||
if path == install.path:
|
||||
self._hiliteRow(i)
|
||||
|
||||
for path in GetInstalls().mmcInstalls:
|
||||
self._addMMCInstall(path)
|
||||
|
||||
self._hiliteRow(currentInstallOption.value(0))
|
||||
|
||||
self.minecraftInstallsTable.cellChanged.connect(self.itemChanged)
|
||||
self.addButton.clicked.connect(self.addInstall)
|
||||
self.removeButton.clicked.connect(self.removeInstall)
|
||||
@ -486,7 +511,6 @@ class MinecraftInstallsDialog(QtGui.QDialog, Ui_installsWidget):
|
||||
self.addMMCButton.clicked.connect(self.addMMCInstall)
|
||||
self.removeMMCButton.clicked.connect(self.removeMMCInstall)
|
||||
|
||||
|
||||
def itemChanged(self, row, column):
|
||||
install = GetInstalls().installs[row]
|
||||
text = self.minecraftInstallsTable.item(row, column).text()
|
||||
@ -514,12 +538,12 @@ class MinecraftInstallsDialog(QtGui.QDialog, Ui_installsWidget):
|
||||
pathItem.setFlags(pathItem.flags() & ~Qt.ItemIsEditable)
|
||||
minecraftInstallsTable.setItem(row, 2, pathItem)
|
||||
self._hiliteRow(row)
|
||||
currentInstallOption.setValue(row)
|
||||
currentInstallOption.setValue(install.path)
|
||||
|
||||
def _addMMCInstall(self, install):
|
||||
mmcTable = self.multiMCTable
|
||||
row = mmcTable.rowCount()
|
||||
mmcTable.setRowCount(row+1)
|
||||
mmcTable.setRowCount(row + 1)
|
||||
nameItem = NameItem(install.name)
|
||||
nameItem.setFlags(nameItem.flags() & ~Qt.ItemIsEditable)
|
||||
mmcTable.setItem(row, 0, nameItem)
|
||||
@ -557,12 +581,14 @@ class MinecraftInstallsDialog(QtGui.QDialog, Ui_installsWidget):
|
||||
|
||||
def removeInstall(self):
|
||||
row = self.minecraftInstallsTable.currentRow()
|
||||
GetInstalls().removeInstall(row)
|
||||
path = self.minecraftInstallsTable.item(row, 2).data()
|
||||
GetInstalls().removeInstall(path)
|
||||
self.minecraftInstallsTable.removeRow(row)
|
||||
|
||||
def selectInstall(self):
|
||||
row = self.minecraftInstallsTable.currentRow()
|
||||
currentInstallOption.setValue(row)
|
||||
path = self.minecraftInstallsTable.item(row, 2).data()
|
||||
currentInstallOption.setValue(path)
|
||||
self._hiliteRow(row)
|
||||
|
||||
def addMMCInstall(self):
|
||||
|
@ -223,13 +223,17 @@ class WorldListWidget(QtGui.QDialog, Ui_worldList):
|
||||
self.savesFolderComboBox.setCurrentIndex(index)
|
||||
|
||||
self.savesFolderComboBox.currentIndexChanged.connect(self.savesFolderChanged)
|
||||
self.minecraftInstallBox.currentIndexChanged.connect(minecraftinstall.currentInstallOption.setValue)
|
||||
self.minecraftInstallBox.currentIndexChanged.connect(self.currentInstallChanged)
|
||||
self.minecraftVersionBox.currentIndexChanged[str].connect(minecraftinstall.currentVersionOption.setValue)
|
||||
self.resourcePackBox.currentIndexChanged.connect(self.resourcePackChanged)
|
||||
self.worldListModel = None
|
||||
self.reloadList()
|
||||
self.reloadRecentWorlds()
|
||||
|
||||
def currentInstallChanged(self, index):
|
||||
path = self.minecraftInstallBox.itemData(index)
|
||||
minecraftinstall.currentInstallOption.setValue(path)
|
||||
|
||||
def resourcePackChanged(self, index):
|
||||
if index == 0:
|
||||
minecraftinstall.currentResourcePackOption.setValue("")
|
||||
@ -237,16 +241,20 @@ class WorldListWidget(QtGui.QDialog, Ui_worldList):
|
||||
minecraftinstall.currentResourcePackOption.setValue(self.resourcePackBox.currentText())
|
||||
|
||||
def _updateInstalls(self):
|
||||
self.minecraftInstallBox.clear()
|
||||
|
||||
for install in minecraftinstall.GetInstalls().installs:
|
||||
self.minecraftInstallBox.addItem(install.name)
|
||||
self.minecraftInstallBox.addItem(install.name, install.path)
|
||||
for saveDir in install.getSaveDirs():
|
||||
self.savesFolderComboBox.addItem(install.name + os.sep + os.path.basename(saveDir), saveDir)
|
||||
|
||||
for index, instance in enumerate(minecraftinstall.GetInstalls().instances): # xxx instanceID?
|
||||
for instance in minecraftinstall.GetInstalls().instances:
|
||||
saveDir = instance.saveFileDir
|
||||
self.savesFolderComboBox.addItem(instance.name + os.sep + os.path.basename(saveDir), saveDir)
|
||||
|
||||
self.minecraftInstallBox.setCurrentIndex(minecraftinstall.GetInstalls().selectedInstallIndex())
|
||||
path = minecraftinstall.GetInstalls().selectedInstallPath()
|
||||
index = self.minecraftInstallBox.findData(path)
|
||||
self.minecraftInstallBox.setCurrentIndex(index)
|
||||
|
||||
self._updateVersionsAndResourcePacks()
|
||||
|
||||
@ -255,9 +263,10 @@ class WorldListWidget(QtGui.QDialog, Ui_worldList):
|
||||
self.resourcePackBox.clear()
|
||||
self.resourcePackBox.addItem(self.tr("(No resource pack)"))
|
||||
|
||||
if self.minecraftInstallBox.count():
|
||||
install = minecraftinstall.GetInstalls().getInstall(self.minecraftInstallBox.currentIndex())
|
||||
path = minecraftinstall.currentInstallOption.value()
|
||||
install = minecraftinstall.GetInstalls().getInstall(path)
|
||||
|
||||
if install:
|
||||
for version in sorted(install.versions, reverse=True):
|
||||
self.minecraftVersionBox.addItem(version)
|
||||
|
||||
|
Reference in New Issue
Block a user