forked from openlp/openlp
Added support for copying files from openlp.org 1.2.x.
This commit is contained in:
parent
75fda95339
commit
906b0fe67e
@ -32,6 +32,7 @@ openlp.org 1.x song databases into the current installation database.
|
|||||||
import logging
|
import logging
|
||||||
from chardet.universaldetector import UniversalDetector
|
from chardet.universaldetector import UniversalDetector
|
||||||
import sqlite
|
import sqlite
|
||||||
|
import sys
|
||||||
|
|
||||||
from openlp.core.lib import translate
|
from openlp.core.lib import translate
|
||||||
from openlp.plugins.songs.lib import retrieve_windows_encoding
|
from openlp.plugins.songs.lib import retrieve_windows_encoding
|
||||||
@ -131,7 +132,8 @@ class OpenLP1SongImport(SongImport):
|
|||||||
break
|
break
|
||||||
if new_db:
|
if new_db:
|
||||||
cursor.execute(u'-- types int, unicode, int')
|
cursor.execute(u'-- types int, unicode, int')
|
||||||
cursor.execute(u'SELECT trackid, fulltrackname, listindex FROM songtracks '
|
cursor.execute(u'SELECT trackid, fulltrackname, listindex '
|
||||||
|
u'FROM songtracks '
|
||||||
u'WHERE songid = %s ORDER BY listindex' % song_id)
|
u'WHERE songid = %s ORDER BY listindex' % song_id)
|
||||||
track_ids = cursor.fetchall()
|
track_ids = cursor.fetchall()
|
||||||
for track_id, listindex in track_ids:
|
for track_id, listindex in track_ids:
|
||||||
@ -139,7 +141,8 @@ class OpenLP1SongImport(SongImport):
|
|||||||
break
|
break
|
||||||
for track in tracks:
|
for track in tracks:
|
||||||
if track[0] == track_id:
|
if track[0] == track_id:
|
||||||
self.addMediaFile(track[1], listindex)
|
media_file = self.expandMediaFile(track[1])
|
||||||
|
self.addMediaFile(media_file, listindex)
|
||||||
break
|
break
|
||||||
if self.stopImportFlag:
|
if self.stopImportFlag:
|
||||||
break
|
break
|
||||||
@ -186,3 +189,22 @@ class OpenLP1SongImport(SongImport):
|
|||||||
return detector.result[u'encoding']
|
return detector.result[u'encoding']
|
||||||
detector.close()
|
detector.close()
|
||||||
return retrieve_windows_encoding(detector.result[u'encoding'])
|
return retrieve_windows_encoding(detector.result[u'encoding'])
|
||||||
|
|
||||||
|
def expandMediaFile(self, filename):
|
||||||
|
"""
|
||||||
|
When you're on Windows, this function expands the file name to include
|
||||||
|
the path to OpenLP's application data directory. If you are not on
|
||||||
|
Windows, it returns the original file name.
|
||||||
|
|
||||||
|
``filename``
|
||||||
|
The filename to expand.
|
||||||
|
"""
|
||||||
|
if sys.platform != u'win32' and \
|
||||||
|
not os.environ.get(u'ALLUSERSPROFILE') and \
|
||||||
|
not os.environ.get(u'APPDATA'):
|
||||||
|
return filename
|
||||||
|
common_app_data = os.path.join(os.environ[u'ALLUSERSPROFILE'],
|
||||||
|
os.path.split(os.environ[u'APPDATA'])[1])
|
||||||
|
if not common_app_data:
|
||||||
|
return filename
|
||||||
|
return os.path.join(common_app_data, u'openlp.org', 'Audio', filename)
|
||||||
|
@ -26,11 +26,14 @@
|
|||||||
###############################################################################
|
###############################################################################
|
||||||
import logging
|
import logging
|
||||||
import re
|
import re
|
||||||
|
import shutil
|
||||||
|
import os
|
||||||
|
|
||||||
from PyQt4 import QtCore
|
from PyQt4 import QtCore
|
||||||
|
|
||||||
from openlp.core.lib import Receiver, translate
|
from openlp.core.lib import Receiver, translate
|
||||||
from openlp.core.ui.wizard import WizardStrings
|
from openlp.core.ui.wizard import WizardStrings
|
||||||
|
from openlp.core.utils import AppLocation
|
||||||
from openlp.plugins.songs.lib import clean_song, VerseType
|
from openlp.plugins.songs.lib import clean_song, VerseType
|
||||||
from openlp.plugins.songs.lib.db import Song, Author, Topic, Book, MediaFile
|
from openlp.plugins.songs.lib.db import Song, Author, Topic, Book, MediaFile
|
||||||
from openlp.plugins.songs.lib.ui import SongStrings
|
from openlp.plugins.songs.lib.ui import SongStrings
|
||||||
@ -330,12 +333,6 @@ class SongImport(QtCore.QObject):
|
|||||||
last_name=authortext.split(u' ')[-1],
|
last_name=authortext.split(u' ')[-1],
|
||||||
first_name=u' '.join(authortext.split(u' ')[:-1]))
|
first_name=u' '.join(authortext.split(u' ')[:-1]))
|
||||||
song.authors.append(author)
|
song.authors.append(author)
|
||||||
for filename, weight in self.mediaFiles:
|
|
||||||
media_file = self.manager.get_object_filtered(MediaFile,
|
|
||||||
MediaFile.file_name == filename)
|
|
||||||
if not media_file:
|
|
||||||
song.media_files.append(
|
|
||||||
MediaFile.populate(file_name=filename, weight=weight))
|
|
||||||
if self.songBookName:
|
if self.songBookName:
|
||||||
song_book = self.manager.get_object_filtered(Book,
|
song_book = self.manager.get_object_filtered(Book,
|
||||||
Book.name == self.songBookName)
|
Book.name == self.songBookName)
|
||||||
@ -351,7 +348,41 @@ class SongImport(QtCore.QObject):
|
|||||||
if topic is None:
|
if topic is None:
|
||||||
topic = Topic.populate(name=topictext)
|
topic = Topic.populate(name=topictext)
|
||||||
song.topics.append(topic)
|
song.topics.append(topic)
|
||||||
|
# We need to save the song now, before adding the media files, so that
|
||||||
|
# we know where to save the media files to.
|
||||||
clean_song(self.manager, song)
|
clean_song(self.manager, song)
|
||||||
self.manager.save_object(song)
|
self.manager.save_object(song)
|
||||||
|
# Now loop through the media files, copy them to the correct location,
|
||||||
|
# and save the song again.
|
||||||
|
for filename, weight in self.mediaFiles:
|
||||||
|
media_file = self.manager.get_object_filtered(MediaFile,
|
||||||
|
MediaFile.file_name == filename)
|
||||||
|
if not media_file:
|
||||||
|
if os.path.dirname(filename):
|
||||||
|
filename = self.copyMediaFile(filename)
|
||||||
|
song.media_files.append(
|
||||||
|
MediaFile.populate(file_name=filename, weight=weight)
|
||||||
|
)
|
||||||
|
self.manager.save_object(song)
|
||||||
self.setDefaults()
|
self.setDefaults()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def copyMediaFile(self, filename):
|
||||||
|
"""
|
||||||
|
This method copies the media file to the correct location and returns
|
||||||
|
the new file location.
|
||||||
|
|
||||||
|
``filename``
|
||||||
|
The file to copy.
|
||||||
|
"""
|
||||||
|
if not hasattr(self, u'save_path'):
|
||||||
|
self.save_path = os.path.join(
|
||||||
|
AppLocation.get_section_data_path(self.mediaitem.plugin.name),
|
||||||
|
'audio', str(self.song.id))
|
||||||
|
if not os.path.exists(self.save_path):
|
||||||
|
os.makedirs(self.save_path)
|
||||||
|
if not filename.startswith(save_path):
|
||||||
|
oldfile, filename = filename, os.path.join(save_path,
|
||||||
|
os.path.split(filename)[1])
|
||||||
|
shutil.copyfile(oldfile, filename)
|
||||||
|
return filename
|
||||||
|
Loading…
Reference in New Issue
Block a user