support media for memory backed files

This commit is contained in:
Damien Elmes 2009-01-04 07:40:05 +09:00
parent c973c1eb4f
commit 9765fdae73
3 changed files with 37 additions and 12 deletions

View file

@ -113,6 +113,7 @@ class Deck(object):
self.s = None
def _initVars(self):
self.tmpMediaDir = None
self.lastTags = u""
self.lastLoaded = time.time()
self.undoEnabled = False
@ -1360,17 +1361,22 @@ where id = :id""", pending)
def mediaDir(self, create=False):
"Return the media directory if exists. None if couldn't create."
if not self.path:
return None
dir = re.sub("(?i)\.(anki)$", ".media", self.path)
if not os.path.exists(dir) and create:
try:
os.mkdir(dir)
# change to the current dir
os.chdir(dir)
except OSError:
# permission denied
return None
if self.path:
# file-backed
dir = re.sub("(?i)\.(anki)$", ".media", self.path)
if not os.path.exists(dir) and create:
try:
os.mkdir(dir)
# change to the current dir
os.chdir(dir)
except OSError:
# permission denied
return None
else:
# memory-backed; need temp store
if not self.tmpMediaDir and create:
self.tmpMediaDir = tempfile.mkdtemp()
dir = self.tmpMediaDir
if not os.path.exists(dir):
return None
return dir
@ -2140,7 +2146,6 @@ where interval < 1""")
deck.delay2 = 0.0
deck.version = 15
if deck.version < 16:
#DeckStorage._addViews(deck)
deck.version = 16
if deck.version < 17:
deck.s.statement("drop view if exists acqCards")

1
tests/deck/fake.png Normal file
View file

@ -0,0 +1 @@
abc

View file

@ -12,6 +12,8 @@ from anki.stdmodels import JapaneseModel, BasicModel
newPath = None
newModified = None
testDir = os.path.dirname(__file__)
## opening/closing
def test_new():
@ -131,3 +133,20 @@ def test_modelAddDelete():
deck.deleteModel(deck.currentModel)
assert deck.cardCount == 0
deck.s.refresh(deck)
def test_media():
deck = DeckStorage.Deck()
# create a media dir
deck.mediaDir(create=True)
# put a file into it
file = unicode(os.path.join(testDir, "deck/fake.png"))
deck.addMedia(file)
# make sure it gets copied on saveas
path = "/tmp/saveAs2.anki"
sum = "0bee89b07a248e27c83fc3d5951213c1.png"
try:
os.unlink(path)
except OSError:
pass
deck.saveAs(path)
assert os.path.exists("/tmp/saveAs2.media/%s" % sum)