From 7716a803bc5bb8c48d53f72f18bcfc66dea836dc Mon Sep 17 00:00:00 2001 From: cidoku Date: Wed, 8 Oct 2025 19:32:47 -0300 Subject: [PATCH] private music list added (early) --- gameview.py | 97 ++++++++++++++++++++++++++++++++++++++--------------- ini.py | 14 ++++++++ 2 files changed, 84 insertions(+), 27 deletions(-) diff --git a/gameview.py b/gameview.py index 45de863..87b4926 100644 --- a/gameview.py +++ b/gameview.py @@ -1373,36 +1373,44 @@ class GUI(QtGui.QWidget): self.btnMusicOptions = QtGui.QPushButton(QtGui.QIcon(AO2XPpath + "icons/" + "cog.png"), "", self.tabMusic) self.btnMusicOptions.setToolTip('Music options') self.btnMusicOptions.clicked.connect(self.onMusicOptionsClicked) - self.actMusicRandom = QtGui.QAction(QtGui.QIcon(AO2XPpath + "icons/" + "control_play_blue.png"), "&Play random", self.tabMusic) self.actMusicRandom.triggered.connect(self.onActMusicRandomTriggered) self.actMusicCopy = QtGui.QAction(QtGui.QIcon(AO2XPpath + "icons/" + "page_copy.png"), "&Copy selected song name", self.tabMusic) self.actMusicCopy.triggered.connect(self.onActMusicCopyTriggered) self.actMusicCopy.setDisabled(True) - + self.actMusicSeparator = QtGui.QAction(self.tabMusic) + self.actMusicSeparator.setSeparator(True) self.actMusicAdd = QtGui.QAction(QtGui.QIcon(AO2XPpath + "icons/" + "add.png"), "&Add new entry", self.tabMusic) + self.actMusicAdd.triggered.connect(self.onActMusicAddTriggered) + self.actMusicAdd.setVisible(False) + self.actMusicAdd.setDisabled(True) self.actMusicEdit = QtGui.QAction(QtGui.QIcon(AO2XPpath + "icons/" + "edit.png"), "&Edit selected entry", self.tabMusic) + self.actMusicEdit.triggered.connect(self.onActMusicEditTriggered) + self.actMusicEdit.setVisible(False) + self.actMusicEdit.setDisabled(True) self.actMusicDelete = QtGui.QAction(QtGui.QIcon(AO2XPpath + "icons/" + "delete.png"), "&Delete selected entry", self.tabMusic) - + self.actMusicDelete.triggered.connect(self.onActMusicDeleteTriggered) + self.actMusicDelete.setVisible(False) + self.actMusicDelete.setDisabled(True) self.actMusicSwitchToGlobal = QtGui.QAction(QtGui.QIcon(AO2XPpath + "icons/" + "world.png"), "&View global music list", self.tabMusic) + self.actMusicSwitchToGlobal.triggered.connect(self.onActMusicSwitchTriggered) + self.actMusicSwitchToGlobal.setVisible(False) self.actMusicSwitchToPrivate = QtGui.QAction(QtGui.QIcon(AO2XPpath + "icons/" + "briefcase.png"), "&View private music list", self.tabMusic) - self.actMusicSwitchToPrivate.setDisabled(True) - + self.actMusicSwitchToPrivate.triggered.connect(self.onActMusicSwitchTriggered) self.mnuMusicOptions = QtGui.QMenu(self.tabMusic) self.mnuMusicOptions.addAction(self.actMusicRandom) self.mnuMusicOptions.addAction(self.actMusicCopy) + self.mnuMusicOptions.addAction(self.actMusicSeparator) + self.mnuMusicOptions.addAction(self.actMusicAdd) + self.mnuMusicOptions.addAction(self.actMusicEdit) + self.mnuMusicOptions.addAction(self.actMusicDelete) self.mnuMusicOptions.addSeparator() self.mnuMusicOptions.addAction(self.actMusicSwitchToPrivate) - - self.mnuMusicOptionsPrivate = QtGui.QMenu(self.tabMusic) - self.mnuMusicOptionsPrivate.addAction(self.actMusicRandom) - self.mnuMusicOptionsPrivate.addAction(self.actMusicCopy) - self.mnuMusicOptionsPrivate.addSeparator() - self.mnuMusicOptionsPrivate.addAction(self.actMusicAdd) - self.mnuMusicOptionsPrivate.addAction(self.actMusicEdit) - self.mnuMusicOptionsPrivate.addAction(self.actMusicDelete) - self.mnuMusicOptionsPrivate.addSeparator() - self.mnuMusicOptionsPrivate.addAction(self.actMusicSwitchToGlobal) + self.mnuMusicOptions.addAction(self.actMusicSwitchToGlobal) + + self.musicListPrivate = {} + if exists(AO2XPpath + "music.ini"): + self.musicListPrivate = ini.sectionless_ini_to_dict(AO2XPpath + "music.ini", QtCore.QString) # Areas list self.areaItems = QtGui.QListWidget() @@ -1630,7 +1638,6 @@ class GUI(QtGui.QWidget): self.demoRecorder = None self.demoPlaying = False self.musicList = {} - self.musicListPrivate = {} self.pickedMusicItem = False self.slideEnabled = getOption("General", "slide", False) == 'True' @@ -1889,15 +1896,23 @@ class GUI(QtGui.QWidget): def onMusicItemClicked(self, item): self.actMusicCopy.setDisabled(False) + # self.actMusicAdd.setDisabled(False) + # self.actMusicEdit.setDisabled(False) + # self.actMusicDelete.setDisabled(False) def onMusicItemDoubleClicked(self, item): self.pickedMusicItem = True - _musicList = self.musicListPrivate if self.privateMusicSelected else self.musicList - self.sendMC(_musicList[item.text()]) + if self.privateMusicSelected: + self.sendOOCchat(self.OOCNameInput.text().toUtf8(), "/play " + self.musicListPrivate[item.text()]) + else: + self.sendMC(self.musicList[item.text()]) def onMusicSearch(self, text): self.musicItems.clear() self.actMusicCopy.setDisabled(True) + # self.actMusicAdd.setDisabled(True) + # self.actMusicEdit.setDisabled(True) + # self.actMusicDelete.setDisabled(True) _musicList = self.musicListPrivate if self.privateMusicSelected else self.musicList @@ -1913,21 +1928,45 @@ class GUI(QtGui.QWidget): self.loadAllMusic() def onMusicOptionsClicked(self): - if self.privateMusicSelected: - self.mnuMusicOptionsPrivate.exec_(QtGui.QCursor.pos()) - else: - self.mnuMusicOptions.exec_(QtGui.QCursor.pos()) + self.mnuMusicOptions.exec_(QtGui.QCursor.pos()) def onActMusicRandomTriggered(self): - self.pickedMusicItem = True _musicList = self.musicListPrivate if self.privateMusicSelected else self.musicList - _item = self.musicItems.item(random.randint(0, self.musicItems.count())) + choice = random.randint(0, self.musicItems.count() - 1) + print choice + _item = self.musicItems.item(choice) self.musicItems.setCurrentItem(_item) self.actMusicCopy.setDisabled(False) - self.sendMC(_musicList[_item.text()]) + # self.actMusicAdd.setDisabled(False) + # self.actMusicEdit.setDisabled(False) + # self.actMusicDelete.setDisabled(False) + self.onMusicItemDoubleClicked(_item) def onActMusicCopyTriggered(self): QtGui.QApplication.clipboard().setText(self.musicItems.currentItem().text()) + + def onActMusicAddTriggered(self): + pass + + def onActMusicEditTriggered(self): + pass + + def onActMusicDeleteTriggered(self): + pass + + def onActMusicSwitchTriggered(self): + self.privateMusicSelected = not self.privateMusicSelected + + self.actMusicSeparator.setVisible(self.privateMusicSelected) + self.actMusicAdd.setVisible(self.privateMusicSelected) + self.actMusicEdit.setVisible(self.privateMusicSelected) + self.actMusicDelete.setVisible(self.privateMusicSelected) + self.actMusicSwitchToGlobal.setVisible(self.privateMusicSelected) + self.actMusicSwitchToPrivate.setVisible(not self.privateMusicSelected) + + self.musicItems.clear() + self.actMusicCopy.setDisabled(True) + self.loadAllMusic() def loadBackgrounds(self): self.backgroundItems.clear() @@ -3793,8 +3832,10 @@ class GUI(QtGui.QWidget): self.stopMusic() if mus == "~stop.mp3" or not mus: return + + _musicList = self.musicListPrivate if self.privateMusicSelected else self.musicList - if not mus.endswith(".mp3") and "===MUSIC START===.mp3" in self.musicList: #vidya workaround + if not mus.endswith(".mp3") and "===MUSIC START===.mp3" in _musicList: #vidya workaround mus += ".mp3" musl = mus.lower() @@ -3803,7 +3844,7 @@ class GUI(QtGui.QWidget): if exists(AOpath + 'sounds/music/' + musl): playLocal = True elif self.pickedMusicItem: - _musl = self.musicList[self.musicItems.currentItem().text()] + _musl = _musicList[self.musicItems.currentItem().text()] if exists(AOpath + 'sounds/music/' + _musl): musl = _musl playLocal = True @@ -3890,6 +3931,8 @@ class GUI(QtGui.QWidget): def loadAllMusic(self): _musicList = self.musicListPrivate if self.privateMusicSelected else self.musicList + + self.actMusicRandom.setDisabled(not len(_musicList.items())) for song, fname in _musicList.items(): songitem = QtGui.QListWidgetItem() diff --git a/ini.py b/ini.py index 2b4ee0d..c09fa56 100644 --- a/ini.py +++ b/ini.py @@ -68,6 +68,20 @@ def read_sectionless_ini(file, search, default=""): if search.lower() == key.rstrip().lower(): return value.lstrip() return default + +def sectionless_ini_to_dict(file, cast=unicode): + if isinstance(file, QString): file = str(file) + + result = {} + + with open(file) as f: + for keys in f.read().split("\n"): + if not keys or "=" not in keys: continue + + key, value = keys.split("=") + result[cast(key.decode('utf-8').strip())] = value.strip() + + return result # AO 2.8