diff --git a/.pydevproject b/.pydevproject
index 0bbc0db..4b6e256 100644
--- a/.pydevproject
+++ b/.pydevproject
@@ -6,9 +6,6 @@
python 2.5
Default
-/sandbox/mpg2xvid
-/sandbox/megui
-/sandbox/gui
/sandbox/src
diff --git a/src/misc/tv-archiv.py b/src/misc/tv-archiv.py
new file mode 100644
index 0000000..b953ec3
--- /dev/null
+++ b/src/misc/tv-archiv.py
@@ -0,0 +1,137 @@
+# (c) 2009 Andreas Balogh
+# see LICENCE for details
+
+import os
+import subprocess as sp
+import logging
+import re
+import datetime
+import sys
+import shutil
+
+LOG = logging.getLogger()
+
+logging.basicConfig(level=logging.DEBUG,
+ format='%(asctime)s %(levelname).4s %(process)d:%(thread)d %(message)s',
+ datefmt='%H:%M:%S')
+
+TV_REC_DIR = r"C:\Dokumente und Einstellungen\All Users\Dokumente\TV-Aufzeichnungen"
+MPG_DIR = r"C:\Dokumente und Einstellungen\Andreas\Eigene Dateien\Archiv"
+ARCHIV_DIR = r"C:\Dokumente und Einstellungen\All Users\Dokumente\Eigene Videos\Archiv"
+VIDEO_DIR = r"C:\Dokumente und Einstellungen\All Users\Dokumente\Eigene Videos"
+
+DVRMS2MPG = r"C:\Programme\DVRMSToolbox\DVRMStoMPEG.exe"
+VIRTUALDUB = r"C:\Apps\VirtualDub\VirtualDub.exe"
+
+ARCHIVE_DELAY = datetime.timedelta(days = 30)
+SERIES_DELAY = datetime.timedelta(days = 3)
+
+def main():
+ """ compress files older than n days """
+ # select files and sort by creation datetime
+ find_archive("Pettersson und Findus")
+ find_archive("Die Sendung mit der Maus")
+ find_archive("Die Sendung mit dem Elefanten")
+ files = find_dvrms(min_age = ARCHIVE_DELAY)
+ archive(files)
+
+def find_archive(glob):
+ LOG.info("find & archive '%s'...", glob)
+ re = "(%s.*)\.dvr-ms" % (glob, )
+ files = find_dvrms(pattern = re, min_age = SERIES_DELAY)
+ archive(files, target = glob)
+
+def find_dvrms(pattern = "(.*)\.dvr-ms", min_age = None):
+ files = []
+ dvrms_reo = re.compile(pattern)
+ for dvrms_fn in os.listdir(TV_REC_DIR):
+ dvrms_fp = os.path.join(TV_REC_DIR, dvrms_fn)
+ if not os.path.isfile(dvrms_fp):
+ continue
+ # file is a dvr-ms
+ mo = dvrms_reo.match(dvrms_fn)
+ if not mo:
+ continue
+ unix_ctime = os.stat(dvrms_fp).st_ctime
+ dt_ctime = datetime.datetime.fromtimestamp(int(unix_ctime))
+ # file older than min_age
+ if min_age is not None:
+ if datetime.datetime.now() < dt_ctime + min_age:
+ continue
+ files.append((dt_ctime, dvrms_fn))
+ return files
+
+def archive(files, target = "Archiv"):
+ # archive now
+ dvrms_reo = re.compile("(.*)\.dvr-ms")
+ files.sort(cmp=lambda x,y: cmp(x[0], y[0]), reverse=False)
+ for dt_ctime, dvrms_fn in files:
+ print dt_ctime.isoformat(" "), dvrms_fn.decode("latin")
+ dvrms_fp = os.path.join(TV_REC_DIR, dvrms_fn)
+ file_root = dvrms_reo.match(dvrms_fn).group(1)
+ mpg_fp = os.path.join(MPG_DIR, file_root + ".mpg")
+ archiv_dir = os.path.join(VIDEO_DIR, target)
+ divx_fp = os.path.join(archiv_dir, file_root + ".avi")
+ if not os.path.isfile(divx_fp):
+ # convert
+ if not os.path.isfile(mpg_fp):
+ tmp_fp = os.path.join(MPG_DIR, file_root + "_tmp.mpg")
+ dtb_mpg(dvrms_fp, tmp_fp)
+ os.rename(tmp_fp, mpg_fp)
+ # compress and archive
+ tmp_fp = os.path.join(MPG_DIR, file_root + "_tmp.avi")
+ vdub(mpg_fp, tmp_fp)
+ # os.rename work on same drive, use shutil.move otherwise
+ shutil.move(tmp_fp, divx_fp)
+ # touch divx_fp with dvrms_fp
+ shutil.copystat(dvrms_fp, divx_fp)
+ # clean up
+ os.remove(mpg_fp)
+ # os.remove(dvrms_fp)
+ LOG.info("done")
+
+def dtb_mpg(dvrms_fp, mpg_fp):
+ _if = "/if=%s" % (dvrms_fp, )
+ _of = "/of=%s" % (mpg_fp, )
+ args = [DVRMS2MPG, ]
+ args.append(_if)
+ args.append(_of)
+ args.append("/act=dvrmstompg")
+ LOG.info("\n\r".join(args).decode("latin"))
+ proc = sp.Popen(args)
+ proc.wait()
+ LOG.info("%i", proc.returncode)
+ return proc.returncode
+
+def dtb_xvid(dvrms_fp, xvid_fp):
+ _if = "/if=%s" % (dvrms_fp, )
+ _of = "/of=%s" % (xvid_fp, )
+ args = [DVRMS2MPG, ]
+ args.append(_if)
+ args.append(_of)
+ args.append("/act=mencoder")
+ LOG.info("\n\r".join(args).decode("latin"))
+ proc = sp.Popen(args)
+ proc.wait()
+ LOG.info("%i", proc.returncode)
+ return proc.returncode
+
+def vdub(mpg_fp, divx_fp):
+ # c:\apps\virtualdub\virtualdub.exe /s "archiv.vcf" /c /p %SRC% %DEST% /r /x
+ args = [VIRTUALDUB, ]
+ args.append('/s')
+ args.append(r"c:\Dokumente und Einstellungen\Andreas\Eigene Dateien\archiv.vcf")
+ args.append('/c')
+ args.append('/p')
+ args.append(mpg_fp)
+ args.append(divx_fp)
+ args.append('/r')
+ args.append('/x')
+ LOG.info("\n\r".join(args).decode("latin"))
+ proc = sp.Popen(args)
+ proc.wait()
+ LOG.info("%i", proc.returncode)
+ return proc.returncode
+
+if __name__ == "__main__":
+ main()