From b95924ae74630adab2cc071d6391db9d982c7ba3 Mon Sep 17 00:00:00 2001 From: Stevan Pettit Date: Tue, 16 Aug 2011 22:58:07 -0400 Subject: [PATCH 1/9] Added code to export/import settings via an ini file --- openlp/core/ui/aboutdialog.py | 4 +- openlp/core/ui/mainwindow.py | 183 ++++++++++++++++++++++++++++++- openlp/core/ui/servicemanager.py | 23 ++-- 3 files changed, 192 insertions(+), 18 deletions(-) diff --git a/openlp/core/ui/aboutdialog.py b/openlp/core/ui/aboutdialog.py index 3e941c051..f4a732fb6 100644 --- a/openlp/core/ui/aboutdialog.py +++ b/openlp/core/ui/aboutdialog.py @@ -116,7 +116,7 @@ class Ui_AboutDialog(object): u'Scott "sguerrieri" Guerrieri', u'Matthias "matthub" Hub', u'Meinert "m2j" Jordan', u'Armin "orangeshirt" K\xf6hler', u'Joshua "milleja46" Miller', - u'Stevan "StevanP" Pettit', u'Mattias "mahfiaz" P\xf5ldaru', + u'Stevan "ElderP" Pettit', u'Mattias "mahfiaz" P\xf5ldaru', u'Christian "crichter" Richter', u'Philip "Phill" Ridout', u'Simon "samscudder" Scudder', u'Jeffrey "whydoubt" Smith', u'Maikel Stuivenberg', u'Frode "frodus" Woldsund'] @@ -125,7 +125,7 @@ class Ui_AboutDialog(object): packagers = ['Thomas "tabthorpe" Abthorpe (FreeBSD)', u'Tim "TRB143" Bentley (Fedora)', u'Matthias "matthub" Hub (Mac OS X)', - u'Stevan "StevanP" Pettit (Windows)', + u'Stevan "ElderP" Pettit (Windows)', u'Raoul "superfly" Snyman (Ubuntu)'] translators = { u'af': [u'Johan "nuvolari" Mynhardt'], diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 510a94dfd..609c02efa 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -27,13 +27,15 @@ import logging import os -import sys +import sys, string from tempfile import gettempdir +from datetime import datetime from PyQt4 import QtCore, QtGui from openlp.core.lib import Renderer, build_icon, OpenLPDockWidget, \ - PluginManager, Receiver, translate, ImageManager, PluginStatus + PluginManager, Receiver, translate, ImageManager, PluginStatus, \ + SettingsManager from openlp.core.lib.ui import UiStrings, base_action, checkable_action, \ icon_action, shortcut_action from openlp.core.ui import AboutForm, SettingsForm, ServiceManager, \ @@ -213,7 +215,7 @@ class Ui_MainWindow(object): self.mediaManagerDock.isVisible(), UiStrings().View) self.viewThemeManagerItem = shortcut_action(mainWindow, u'viewThemeManagerItem', [QtGui.QKeySequence(u'F10')], - self.toggleThemeManager, u':/system/system_thememanager.png', + self.toggleThemeManager, u':/system/system_thememanager.png', self.themeManagerDock.isVisible(), UiStrings().View) self.viewServiceManagerItem = shortcut_action(mainWindow, u'viewServiceManagerItem', [QtGui.QKeySequence(u'F9')], @@ -283,6 +285,12 @@ class Ui_MainWindow(object): self.settingsConfigureItem = icon_action(mainWindow, u'settingsConfigureItem', u':/system/system_settings.png', category=UiStrings().Settings) + self.settingsImportItem = icon_action(mainWindow, + u'settingsImportItem', u':/general/general_import.png', + category=UiStrings().Settings) + self.settingsExportItem = icon_action(mainWindow, + u'settingsExportItem', u':/general/general_export.png', + category=UiStrings().Settings) action_list.add_category(UiStrings().Help, CategoryOrder.standardMenu) self.aboutItem = shortcut_action(mainWindow, u'aboutItem', [QtGui.QKeySequence(u'Ctrl+F1')], self.onAboutItemClicked, @@ -324,12 +332,14 @@ class Ui_MainWindow(object): add_actions(self.settingsMenu, (self.settingsPluginListItem, self.settingsLanguageMenu.menuAction(), None, self.settingsConfigureItem, self.settingsShortcutsItem, - self.formattingTagItem)) + self.formattingTagItem, None, + self.settingsImportItem, self.settingsExportItem)) else: add_actions(self.settingsMenu, (self.settingsPluginListItem, self.settingsLanguageMenu.menuAction(), None, self.formattingTagItem, self.settingsShortcutsItem, - self.settingsConfigureItem)) + self.settingsConfigureItem, None, + self.settingsImportItem, self.settingsExportItem)) add_actions(self.toolsMenu, (self.toolsAddToolItem, None)) add_actions(self.toolsMenu, (self.toolsOpenDataFolder, None)) add_actions(self.toolsMenu, (self.toolsFirstTimeWizard, None)) @@ -356,6 +366,7 @@ class Ui_MainWindow(object): self.importLanguageItem.setVisible(False) self.exportLanguageItem.setVisible(False) self.setLockPanel(panelLocked) + self.settingsImported = False def retranslateUi(self, mainWindow): """ @@ -419,6 +430,10 @@ class Ui_MainWindow(object): translate('OpenLP.MainWindow', '&Configure Formatting Tags...')) self.settingsConfigureItem.setText( translate('OpenLP.MainWindow', '&Configure OpenLP...')) + self.settingsExportItem.setText( + translate('OpenLP.MainWindow', 'Export Settings')) + self.settingsImportItem.setText( + translate('OpenLP.MainWindow', 'Import Settings')) self.viewMediaManagerItem.setText( translate('OpenLP.MainWindow', '&Media Manager')) self.viewMediaManagerItem.setToolTip( @@ -522,8 +537,10 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): # (not for use by plugins) self.uiSettingsSection = u'user interface' self.generalSettingsSection = u'general' - self.serviceSettingsSection = u'servicemanager' + self.advancedlSettingsSection = u'advanced' + self.servicemanagerSettingsSection = u'servicemanager' self.songsSettingsSection = u'songs' + self.themesSettingsSection = u'themes' self.serviceNotSaved = False self.aboutForm = AboutForm(self) self.settingsForm = SettingsForm(self, self) @@ -572,6 +589,10 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): QtCore.SIGNAL(u'triggered()'), self.onSettingsConfigureItemClicked) QtCore.QObject.connect(self.settingsShortcutsItem, QtCore.SIGNAL(u'triggered()'), self.onSettingsShortcutsItemClicked) + QtCore.QObject.connect(self.settingsImportItem, + QtCore.SIGNAL(u'triggered()'), self.onSettingsImportItemClicked) + QtCore.QObject.connect(self.settingsExportItem, + QtCore.SIGNAL(u'triggered()'), self.onSettingsExportItemClicked) # i18n set signals for languages self.languageGroup.triggered.connect(LanguageManager.set_language) QtCore.QObject.connect(self.modeDefaultItem, @@ -871,6 +892,150 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): if self.shortcutForm.exec_(): self.shortcutForm.save() + def onSettingsImportItemClicked(self): + """ + Import settings from an export INI file + """ + answer = QtGui.QMessageBox.critical(self, + translate('OpenLP.MainWindow', 'Import settings?'), + translate('OpenLP.MainWindow', + 'Are you sure you want to import settings?\n\n' + 'Importing settings will make permanent changes to your current ' + 'OpenLP configuration.\n\n' + 'Importing incorrect settings may cause erratic behaviour or ' + 'OpenLP to terminate abnormally.'), + QtGui.QMessageBox.StandardButtons( + QtGui.QMessageBox.Yes | + QtGui.QMessageBox.No), + QtGui.QMessageBox.No) + if answer == QtGui.QMessageBox.No: + return + importFileName = unicode(QtGui.QFileDialog.getOpenFileName(self, + translate('OpenLP.MainWindow', 'Open File'), + '', + translate('OpenLP.MainWindow', + 'OpenLP Export Settings Files (*.ini)'))) + if not importFileName: + return + settingSections = [] + # Add main sections. + settingSections.extend([self.generalSettingsSection]) + settingSections.extend([self.advancedlSettingsSection]) + settingSections.extend([self.uiSettingsSection]) + settingSections.extend([self.servicemanagerSettingsSection]) + settingSections.extend([self.themesSettingsSection]) + settingSections.extend([u'SettingsExport']) + # Add plugin sections. + for plugin in self.pluginManager.plugins: + settingSections.extend([plugin.name]) + settings = QtCore.QSettings() + importSettings = QtCore.QSettings(importFileName, + QtCore.QSettings.IniFormat) + importKeys = importSettings.allKeys() + for sectionKey in importKeys: + # We need to handle the really bad files. + try: + section, key = string.split(sectionKey, u'/') + except: + section = u'unknown' + key = u'' + # Switch General back to lowercase. + if section == u'General': + section = u'general' + sectionKey = section + "/" + key + section = section.replace(u'_', u' ') + # Make sure it's a valid section for us. + if not section in settingSections: + QtGui.QMessageBox.critical(self, + translate('OpenLP.MainWindow', 'Import settings'), + translate('OpenLP.MainWindow', + 'The file you selected does appear to be a valid OpenLP ' + 'settings file.\n\n' + 'Section [%s] is not valid \n\n' + 'Processing has terminated and no changed have been made.' + % section), + QtGui.QMessageBox.StandardButtons( + QtGui.QMessageBox.Ok)) + return + # We have a good file, import it. + for sectionKey in importKeys: + value = importSettings.value(sectionKey) + # Get rid of the "_" we replaced the " " with. + sectionKey = sectionKey.replace(u'_', u' ') + settings.setValue(u'%s' % (sectionKey) , + QtCore.QVariant(value)) + # We must do an immediate restart or current configuration will + # overwrite what was just imported when application terminates + # normally. We need to exit without saving configuration. + QtGui.QMessageBox.information(self, + translate('OpenLP.MainWindow', 'Import settings'), + translate('OpenLP.MainWindow', + 'OpenLP will now close. Imported settings will ' + 'take place the next time you start OpenLP'), + QtGui.QMessageBox.StandardButtons( + QtGui.QMessageBox.Ok)) + self.settingsImported = True + self.cleanUp() + sys.exit() + + def onSettingsExportItemClicked(self, exportFileName=None): + """ + Export settings to an INI file + """ + if not exportFileName: + exportFileName = unicode(QtGui.QFileDialog.getSaveFileName(self, + translate('OpenLP.MainWindow', 'Export Settings File'), '', + translate('OpenLP.MainWindow', + 'OpenLP Export Settings File (*.ini)'))) + if not exportFileName: + return + self.saveSettings() + headerSection = u'SettingsExport' + settingSections = [] + # Add main sections. + settingSections.extend([self.generalSettingsSection]) + settingSections.extend([self.advancedlSettingsSection]) + settingSections.extend([self.uiSettingsSection]) + settingSections.extend([self.servicemanagerSettingsSection]) + settingSections.extend([self.themesSettingsSection]) + # Add plugin sections. + for plugin in self.pluginManager.plugins: + settingSections.extend([plugin.name]) + # Delete old file if found. + if os.path.exists(exportFileName): + os.remove(exportFileName) + settings = QtCore.QSettings() + settings.remove(headerSection) + # Get the settings. + keys = settings.allKeys() + exportSettings = QtCore.QSettings(exportFileName, + QtCore.QSettings.IniFormat) + # Add a header section. + # This is to insure it's our ini file for import. + now = datetime.now() + applicationVersion = get_application_version() + # Write INI format using Qsettings. + # Write our header. + exportSettings.beginGroup(headerSection) + exportSettings.setValue(u'Make_Changes', u'At Own RISK') + exportSettings.setValue(u'type', u'OpenLP_settings_export') + exportSettings.setValue(u'date_created', + now.strftime("%Y-%m-%d %H:%M")) + exportSettings.setValue(u'version', applicationVersion[u'full']) + exportSettings.endGroup() + # Write all the sections and keys. + for sectionKey in keys: + section, key = string.split(sectionKey, u'/') + keyValue = settings.value(sectionKey) + section = section.replace(u' ', u'_') + key = key.replace(u' ', u'_') + sectionKey = section + u"/" + key + # Change the service section to servicemanager. + if section == u'service': + sectionKey = u'servicemanager/' + key + exportSettings.setValue(sectionKey, keyValue) + return + def onModeDefaultItemClicked(self): """ Put OpenLP into "Default" view mode. @@ -923,6 +1088,9 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): """ Hook to close the main window and display windows on exit """ + # If we just did a settings import, close without saving changes. + if self.settingsImported: + event.accept() if self.serviceManagerContents.isModified(): ret = self.serviceManagerContents.saveModifiedService() if ret == QtGui.QMessageBox.Save: @@ -1120,6 +1288,9 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): """ Save the main window settings. """ + # Exit if we just did a settings import. + if self.settingsImported: + return log.debug(u'Saving QSettings') settings = QtCore.QSettings() settings.beginGroup(self.generalSettingsSection) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 0ef45af12..c1a6ddb9d 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -289,7 +289,7 @@ class ServiceManager(QtGui.QWidget): QtCore.SIGNAL(u'service_item_update'), self.serviceItemUpdate) # Last little bits of setting up self.service_theme = unicode(QtCore.QSettings().value( - self.mainwindow.serviceSettingsSection + u'/service theme', + self.mainwindow.servicemanagerSettingsSection + u'/service theme', QtCore.QVariant(u'')).toString()) self.servicePath = AppLocation.get_section_data_path(u'servicemanager') # build the drag and drop context menu @@ -370,7 +370,7 @@ class ServiceManager(QtGui.QWidget): self.mainwindow.setServiceModified(self.isModified(), self.shortFileName()) QtCore.QSettings(). \ - setValue(u'service/last file',QtCore.QVariant(fileName)) + setValue(u'servicemanager/last file',QtCore.QVariant(fileName)) def fileName(self): """ @@ -428,14 +428,15 @@ class ServiceManager(QtGui.QWidget): self.mainwindow, translate('OpenLP.ServiceManager', 'Open File'), SettingsManager.get_last_dir( - self.mainwindow.serviceSettingsSection), + self.mainwindow.servicemanagerSettingsSection), translate('OpenLP.ServiceManager', 'OpenLP Service Files (*.osz)'))) if not fileName: return False else: fileName = loadFile - SettingsManager.set_last_dir(self.mainwindow.serviceSettingsSection, + SettingsManager.set_last_dir( + self.mainwindow.servicemanagerSettingsSection, split_filename(fileName)[0]) self.loadFile(fileName) @@ -460,7 +461,7 @@ class ServiceManager(QtGui.QWidget): self.setFileName(u'') self.setModified(False) QtCore.QSettings(). \ - setValue(u'service/last file',QtCore.QVariant(u'')) + setValue(u'servicemanager/last file',QtCore.QVariant(u'')) def saveFile(self): """ @@ -473,7 +474,8 @@ class ServiceManager(QtGui.QWidget): (basename, extension) = os.path.splitext(file_name) service_file_name = basename + '.osd' log.debug(u'ServiceManager.saveFile - %s' % path_file_name) - SettingsManager.set_last_dir(self.mainwindow.serviceSettingsSection, + SettingsManager.set_last_dir( + self.mainwindow.servicemanagerSettingsSection, path) service = [] write_list = [] @@ -561,7 +563,7 @@ class ServiceManager(QtGui.QWidget): fileName = unicode(QtGui.QFileDialog.getSaveFileName(self.mainwindow, UiStrings().SaveService, SettingsManager.get_last_dir( - self.mainwindow.serviceSettingsSection), + self.mainwindow.servicemanagerSettingsSection), translate('OpenLP.ServiceManager', 'OpenLP Service Files (*.osz)'))) if not fileName: return False @@ -623,7 +625,7 @@ class ServiceManager(QtGui.QWidget): self.mainwindow.addRecentFile(fileName) self.setModified(False) QtCore.QSettings().setValue( - 'service/last file', QtCore.QVariant(fileName)) + 'servicemanager/last file', QtCore.QVariant(fileName)) else: critical_error_message_box( message=translate('OpenLP.ServiceManager', @@ -665,7 +667,7 @@ class ServiceManager(QtGui.QWidget): present. """ fileName = QtCore.QSettings(). \ - value(u'service/last file',QtCore.QVariant(u'')).toString() + value(u'servicemanager/last file',QtCore.QVariant(u'')).toString() if fileName: self.loadFile(fileName) @@ -1004,7 +1006,8 @@ class ServiceManager(QtGui.QWidget): self.service_theme = unicode(self.themeComboBox.currentText()) self.mainwindow.renderer.set_service_theme(self.service_theme) QtCore.QSettings().setValue( - self.mainwindow.serviceSettingsSection + u'/service theme', + self.mainwindow.servicemanagerSettingsSection + + u'/service theme', QtCore.QVariant(self.service_theme)) self.regenerateServiceItems() From 9f284d9ab20fc38f7a0121b7982e059677a5b003 Mon Sep 17 00:00:00 2001 From: Stevan Pettit Date: Thu, 18 Aug 2011 22:43:08 -0400 Subject: [PATCH 2/9] Moved export/import settings menu items from tools to file menu. Added status-tips --- openlp/core/ui/mainwindow.py | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 609c02efa..0a51c2bf3 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -285,12 +285,10 @@ class Ui_MainWindow(object): self.settingsConfigureItem = icon_action(mainWindow, u'settingsConfigureItem', u':/system/system_settings.png', category=UiStrings().Settings) - self.settingsImportItem = icon_action(mainWindow, - u'settingsImportItem', u':/general/general_import.png', - category=UiStrings().Settings) - self.settingsExportItem = icon_action(mainWindow, - u'settingsExportItem', u':/general/general_export.png', - category=UiStrings().Settings) + self.settingsImportItem = base_action(mainWindow, + u'settingsImportItem', category=UiStrings().Settings) + self.settingsExportItem = base_action(mainWindow, + u'settingsExportItem', category=UiStrings().Settings) action_list.add_category(UiStrings().Help, CategoryOrder.standardMenu) self.aboutItem = shortcut_action(mainWindow, u'aboutItem', [QtGui.QKeySequence(u'Ctrl+F1')], self.onAboutItemClicked, @@ -308,10 +306,10 @@ class Ui_MainWindow(object): u':/system/system_online_help.png', category=UiStrings().Help) self.webSiteItem = base_action( mainWindow, u'webSiteItem', category=UiStrings().Help) - add_actions(self.fileImportMenu, - (self.importThemeItem, self.importLanguageItem)) - add_actions(self.fileExportMenu, - (self.exportThemeItem, self.exportLanguageItem)) + add_actions(self.fileImportMenu, (self.settingsImportItem, None, + self.importThemeItem, self.importLanguageItem)) + add_actions(self.fileExportMenu, (self.settingsExportItem, None, + self.exportThemeItem, self.exportLanguageItem)) add_actions(self.fileMenu, (self.fileNewItem, self.fileOpenItem, self.fileSaveItem, self.fileSaveAsItem, None, self.recentFilesMenu.menuAction(), None, self.printServiceOrderItem, @@ -332,14 +330,12 @@ class Ui_MainWindow(object): add_actions(self.settingsMenu, (self.settingsPluginListItem, self.settingsLanguageMenu.menuAction(), None, self.settingsConfigureItem, self.settingsShortcutsItem, - self.formattingTagItem, None, - self.settingsImportItem, self.settingsExportItem)) + self.formattingTagItem)) else: add_actions(self.settingsMenu, (self.settingsPluginListItem, self.settingsLanguageMenu.menuAction(), None, self.formattingTagItem, self.settingsShortcutsItem, - self.settingsConfigureItem, None, - self.settingsImportItem, self.settingsExportItem)) + self.settingsConfigureItem)) add_actions(self.toolsMenu, (self.toolsAddToolItem, None)) add_actions(self.toolsMenu, (self.toolsOpenDataFolder, None)) add_actions(self.toolsMenu, (self.toolsFirstTimeWizard, None)) @@ -430,10 +426,15 @@ class Ui_MainWindow(object): translate('OpenLP.MainWindow', '&Configure Formatting Tags...')) self.settingsConfigureItem.setText( translate('OpenLP.MainWindow', '&Configure OpenLP...')) + self.settingsExportItem.setStatusTip(translate('OpenLP.MainWindow', + 'Export OpenLP settings to a specified Ini file')) self.settingsExportItem.setText( - translate('OpenLP.MainWindow', 'Export Settings')) + translate('OpenLP.MainWindow', 'Settings')) + self.settingsImportItem.setStatusTip(translate('OpenLP.MainWindow', + 'Import OpenLP settings from a specified Ini file previously ' + 'exported on this or another machine')) self.settingsImportItem.setText( - translate('OpenLP.MainWindow', 'Import Settings')) + translate('OpenLP.MainWindow', 'Settings')) self.viewMediaManagerItem.setText( translate('OpenLP.MainWindow', '&Media Manager')) self.viewMediaManagerItem.setToolTip( From 79ab8cc1c0db012396da7053a513de5d22948906 Mon Sep 17 00:00:00 2001 From: Stevan Pettit Date: Sun, 21 Aug 2011 10:05:24 -0400 Subject: [PATCH 3/9] Added code to always create a filename.INI file. --- openlp/core/ui/mainwindow.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 0a51c2bf3..0811c34bd 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -977,7 +977,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): QtGui.QMessageBox.Ok)) self.settingsImported = True self.cleanUp() - sys.exit() + sys.exit(0) def onSettingsExportItemClicked(self, exportFileName=None): """ @@ -990,6 +990,9 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): 'OpenLP Export Settings File (*.ini)'))) if not exportFileName: return + # Make sure it's an .ini file. + if not exportFileName.endswith(u'ini'): + exportFileName =+ u'.ini' self.saveSettings() headerSection = u'SettingsExport' settingSections = [] From b36a4f74d35b9804b39b6e77db43f3c87a8d142f Mon Sep 17 00:00:00 2001 From: Stevan Pettit Date: Sun, 21 Aug 2011 19:15:16 -0400 Subject: [PATCH 4/9] Fixed traceback error when adding ini to filename --- openlp/core/ui/mainwindow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 0811c34bd..ab7fe2fe4 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -992,7 +992,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): return # Make sure it's an .ini file. if not exportFileName.endswith(u'ini'): - exportFileName =+ u'.ini' + exportFileName = exportFileName + u'.ini' self.saveSettings() headerSection = u'SettingsExport' settingSections = [] From 131c9f90b56f0d393f95ed24d3eb31ecba117fc1 Mon Sep 17 00:00:00 2001 From: Stevan Pettit Date: Tue, 23 Aug 2011 08:11:41 -0400 Subject: [PATCH 5/9] Modified shutdown from sys.exit to os._exit --- openlp/core/ui/mainwindow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index ab7fe2fe4..b11769bd9 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -977,7 +977,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): QtGui.QMessageBox.Ok)) self.settingsImported = True self.cleanUp() - sys.exit(0) + os._exit(0) def onSettingsExportItemClicked(self, exportFileName=None): """ From 9b4df37a779f4221815966d0580bea935ceb1ee8 Mon Sep 17 00:00:00 2001 From: Stevan Pettit Date: Wed, 24 Aug 2011 12:17:24 -0400 Subject: [PATCH 6/9] Modified code to handle keys with _ --- openlp/core/ui/mainwindow.py | 47 ++++++++++++++++++++++++++---------- 1 file changed, 34 insertions(+), 13 deletions(-) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index b11769bd9..b9bf7ae34 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -542,6 +542,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): self.servicemanagerSettingsSection = u'servicemanager' self.songsSettingsSection = u'songs' self.themesSettingsSection = u'themes' + self.displayTagsSection = u'displayTags' + self.headerSection = u'SettingsImport' self.serviceNotSaved = False self.aboutForm = AboutForm(self) self.settingsForm = SettingsForm(self, self) @@ -925,7 +927,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): settingSections.extend([self.uiSettingsSection]) settingSections.extend([self.servicemanagerSettingsSection]) settingSections.extend([self.themesSettingsSection]) - settingSections.extend([u'SettingsExport']) + settingSections.extend([self.displayTagsSection]) + settingSections.extend([self.headerSection]) # Add plugin sections. for plugin in self.pluginManager.plugins: settingSections.extend([plugin.name]) @@ -944,7 +947,6 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): if section == u'General': section = u'general' sectionKey = section + "/" + key - section = section.replace(u'_', u' ') # Make sure it's a valid section for us. if not section in settingSections: QtGui.QMessageBox.critical(self, @@ -961,10 +963,15 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): # We have a good file, import it. for sectionKey in importKeys: value = importSettings.value(sectionKey) - # Get rid of the "_" we replaced the " " with. - sectionKey = sectionKey.replace(u'_', u' ') settings.setValue(u'%s' % (sectionKey) , QtCore.QVariant(value)) + now = datetime.now() + settings.beginGroup(self.headerSection) + settings.setValue( u'file_imported' , QtCore.QVariant(importFileName)) + settings.setValue(u'file_date_imported', + now.strftime("%Y-%m-%d %H:%M")) + settings.endGroup() + settings.sync() # We must do an immediate restart or current configuration will # overwrite what was just imported when application terminates # normally. We need to exit without saving configuration. @@ -993,8 +1000,9 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): # Make sure it's an .ini file. if not exportFileName.endswith(u'ini'): exportFileName = exportFileName + u'.ini' + temp_file = os.path.join(unicode(gettempdir()), + u'openlp', u'exportIni.tmp') self.saveSettings() - headerSection = u'SettingsExport' settingSections = [] # Add main sections. settingSections.extend([self.generalSettingsSection]) @@ -1002,17 +1010,20 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): settingSections.extend([self.uiSettingsSection]) settingSections.extend([self.servicemanagerSettingsSection]) settingSections.extend([self.themesSettingsSection]) + settingSections.extend([self.displayTagsSection]) # Add plugin sections. for plugin in self.pluginManager.plugins: settingSections.extend([plugin.name]) - # Delete old file if found. + # Delete old files if found. + if os.path.exists(temp_file): + os.remove(temp_file) if os.path.exists(exportFileName): os.remove(exportFileName) settings = QtCore.QSettings() - settings.remove(headerSection) + settings.remove(self.headerSection) # Get the settings. keys = settings.allKeys() - exportSettings = QtCore.QSettings(exportFileName, + exportSettings = QtCore.QSettings(temp_file, QtCore.QSettings.IniFormat) # Add a header section. # This is to insure it's our ini file for import. @@ -1020,10 +1031,10 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): applicationVersion = get_application_version() # Write INI format using Qsettings. # Write our header. - exportSettings.beginGroup(headerSection) - exportSettings.setValue(u'Make_Changes', u'At Own RISK') + exportSettings.beginGroup(self.headerSection) + exportSettings.setValue(u'Make_Changes', u'At_Own_RISK') exportSettings.setValue(u'type', u'OpenLP_settings_export') - exportSettings.setValue(u'date_created', + exportSettings.setValue(u'file_date_created', now.strftime("%Y-%m-%d %H:%M")) exportSettings.setValue(u'version', applicationVersion[u'full']) exportSettings.endGroup() @@ -1031,13 +1042,23 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): for sectionKey in keys: section, key = string.split(sectionKey, u'/') keyValue = settings.value(sectionKey) - section = section.replace(u' ', u'_') - key = key.replace(u' ', u'_') sectionKey = section + u"/" + key # Change the service section to servicemanager. if section == u'service': sectionKey = u'servicemanager/' + key exportSettings.setValue(sectionKey, keyValue) + exportSettings.sync() + # Temp INI file has been written. Blanks in keys are now '%20'. + # Read the temp file and output the user's INI file with blanks to + # make it more readable. + tempIni = open(temp_file, u'r') + exportIni = open(exportFileName, u'w') + for fileRecord in tempIni: + fileRecord = fileRecord.replace(u'%20', u' ') + exportIni.write(fileRecord) + tempIni.close() + exportIni.close() + os.remove(temp_file) return def onModeDefaultItemClicked(self): From d927adbe5a7f54a701d84cd15c11f5596af32449 Mon Sep 17 00:00:00 2001 From: Stevan Pettit Date: Thu, 25 Aug 2011 14:40:44 -0400 Subject: [PATCH 7/9] Changed import re-start message. Removed need for "import string" --- openlp/core/ui/mainwindow.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 00b8d6dae..1404e4206 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -27,7 +27,7 @@ import logging import os -import sys, string +import sys import shutil from tempfile import gettempdir from datetime import datetime @@ -936,8 +936,8 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): for sectionKey in importKeys: # We need to handle the really bad files. try: - section, key = string.split(sectionKey, u'/') - except: + section, key = sectionKey.split(u'/') + except ValueError: section = u'unknown' key = u'' # Switch General back to lowercase. @@ -976,7 +976,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): translate('OpenLP.MainWindow', 'Import settings'), translate('OpenLP.MainWindow', 'OpenLP will now close. Imported settings will ' - 'take place the next time you start OpenLP'), + 'be applied the next time you start OpenLP.'), QtGui.QMessageBox.StandardButtons( QtGui.QMessageBox.Ok)) self.settingsImported = True @@ -1037,7 +1037,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): exportSettings.endGroup() # Write all the sections and keys. for sectionKey in keys: - section, key = string.split(sectionKey, u'/') + section, key = sectionKey.split(u'/') keyValue = settings.value(sectionKey) sectionKey = section + u"/" + key # Change the service section to servicemanager. From 24126e74c881522271234bae7469a1104b55ba3b Mon Sep 17 00:00:00 2001 From: Stevan Pettit Date: Fri, 26 Aug 2011 09:14:12 -0400 Subject: [PATCH 8/9] Changed filetype of settings file from .ini to .conf --- openlp/core/ui/mainwindow.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 1404e4206..6dbd57511 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -914,7 +914,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): translate('OpenLP.MainWindow', 'Open File'), '', translate('OpenLP.MainWindow', - 'OpenLP Export Settings Files (*.ini)'))) + 'OpenLP Export Settings Files (*.conf)'))) if not importFileName: return settingSections = [] @@ -991,12 +991,12 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): exportFileName = unicode(QtGui.QFileDialog.getSaveFileName(self, translate('OpenLP.MainWindow', 'Export Settings File'), '', translate('OpenLP.MainWindow', - 'OpenLP Export Settings File (*.ini)'))) + 'OpenLP Export Settings File (*.conf)'))) if not exportFileName: return # Make sure it's an .ini file. - if not exportFileName.endswith(u'ini'): - exportFileName = exportFileName + u'.ini' + if not exportFileName.endswith(u'conf'): + exportFileName = exportFileName + u'.conf' temp_file = os.path.join(unicode(gettempdir()), u'openlp', u'exportIni.tmp') self.saveSettings() From 9957419f2b72d824cb165bbbce6927008b4ec81c Mon Sep 17 00:00:00 2001 From: Stevan Pettit Date: Sun, 28 Aug 2011 09:39:34 -0400 Subject: [PATCH 9/9] Changed system exit call --- openlp/core/ui/mainwindow.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openlp/core/ui/mainwindow.py b/openlp/core/ui/mainwindow.py index 6dbd57511..3fe4a777d 100644 --- a/openlp/core/ui/mainwindow.py +++ b/openlp/core/ui/mainwindow.py @@ -981,7 +981,7 @@ class MainWindow(QtGui.QMainWindow, Ui_MainWindow): QtGui.QMessageBox.Ok)) self.settingsImported = True self.cleanUp() - os._exit(0) + QtCore.QCoreApplication.exit() def onSettingsExportItemClicked(self, exportFileName=None): """