8 import rtv_utils
, rtv_programmeinfo
10 allowed_chars_re
= re
.compile( "[a-zA-z0-9_-]" )
12 def _sanitise_filename( fn
, max_len
):
16 if allowed_chars_re
.match( ch
):
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
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
)
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 ),
47 ret_dir
= progname_dir
50 os
.path
.join( ret_dir
, _sanitise_filename( unsan_file
, 40 ) ) )
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" ) ):
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
):
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
,
93 rtvinfo_new
= flv_stem
+ ".rtvinfo"
95 old_dir
= os
.path
.join( config
.recorded_progs_dir
, "old" )
98 retval
= os
.system( config
.convert_command
% (
99 fn
, flv_before
, flv_after
, old_dir
) )
102 print "Conversion of '%s' returned an error." % fn
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
):
115 if fn
[-4:] != ".flv":
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
,
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
,
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
)