Change the default overrun time to 10 minutes, and the default path of the XMLTV...
[recordtv.git] / src / rtv_convert.py
blob8d2d1ed043fde46d01c190c114a61a98ef08471f
1 #!/usr/bin/python
3 import os
4 import os.path
5 import re
6 import shutil
7 import sys
8 import rtv_utils, rtv_programmeinfo
10 allowed_chars_re = re.compile( "[a-zA-z0-9_-]" )
12 def _sanitise_filename( fn, max_len ):
13 fn = str( fn )
14 san_fn = ""
15 for ch in fn:
16 if allowed_chars_re.match( ch ):
17 san_fn += ch
18 else:
19 san_fn += "_"
20 return san_fn[:max_len]
22 def _get_flv_file_path( rtvinfo, fallback_filename ):
23 if not os.path.isfile( rtvinfo ):
24 print "Error: rtvinfo file '%s' not found." % rtvinfo
25 sys.stdout.flush()
26 return ( "", fallback_filename )
28 proginfo = rtv_programmeinfo.ProgrammeInfo()
29 proginfo.load( rtvinfo )
31 startTime = str( proginfo.startTime )
33 if proginfo.sub_title:
34 unsan_file = startTime[:10] + "_" + str( proginfo.sub_title )
35 elif proginfo.channel_pretty:
36 unsan_file = startTime + "_" + str( proginfo.channel_pretty )
37 else:
38 unsan_file = startTime + "_" + str( proginfo.channel )
40 progname_dir = _sanitise_filename( proginfo.title, 40 )
42 if proginfo.destination and proginfo.destination != "":
43 ret_dir = os.path.join(
44 _sanitise_filename( proginfo.destination, 40 ),
45 progname_dir )
46 else:
47 ret_dir = progname_dir
49 ans = ( ret_dir,
50 os.path.join( ret_dir, _sanitise_filename( unsan_file, 40 ) ) )
52 return ans
54 def _delete_empty_dirs( config ):
55 for ( dirpath, dirnames, filenames ) in os.walk(
56 config.converted_progs_dir ):
57 if len( filenames ) == 0 and len( dirnames ) == 0:
59 # Don't delete the "deleted" dir
60 if ( dirpath.endswith( "deleted" ) ):
61 continue
63 empty_dir_name = os.path.join(
64 config.converted_progs_dir, dirpath )
65 print "Removing empty directory '%s'" % empty_dir_name
66 os.rmdir( empty_dir_name )
69 def convert( config ):
71 for fn in os.listdir( config.recorded_progs_dir ):
72 if fn[-3:] != ".ts":
73 continue
75 fn_stem = fn[ : fn.rfind( "." ) ]
77 fn = os.path.join( config.recorded_progs_dir, fn )
79 rtvinfo = os.path.join( config.recorded_progs_dir,
80 fn_stem + ".rtvinfo" )
82 (flv_dir, flv_stem) = _get_flv_file_path( rtvinfo, fn_stem )
84 rtv_utils.ensure_dir_exists(
85 os.path.join( config.converted_progs_dir, flv_dir ) )
87 flv_before = os.path.join( config.converted_progs_dir,
88 flv_stem + "_before_flvtool2.flv" )
90 flv_after = os.path.join( config.converted_progs_dir,
91 flv_stem + ".flv" )
93 rtvinfo_new = flv_stem + ".rtvinfo"
95 old_dir = os.path.join( config.recorded_progs_dir, "old" )
97 sys.stdout.flush()
98 retval = os.system( config.convert_command % (
99 fn, flv_before, flv_after, old_dir ) )
101 if retval != 0:
102 print "Conversion of '%s' returned an error." % fn
103 continue
105 if os.path.isfile( rtvinfo ):
106 shutil.move( rtvinfo,
107 os.path.join( config.converted_progs_dir, rtvinfo_new ) )
109 _delete_empty_dirs( config )
112 def rename( config ):
113 for ( dirpath, dirnames, filenames ) in os.walk( config.converted_progs_dir ):
114 for fn in filenames:
115 if fn[-4:] != ".flv":
116 continue
118 fn_stem = os.path.join( dirpath, fn[ : fn.rfind( "." ) ] )
120 rtvinfo_orig = os.path.join( config.converted_progs_dir,
121 fn_stem + ".rtvinfo" )
123 flv_orig = os.path.join( config.converted_progs_dir,
124 fn_stem + ".flv" )
126 (flv_dir, flv_stem) = _get_flv_file_path( rtvinfo_orig, fn_stem )
128 rtv_utils.ensure_dir_exists(
129 os.path.join( config.converted_progs_dir, flv_dir ) )
131 flv_after = os.path.join( config.converted_progs_dir,
132 flv_stem + ".flv" )
134 rtvinfo_after = os.path.join( config.converted_progs_dir,
135 flv_stem + ".rtvinfo" )
137 if flv_orig != flv_after:
138 print "Renaming %s -> %s" % ( flv_orig, flv_after )
139 shutil.move( flv_orig, flv_after )
141 if rtvinfo_orig != rtvinfo_after:
142 print "Renaming %s -> %s" % ( rtvinfo_orig, rtvinfo_after )
143 shutil.move( rtvinfo_orig, rtvinfo_after )
145 _delete_empty_dirs( config )