tags 310478 + patch pending
thanks

* Martin Michlmayr <[EMAIL PROTECTED]> [2005-05-23 21:31]:
> When cdparanoia fails, the following ugly traceback is produced:
> 
> Traceback (most recent call last):
>   File "/home/tbm/bin/jack-3.1", line 225, in ?
>     global_error = jack_main_loop.main_loop(mp3s_todo, wavs_todo, space, 
> dae_queue, enc_queue, track1_offset)
>   File "/usr/lib/python2.3/site-packages/jack_main_loop.py", line 293, in 
> main_loop
>     jack_status.dae_stat_upd(num, 
> string.strip(string.split(exited_proc['buf'], "\n")[-2]))
> IndexError: list index out of range
>  *warning* abnormal exit

The patch below makes the parsing of the ripper output more robust:


diff -urN jack-3.1.1~/jack_helpers.py jack-3.1.1/jack_helpers.py
--- jack-3.1.1~/jack_helpers.py 2005-07-28 22:31:02.924899792 +0100
+++ jack-3.1.1/jack_helpers.py  2005-07-28 23:01:19.584725520 +0100
@@ -260,9 +260,12 @@
         'status_fkt': r"""
 # (== PROGRESS == [                              | 013124 00 ] == :^D * ==)
 # (== PROGRESS == [                       >      .| 011923 00 ] == :-) . ==)
-tmp = string.split(i['buf'], '\r')[-2] + " "
-new_status = tmp[17:48] + tmp[49:69] # 68->69 because of newer version
-#new_status = string.split(i['buf'], '\r')[-2][17:69] # 68->69 because of 
newer version
+tmp = string.split(i['buf'], "\r")
+if len(tmp) >= 2:
+    tmp = tmp[-2] + " "
+    new_status = tmp[17:48] + tmp[49:69] # 68->69 because of newer version
+else:
+    new_status = "Cannot parse status"
 """,
         'otf-status_fkt': r"""
 buf = i['buf']
@@ -316,11 +319,14 @@
         'status_blocksize': 200,
         'status_start': "percent_done:",
         'status_fkt': r"""
-x = string.split(i['buf'], '\r')[-2]
-if string.find(x, '%') != -1:
-    new_status = "ripping: " + string.strip(string.split(i['buf'], '\r')[-2])
+tmp = string.split(i['buf'], "\r")
+if len(tmp) >= 2:
+    if string.find(tmp[-2], '%') != -1:
+        new_status = "ripping: " + string.strip(tmp[-2])
+    else:
+        new_status = "waiting..."
 else:
-    new_status = "waiting..."
+    new_status = "Cannot parse status"
 """,
         'final_status_fkt': r"""
 final_status = ("%s" % jack_functions.pprint_speed(speed)) + "x [ DAE done 
with cdda2wav       ]"
@@ -419,11 +425,14 @@
         'status_blocksize': 100,
         'status_start': "total:",
         'status_fkt': r"""
-x = string.split(i['buf'], '\r')[-2]
-if string.find(x, 'total:') != -1:
-    new_status = string.strip(string.split(i['buf'], '\r')[-2])
+tmp = string.split(i['buf'], "\r")
+if len(tmp) >= 2:
+    if string.find(tmp[-2], 'total:') != -1:
+        new_status = string.strip(tmp[-2])
+    else:
+        new_status = "waiting..."
 else:
-    new_status = "waiting..."
+    new_status = "Cannot parse status"
 """,
         'final_status_fkt': r"""
 final_status = ("%s" % jack_functions.pprint_speed(speed)) + "x [ DAE done 
with dagrab         ]"
diff -urN jack-3.1.1~/jack_main_loop.py jack-3.1.1/jack_main_loop.py
--- jack-3.1.1~/jack_main_loop.py       2005-07-28 22:31:02.925899640 +0100
+++ jack-3.1.1/jack_main_loop.py        2005-07-28 23:00:17.783120792 +0100
@@ -285,9 +285,9 @@
                             if os.path.exists(track[NAME] + ".wav"):
                                 if jack_functions.tracksize(track)[WAV] != 
jack_utils.filesize(track[NAME] + ".wav"):
                                     res = 242
-                                    jack_status.dae_stat_upd(num, 
string.strip(string.split(exited_proc['buf'], "\n")[-2]))
+                                    jack_status.dae_stat_upd(num, 
jack_status.get_2_line(exited_proc['buf']))
                             else:
-                                jack_status.dae_stat_upd(num, 
string.strip(string.split(exited_proc['buf'], "\n")[-2]))
+                                jack_status.dae_stat_upd(num, 
jack_status.get_2_line(exited_proc['buf']))
                                 res = 243
                             global_error = global_error + res
                     if res and not cf['_sloppy']:
@@ -304,7 +304,7 @@
                             jack_status.dae_stat_upd(num, 'DAE failed with 
status ' + `res` + ", wav removed.")
                     else:
                         if exited_proc['type'] == "image_reader":
-                            jack_status.dae_stat_upd(num, 
string.strip(string.split(exited_proc['buf'], "\n")[-2]))
+                            jack_status.dae_stat_upd(num, 
jack_status.get_2_line(exited_proc['buf']))
                         else:
                             if exited_proc['otf'] and 
jack_helpers.helpers[exited_proc['prog']].has_key('otf-final_status_fkt'):
                                 
exec(jack_helpers.helpers[exited_proc['prog']]['otf-final_status_fkt']) in 
globals(), locals()
@@ -391,12 +391,10 @@
                             #jack_term.tmod.dae_stat_upd(i['track'][NUM], 
None, i['percent'])
         
                 elif i['type'] == "image_reader":
-                    line = string.split(i['buf'], "\n")
-                    if len(line) >= 2:
-                        line = string.strip(line[-2])
-                        jack_status.dae_stat_upd(i['track'][NUM], line)
-                        if line[:5] == "Error":
-                            global_error = global_error + 1
+                    line = string.strip(jack_status.get_2_line(i['buf']))
+                    jack_status.dae_stat_upd(i['track'][NUM], line)
+                    if line.startswith("Error"):
+                        global_error = global_error + 1
         
                 else:
                     error("unknown subprocess type \"" + i['type'] + "\".")
diff -urN jack-3.1.1~/jack_status.py jack-3.1.1/jack_status.py
--- jack-3.1.1~/jack_status.py  2005-07-28 22:31:02.926899488 +0100
+++ jack-3.1.1/jack_status.py   2005-07-28 22:54:21.874227168 +0100
@@ -16,6 +16,8 @@
 ### along with this program; if not, write to the Free Software
 ### Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
+import string
+
 from jack_globals import NUM, cf
 import jack_term
 import jack_ripstuff
@@ -55,3 +57,10 @@
         else:
             print jack_ripstuff.printable_names[i[NUM]] + ":", 
dae_status[i[NUM]], enc_status[i[NUM]]
 
+def get_2_line(buf, default="A failure occured"):
+    tmp = string.split(buf, "\n")
+    if len(tmp) >= 2:
+        return string.strip(tmp[-2])
+    else:
+        return default
+


-- 
Martin Michlmayr
http://www.cyrius.com/


-- 
To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]

Reply via email to