From 0d6064b933525f39a43df39bf606aa856bb5aa77 Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Sun, 24 Apr 2011 10:01:03 +0900 Subject: [PATCH] rename() --- anki/deck.py | 15 ++++++++++++++- anki/media.py | 13 +++++++++++-- tests/test_media.py | 9 +++++++++ 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/anki/deck.py b/anki/deck.py index c0c228eb1..046788f4e 100644 --- a/anki/deck.py +++ b/anki/deck.py @@ -2,7 +2,7 @@ # Copyright: Damien Elmes # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html -import time, os, random, re, stat, simplejson, datetime, copy +import time, os, random, re, stat, simplejson, datetime, copy, shutil from anki.lang import _, ngettext from anki.utils import parseTags, ids2str, hexifyID, \ checksum, fieldChecksum, addTags, delTags, stripHTML, intTime, \ @@ -178,6 +178,19 @@ qconf=?, conf=?, data=?""", self.sched.onClose() self.dty = False + def rename(self, path): + # close our DB connection + self.close() + # move to new path + shutil.copy2(self.path, path) + os.unlink(self.path) + # record old dir + olddir = self.media.dir() + # reconnect & move media + self.path = path + self.reopen() + self.media.move(olddir) + # Object creation helpers ########################################################################## diff --git a/anki/media.py b/anki/media.py index c32b19860..d612bbec7 100644 --- a/anki/media.py +++ b/anki/media.py @@ -3,19 +3,20 @@ # License: GNU AGPL, version 3 or later; http://www.gnu.org/licenses/agpl.html import os, shutil, re, urllib, urllib2, time, unicodedata, \ - urllib, sys + urllib, sys, shutil from anki.utils import checksum, intTime, namedtmp, isWin from anki.lang import _ class MediaRegistry(object): + # can be altered at the class level for dropbox, etc + mediaPrefix = "" # other code depends on this order, so don't reorder regexps = ("(?i)(\[sound:([^]]+)\])", "(?i)(]+src=[\"']?([^\"'>]+)[\"']?[^>]*>)") def __init__(self, deck): self.deck = deck - self.mediaPrefix = "" self._dir = None self._updateDir() @@ -48,6 +49,14 @@ class MediaRegistry(object): os.chdir(dir) self._dir = dir + def move(self, old): + if not old: + return + self._dir = None + new = self.dir(create=None) + shutil.copytree(old, new) + shutil.rmtree(old) + # Adding media ########################################################################## diff --git a/tests/test_media.py b/tests/test_media.py index ed4c37e53..643e67f51 100644 --- a/tests/test_media.py +++ b/tests/test_media.py @@ -59,3 +59,12 @@ def test_deckIntegration(): ret = d.media.check() assert ret[0] == ["fake2.png"] assert ret[1] == ["foo.jpg"] + +def test_rename(): + d = getEmptyDeck() + # put a file into it + file = unicode(os.path.join(testDir, "support/fake.png")) + d.media.addFile(file) + new = d.path.replace(".anki", "2.anki") + d.rename(new) +