diff --git a/documentation/manual/source/dualmonitors.rst b/documentation/manual/source/dualmonitors.rst index ee4bc90a2..9a021223b 100644 --- a/documentation/manual/source/dualmonitors.rst +++ b/documentation/manual/source/dualmonitors.rst @@ -4,11 +4,11 @@ Dual Monitor Setup The first step in getting OpenLP working on your system is to setup your computer properly for dual monitors. This is not very difficult, but the steps -do vary depending on operating system. +will vary depending on operating system. -Most modern computers do have the ability for dual monitors. To be certain +Most modern computers have the ability for dual monitors. To be certain, check your computer's documentation. A typical desktop computer capable of dual -monitors will have two of, or a combination of the two connectors below. +monitors will have two of, or a combination of the two, connectors below. **VGA** @@ -18,8 +18,8 @@ monitors will have two of, or a combination of the two connectors below. .. image:: pics/dvi.png -A laptop computer setup only varies slightly, generally you will need only one -of outputs pictured above since your laptops screen serves as one of the +A laptop computer setup only varies slightly. Generally you will need only one +of the outputs pictured above since your laptop screen serves as one of the monitors. Sometimes with older laptops a key stroke generally involving the :kbd:`Fn` key and another key is required to enable the second monitor on laptops. @@ -27,9 +27,10 @@ laptops. Some computers also incorporate the use of :abbr:`S-Video (Separate Video)` or :abbr:`HDMI (High-Definition Multimedia Interface)` connections. -A typical OpenLP set up consist of your normal single monitor setup, with your -projector setup as the second monitor. With the option of extending your -desktop across the second monitor, or your operating system's equivalent. +A typical OpenLP setup consist of your normal single monitor, with your +projector hooked up to your computer as the second monitor. With the option of +extending your desktop across the second monitor, or your operating system's +equivalent. Microsoft Windows ----------------- @@ -46,8 +47,8 @@ press :kbd:`Windows+P`. The more traditional way is also fairly straight forward. Go to :guilabel:`Control Panel` and click on :guilabel:`Display`. This will open up -the :guilabel:`Display` dialog. You can also bypass this step by right click on -a blank area on your desktop and selecting :guilabel:`Resolution`. +the :guilabel:`Display` dialog. You may also bypass this step by a right click +on a blank area on your desktop and selecting :guilabel:`Resolution`. .. image:: pics/winsevendisplay.png @@ -66,7 +67,7 @@ a blank place on the desktop and click :guilabel:`Personalization`. .. image:: pics/vistapersonalize.png From the :guilabel:`Personalization` window click on :guilabel:`Display -Settings`. Then enable the montior that represents your projector and make sure +Settings`. Click on the montior that represents your projector and make sure you have checked :guilabel:`Extend the desktop onto this monitor`. .. image:: pics/vistadisplaysettings.png @@ -77,7 +78,7 @@ Windows XP From :guilabel:`Control Panel` select :guilabel:`Display`, or right click on a blank area of the desktop and select :guilabel:`Properties`. From the :guilabel:`Display Properties` window click on the :guilabel:`Settings` tab. -Then click on the monitor that represents your projector and make sure you have +Click on the monitor that represents your projector and make sure you have checked :guilabel:`Extend my Windows desktop onto this monitor`. .. image:: pics/xpdisplaysettings.png @@ -87,7 +88,7 @@ Linux Due to the vast varieties of hardware, distributions, desktops, and drivers this is not an exhaustive guide to dual monitor setup on Linux. This guide -assumes that you have properly set up any proprietary drivers if needed. You +assumes you have properly set up any proprietary drivers if needed. You should seek out your distributions documentation if this general guide does not work. @@ -123,7 +124,8 @@ Linux Systems Using nVidia Drivers This guide is for users of the proprietary nVidia driver on Linux Distributions. It is assumed that you have properly setup your drivers according to your -distribution's documentation, and you have a working ``xorg.conf`` file in place. +distribution's documentation, and you have a working ``xorg.conf`` file in +place. If you wish to make the changes permanent in setting up your system for dual monitors it will be necessary to modify your ``xorg.conf`` file. It is always a @@ -166,7 +168,7 @@ After clicking :guilabel:`Configure`, select :guilabel:`TwinView`. Then click .. image:: pics/twinview.png -Then click :guilabel:`Apply` and if you are happy with the way things look click +Click :guilabel:`Apply` and if you are happy with the way things look click :guilabel:`Keep` to keep your new settings. Don't worry if all goes wrong the settings will return back to the previous settings in 15 seconds without any action. nVidia Settings should take care of selecting your optimum resolution @@ -175,6 +177,6 @@ on :guilabel:`Save to X Configuration File`. .. image:: pics/xorgwrite.png -Then click :guilabel:`Save` and you should be set. You may want to restart X or +Click :guilabel:`Save` and you should be set. You may want to restart X or your machine just to make sure all the settings carry over the next time you log in. diff --git a/documentation/manual/source/glossary.rst b/documentation/manual/source/glossary.rst index 6f4ebcdd6..ab6c7880e 100644 --- a/documentation/manual/source/glossary.rst +++ b/documentation/manual/source/glossary.rst @@ -18,7 +18,7 @@ The Main Window contains all the tools and plugins that make OpenLP function Media Manager ------------- -The Media Manager contains a number of tabs that plugins supply to OpenLP. +The Media Manager contains a number of tabs the plugins supply to OpenLP. Each tab in the Media Manager is called a **Media Item** .. image:: pics/mediamanager.png @@ -36,20 +36,20 @@ with them. Service File ------------ -A service file, is the file that is created when you save your work on OpenLP. +A service file is the file that is created when you save your service in OpenLP. The service file consist of **Service Items** Service Item ------------ -A service item are the **media items** that are in the **service manager** +Service items are the **media items** that are in the **service manager** Service Manger -------------- The service manager contains the media items in your service file. This is the -area from which your media items go live, and you can also save, open, and edit -services files. +area where your media items go live. You can also save, open, and edit +services files from here. .. image:: pics/servicemanager.png @@ -65,6 +65,6 @@ Theme Manager ------------- The theme manager is where themes are created and edited. Themes are the text -styles backgrounds that you use to personalize your services. +styles and backgrounds that you use to personalize your services. .. image:: pics/thememanager.png diff --git a/documentation/manual/source/index.rst b/documentation/manual/source/index.rst index 378cfe2a0..36bcf2cc1 100644 --- a/documentation/manual/source/index.rst +++ b/documentation/manual/source/index.rst @@ -15,5 +15,4 @@ Contents: glossary dualmonitors mediamanager - songs - + songs \ No newline at end of file diff --git a/documentation/manual/source/songs.rst b/documentation/manual/source/songs.rst index 678a6206c..91e5539c2 100644 --- a/documentation/manual/source/songs.rst +++ b/documentation/manual/source/songs.rst @@ -8,26 +8,26 @@ converters provided to get data from other formats into OpenLP. Song Importer ============= -If you are using an earlier version of OpenLP or come from another software +If you are using an earlier version of OpenLP or, come from another software package, you may be able to convert your existing database to work in OpenLP -2.0. To access the Song Importer :menuselection:`File --> Import --> Song`. -You will then see the Song Importer window, then click :guilabel:`Next`. +2.0. To access the Song Importer click :menuselection:`File --> Import --> Song`. +You will see the Song Importer window, then click :guilabel:`Next`. .. image:: pics/songimporter.png -After choosing :guilabel:`Next` you can then select from the various types of +After choosing :guilabel:`Next` you can select from the various types of software that OpenLP will convert songs from. .. image:: pics/songimporterchoices.png -Then click on the file folder icon to choose the file of the song database you +Click on the file folder icon to choose the file of the song database you want to import. See the following sections for information on the different formats that OpenLP will import. Importing from OpenLP Version 1 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Converting from OpenLP Version 1 is a pretty simple process. You will first +Converting from OpenLP Version 1 is a simple process. First you will need to locate your version 1 database file. Windows XP:: @@ -38,33 +38,34 @@ Windows Vista / Windows 7:: C:\ProgramData\openlp.org\Data\songs.olp -After clicking :guilabel:`Next` your conversion should be complete. +After clicking :guilabel:`Next` your conversion will be complete. .. image:: pics/finishedimport.png -Then press :guilabel:`Finish` and you should now be ready to use your OpenLP -version one songs. +Press :guilabel:`Finish` and you will now be ready to use your OpenLP +version 1 songs. Importing from OpenSong ^^^^^^^^^^^^^^^^^^^^^^^ -Converting from OpenSong you will need to locate your songs database. In the +Converting from OpenSong, you will need to locate your songs database. In the later versions of OpenSong you are asked to define the location of this. The -songs will be located in a folder named :guilabel:`Songs`. This folder should -contain files with all your songs in them without a file extension. (file.xxx). -When you have located this folder you will then need to select the songs from +songs will be located in a folder named :guilabel:`Songs`. This folder will +contain files with all your songs in them, without a file extension. (file.xxx). +When you have located this folder you will need to select the songs from the folder. .. image:: pics/selectsongs.png -On most operating systems to select all the songs, first select the first song -in the lest then press shift and select the last song in the list. After this -press :guilabel:`Next` and you should see that your import has been successful. +On most operating systems, to select all the songs, first select the first song +in the list, press the shift key, and select the last song in the list. After +this press :guilabel:`Next` and you will see that your import has been +successful. .. image:: pics/finishedimport.png -Press :guilabel:`Finish` and you will now be ready to use your songs imported -from OpenSong. +Press :guilabel:`Finish` and OpenLP will be ready to use your songs that you +imported from OpenSong. Importing from CCLI Song Select ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -79,22 +80,23 @@ Then search for your desired song. For this example we will be adding the song .. image:: pics/songselectsongsearch.png -For the song you are searching for select `lyrics` This should take you to a -page displaying the lyrics and copyright info for your song. +For the song you are searching for, select `lyrics` This will take you to a +page displaying the lyrics and copyright information for your song. .. image:: pics/songselectlyrics.png -Next, hover over the :guilabel:`Lyrics` menu from the upper right corner. Then -choose either the .txt or .usr file. You will then be asked to chose a download +Next, hover over the :guilabel:`Lyrics` menu from the upper right corner. +Choose either the .txt or .usr file. You will be asked to chose a download location if your browser does not automatically select that for you. Select this file from the OpenLP import window and then click :guilabel:`Next` You can also select multiple songs for import at once on most operating systems by -selecting the first item in the list then holding shift select the last item in -the list. When finished you should see that your import has completed. +selecting the first item in the list then holding the shift key and select the +last item in the list. When finished, you will see that your import has +completed. .. image:: pics/finishedimport.png -Press :guilabel:`Finish` and you will now be ready to use your songs imported +Press :guilabel:`Finish` and OpenLP will be ready to use your songs imported from CCLI SongSelect. diff --git a/openlp/core/lib/mediamanageritem.py b/openlp/core/lib/mediamanageritem.py index e3bb4ae0f..ceaad2d46 100644 --- a/openlp/core/lib/mediamanageritem.py +++ b/openlp/core/lib/mediamanageritem.py @@ -349,11 +349,11 @@ class MediaManagerItem(QtGui.QWidget): Validates whether an image still exists and, if it does, is the thumbnail representation of the image up to date. """ - if not os.path.exists(image): + if not os.path.exists(unicode(image)): return False if os.path.exists(thumb): - imageDate = os.stat(image).st_mtime - thumbDate = os.stat(thumb).st_mtime + imageDate = os.stat(unicode(image)).st_mtime + thumbDate = os.stat(unicode(thumb)).st_mtime # If image has been updated rebuild icon if imageDate > thumbDate: self.iconFromFile(image, thumb) diff --git a/openlp/core/ui/servicemanager.py b/openlp/core/ui/servicemanager.py index 3cdf25c7a..fa2bc50f5 100644 --- a/openlp/core/ui/servicemanager.py +++ b/openlp/core/ui/servicemanager.py @@ -415,47 +415,75 @@ class ServiceManager(QtGui.QWidget): """ if not self.fileName(): return self.saveFileAs() - else: - fileName = self.fileName() - log.debug(u'ServiceManager.saveFile - %s' % fileName) - SettingsManager.set_last_dir(self.mainwindow.serviceSettingsSection, - split_filename(fileName)[0]) - service = [] - serviceFileName = fileName.replace(u'.osz', u'.osd') - zip = None - file = None - try: - write_list = [] - zip = zipfile.ZipFile(unicode(fileName), 'w') - for item in self.serviceItems: - service.append({u'serviceitem': \ - item[u'service_item'].get_service_repr()}) - if item[u'service_item'].uses_file(): - for frame in item[u'service_item'].get_frames(): - if item[u'service_item'].is_image(): - path_from = frame[u'path'] - else: - path_from = unicode(os.path.join( - frame[u'path'], - frame[u'title'])) - # On write a file once - if not path_from in write_list: - write_list.append(path_from) - zip.write(path_from.encode(u'utf-8')) - file = open(serviceFileName, u'wb') - cPickle.dump(service, file) - file.close() - zip.write(serviceFileName.encode(u'utf-8')) - except IOError: - log.exception(u'Failed to save service to disk') - finally: - if file: - file.close() - if zip: - zip.close() - delete_file(serviceFileName) - self.mainwindow.addRecentFile(fileName) - self.setModified(False) + path_file_name = unicode(self.fileName()) + (path, file_name) = os.path.split(path_file_name) + (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, + path) + service = [] + write_list = [] + total_size = 0 + for item in self.serviceItems: + service.append({u'serviceitem': + item[u'service_item'].get_service_repr()}) + if not item[u'service_item'].uses_file(): + continue + for frame in item[u'service_item'].get_frames(): + if item[u'service_item'].is_image(): + path_from = frame[u'path'] + else: + path_from = os.path.join(frame[u'path'], frame[u'title']) + # Only write a file once + if path_from in write_list: + continue + file_size = os.path.getsize(path_from) + size_limit = 52428800 # 50MiB + #if file_size > size_limit: + # # File exeeds size_limit bytes, ask user + # message = unicode(translate('OpenLP.ServiceManager', + # 'Do you want to include \n%.1f MB file "%s"\n' + # 'into the service file?\nThis may take some time.\n\n' + # 'Please note that you need to\ntake care of that file' + # ' yourself,\nif you leave it out.')) % \ + # (file_size/1048576, os.path.split(path_from)[1]) + # ans = QtGui.QMessageBox.question(self.mainwindow, + # translate('OpenLP.ServiceManager', 'Including Large ' + # 'File'), message, QtGui.QMessageBox.StandardButtons( + # QtGui.QMessageBox.Ok|QtGui.QMessageBox.Cancel), + # QtGui.QMessageBox.Ok) + # if ans == QtGui.QMessageBox.Cancel: + # continue + write_list.append(path_from) + total_size += file_size + log.debug(u'ServiceManager.saveFile - ZIP contents size is %i bytes' % + total_size) + service_content = cPickle.dumps(service) + # Usual Zip file cannot exceed 2GiB, file with Zip64 cannot be + # extracted using unzip in UNIX. + allow_zip_64 = (total_size > 2147483648 + len(service_content)) + log.debug(u'ServiceManager.saveFile - allowZip64 is %s' % + allow_zip_64) + zip = None + try: + zip = zipfile.ZipFile(path_file_name, 'w', zipfile.ZIP_STORED, + allow_zip_64) + # First we add service contents. + # We save ALL filenames into ZIP using UTF-8. + zip.writestr(service_file_name.encode(u'utf-8'), + service_content) + # Finally add all the listed media files. + for path_from in write_list: + zip.write(path_from, path_from.encode(u'utf-8')) + except IOError: + log.exception(u'Failed to save service to disk') + return False + finally: + if zip: + zip.close() + self.mainwindow.addRecentFile(path_file_name) + self.setModified(False) return True def saveFileAs(self):