summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormikeos <mike.osipov@gmail.com>2013-07-25 00:02:06 +0400
committermikeos <mike.osipov@gmail.com>2013-07-25 00:02:06 +0400
commit36380f34b2dbd9881978c04da1bd18b444572c6b (patch)
treee656120e6f7293fc92fdf035e199ae98a34b0d77
parentc54595e6646531b5802394c19b4b62f7566aa6e9 (diff)
use temporary directory for files
-rw-r--r--config.py1
-rwxr-xr-xcutter45
-rw-r--r--utils.py2
3 files changed, 46 insertions, 2 deletions
diff --git a/config.py b/config.py
index d24c418..7baf99a 100644
--- a/config.py
+++ b/config.py
@@ -44,6 +44,7 @@ cfg = CfgParser()
cfg.read(os.path.expanduser("~/.cutter.cfg"))
DIR = cfg.get("encoding", "dir", ".")
+USE_TEMPDIR = cfg.getbool("encoding", "use_tempdir")
COMPRESSION = cfg.getint("encoding", "compression")
SAMPLE_RATE = cfg.getint("output", "sample_rate")
diff --git a/cutter b/cutter
index 415fee1..078e286 100755
--- a/cutter
+++ b/cutter
@@ -6,10 +6,10 @@ from cue import read_cue
from optparse import OptionParser, OptionGroup
from subprocess import Popen, PIPE
from tempfile import mkdtemp
-from shutil import copyfile
from itertools import chain
import collections
+import shutil
import sys
import os
@@ -158,6 +158,14 @@ def parse_args():
dest="convert_chars", action="store_false",
help="do not replace characters in filename")
+ fname.add_option("--use-tempdir",
+ dest="use_tempdir", action="store_true",
+ help="use temporary directory for files")
+
+ fname.add_option("--no-tempdir",
+ dest="use_tempdir", action="store_false",
+ help="do not use temporary directory")
+
parser.add_option_group(fname)
format = OptionGroup(parser, "Output format")
@@ -205,6 +213,8 @@ def process_options(opt):
if opt.convert_chars is None:
opt.convert_chars = config.CONVERT_CHARS
+ if opt.use_tempdir is None:
+ opt.use_tempdir = config.USE_TEMPDIR
def get_encoder_formart(opt, info):
cmd = "flac sox - "
@@ -435,7 +445,7 @@ class CueSplitter:
sys.stdout.flush()
try:
- copyfile(file.name, path)
+ shutil.copyfile(file.name, path)
except Exception as err:
printf("FAILED: %s\n", err)
sys.exit(1)
@@ -510,13 +520,36 @@ class CueSplitter:
printerr("track names are duplicated: %s", " ".join(dup))
sys.exit(1)
+ def transfer_files(self, source, dest):
+ for file in os.listdir(source):
+ path = os.path.join(source, file)
+ if not os.path.isfile(path):
+ debug("skip non file %s", quote(file))
+ continue
+
+ printf("Copy [%s] into [%s] : ", file, dest)
+ sys.stdout.flush()
+
+ try:
+ shutil.copy(path, dest)
+ except Exception as err:
+ printf("FAILED: %s\n", err)
+ sys.exit(1)
+ else:
+ printf("OK\n")
+
def split(self):
self.check_duplicates()
files = self.open_files()
+ self.realpath = None
if not self.opt.dry_run:
mkdir(self.dest)
+ if self.opt.use_tempdir:
+ self.realpath = self.dest
+ tempdir = mkdtemp(prefix="cutter-")
+ self.dest = to_unicode(tempdir)
for file in files:
points = list(file.split_points(file.info))
@@ -526,6 +559,14 @@ class CueSplitter:
else:
self.split_file(file, points)
+ if self.realpath:
+ self.transfer_files(self.dest, self.realpath)
+ try:
+ shutil.rmtree(self.dest)
+ except Exception as err:
+ printerr("rm %s failed: %s\n", self.dest, err)
+ sys.exit(1)
+
def all_tracks(self):
return chain(*[f.tracks() for f in self.cue.files()])
diff --git a/utils.py b/utils.py
index b911630..ffae410 100644
--- a/utils.py
+++ b/utils.py
@@ -10,6 +10,8 @@ if sys.version_info.major == 2:
return buf.decode("utf-8")
def to_bytes(buf):
+ if type(buf) is unicode:
+ return buf.encode("utf-8")
return buf
class Encoded: