make it possible to override the media folder when exporting

This commit is contained in:
Damien Elmes 2012-08-09 14:07:31 +09:00
parent 9cc6ab9685
commit 7c2e9ece1c

View file

@ -2,7 +2,7 @@
# Copyright: Damien Elmes <anki@ichi2.net> # Copyright: Damien Elmes <anki@ichi2.net>
# License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html
import itertools, time, re, os, HTMLParser, zipfile import itertools, time, re, os, HTMLParser, zipfile, shutil
from operator import itemgetter from operator import itemgetter
from anki.cards import Card from anki.cards import Card
from anki.lang import _ from anki.lang import _
@ -194,6 +194,7 @@ class AnkiExporter(Exporter):
for file in self.src.media.filesInStr(mid, flds): for file in self.src.media.filesInStr(mid, flds):
media[file] = True media[file] = True
self.mediaFiles = media.keys() self.mediaFiles = media.keys()
self.mediaDir = self.src.media.dir()
self.dst.crt = self.src.crt self.dst.crt = self.src.crt
# todo: tags? # todo: tags?
self.count = self.dst.cardCount() self.count = self.dst.cardCount()
@ -225,11 +226,13 @@ class AnkiPackageExporter(AnkiExporter):
z = zipfile.ZipFile(path, "w", zipfile.ZIP_DEFLATED) z = zipfile.ZipFile(path, "w", zipfile.ZIP_DEFLATED)
z.write(colfile, "collection.anki2") z.write(colfile, "collection.anki2")
# and media # and media
self.prepareMedia()
media = {} media = {}
for c, file in enumerate(self.mediaFiles): for c, file in enumerate(self.mediaFiles):
c = str(c) c = str(c)
if os.path.exists(file): mpath = os.path.join(self.mediaDir, file)
z.write(file, c) if os.path.exists(mpath):
z.write(mpath, c)
media[c] = file media[c] = file
# media map # media map
z.writestr("media", json.dumps(media)) z.writestr("media", json.dumps(media))
@ -237,7 +240,12 @@ class AnkiPackageExporter(AnkiExporter):
# tidy up intermediate files # tidy up intermediate files
os.unlink(colfile) os.unlink(colfile)
os.unlink(path.replace(".apkg", ".media.db")) os.unlink(path.replace(".apkg", ".media.db"))
os.rmdir(path.replace(".apkg", ".media")) shutil.rmtree(path.replace(".apkg", ".media"))
def prepareMedia(self):
# chance to move each file in self.mediaFiles into place before media
# is zipped up
pass
# Export modules # Export modules
########################################################################## ##########################################################################