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
|
||||
from chardet.universaldetector import UniversalDetector
|
||||
import sqlite
|
||||
import sys
|
||||
|
||||
from openlp.core.lib import translate
|
||||
from openlp.plugins.songs.lib import retrieve_windows_encoding
|
||||
@ -131,7 +132,8 @@ class OpenLP1SongImport(SongImport):
|
||||
break
|
||||
if new_db:
|
||||
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)
|
||||
track_ids = cursor.fetchall()
|
||||
for track_id, listindex in track_ids:
|
||||
@ -139,7 +141,8 @@ class OpenLP1SongImport(SongImport):
|
||||
break
|
||||
for track in tracks:
|
||||
if track[0] == track_id:
|
||||
self.addMediaFile(track[1], listindex)
|
||||
media_file = self.expandMediaFile(track[1])
|
||||
self.addMediaFile(media_file, listindex)
|
||||
break
|
||||
if self.stopImportFlag:
|
||||
break
|
||||
@ -186,3 +189,22 @@ class OpenLP1SongImport(SongImport):
|
||||
return detector.result[u'encoding']
|
||||
detector.close()
|
||||
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 re
|
||||
import shutil
|
||||
import os
|
||||
|
||||
from PyQt4 import QtCore
|
||||
|
||||
from openlp.core.lib import Receiver, translate
|
||||
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.db import Song, Author, Topic, Book, MediaFile
|
||||
from openlp.plugins.songs.lib.ui import SongStrings
|
||||
@ -330,12 +333,6 @@ class SongImport(QtCore.QObject):
|
||||
last_name=authortext.split(u' ')[-1],
|
||||
first_name=u' '.join(authortext.split(u' ')[:-1]))
|
||||
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:
|
||||
song_book = self.manager.get_object_filtered(Book,
|
||||
Book.name == self.songBookName)
|
||||
@ -351,7 +348,41 @@ class SongImport(QtCore.QObject):
|
||||
if topic is None:
|
||||
topic = Topic.populate(name=topictext)
|
||||
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)
|
||||
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()
|
||||
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