mirror of
https://github.com/ankitects/anki.git
synced 2025-12-10 21:36:55 -05:00
support media for memory backed files
This commit is contained in:
parent
c973c1eb4f
commit
9765fdae73
3 changed files with 37 additions and 12 deletions
29
anki/deck.py
29
anki/deck.py
|
|
@ -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
1
tests/deck/fake.png
Normal file
|
|
@ -0,0 +1 @@
|
|||
abc
|
||||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in a new issue