418
419
tot = float(len(self.main.ui.ls_documents))
420
421
for row in self.main.ui.ls_documents:
421
temp_file = Session.doc_temp.get(row[DOC_COLUMN.UID])
422
old_name = '/'.join((row[DOC_COLUMN.PATH], row[DOC_COLUMN.FILENAME]))
423
gtk.gdk.threads_enter()
424
self.parent.set_current_task('Processing "%s"...' % old_name)
425
gtk.gdk.threads_leave()
427
filename = old_name if row[DOC_COLUMN.MIMETYPE] not in mimes.CONVERT_MIMES \
428
else '.'.join( (os.path.splitext(old_name)[0], 'pdf') )
429
gtk.gdk.threads_enter()
430
self.parent.set_current_task('Overwriting "%s"...' % old_name)
431
gtk.gdk.threads_leave()
433
os.rename(temp_file, filename)
434
Session.doc_temp[row[DOC_COLUMN.UID]] = None
436
# Look for page ranges
439
gtk.gdk.threads_enter()
440
self.parent.set_fraction(i / tot)
441
gtk.gdk.threads_leave()
444
# 1. look for temp_file
445
# 2. otherwise use original file name
446
# 3. if PS see if the user wishes it to be converted
447
gtk.gdk.threads_enter()
448
self.parent.set_current_task("Done.")
449
gtk.gdk.threads_leave()
450
self.parent.response(gtk.RESPONSE_OK)
452
class SaveAsThread(ProgressThread):
453
def __init__(self, parent, data):
455
super(SaveAsThread, self).__init__(parent)
458
tot = float(len(self.main.ui.ls_documents))
460
for row in self.main.ui.ls_documents:
461
422
uid = row[DOC_COLUMN.UID]
462
423
temp_file = Session.doc_temp.get(uid)
463
424
old_name = '/'.join((row[DOC_COLUMN.PATH], row[DOC_COLUMN.FILENAME]))
477
438
self.parent.set_current_task('Overwriting "%s"...' % old_name)
478
439
gtk.gdk.threads_leave()
480
ranges = Session.doc_ranges[uid]
481
if ranges == (True, '') and temp_file:
482
os.rename(temp_file, filename)
441
ranges = Session.doc_ranges.get(uid)
443
if temp_file: os.rename(temp_file, filename)
484
with file(fin, 'rb') as fin, file(fout, 'wb') as fout:
485
pdf_in = pdf.PdfFileReader(fin)
445
with file(fin, 'rb') as src, file(fout, 'wb') as dest:
446
pdf_in = pdf.PdfFileReader(src)
486
447
pdf_out = pdf.PdfFileWriter()
488
ranges = produce_ranges(Session.doc_ranges[uid])
449
ranges = produce_ranges(*Session.doc_ranges.get(uid, (True, '')), n_pages = pdf_in.getNumPages())
489
450
for page in pdf_in.pages:
491
452
if j not in ranges: continue
492
453
pdf_out.addPage(page)
495
457
if not temp_file: os.rename(fout, fin)
497
459
Session.doc_temp[uid] = None
501
463
self.parent.set_fraction(i / tot)
502
464
gtk.gdk.threads_leave()
505
# 1. look for temp_file
506
# 2. otherwise use original file name
507
# 3. if PS see if the user wishes it to be converted
508
gtk.gdk.threads_enter()
509
self.parent.set_current_task("Done.")
510
gtk.gdk.threads_leave()
511
self.parent.response(gtk.RESPONSE_OK)
466
gtk.gdk.threads_enter()
467
self.parent.set_current_task("Done.")
468
gtk.gdk.threads_leave()
469
self.parent.response(gtk.RESPONSE_OK)
471
class SaveAsThread(ProgressThread):
472
def __init__(self, parent, data):
474
super(SaveAsThread, self).__init__(parent)
477
tot = float(len(self.main.ui.ls_documents))
480
# Determine numbering
481
pattern = Session.main.ui.txt_pattern.get_text()
482
match = re.search('#{([0-9]),([0-9]+?),([0-9]+?)}', pattern)
484
d, s, i = match.groups()
485
d, s, i = int(d), int(s), int(i)
486
num_pattern = re.search('(#{%d,%d,%d})' % (d,s,i) , pattern).group(0)
488
prototype = pattern.replace('*name*', '')
489
prototype = prototype.replace('*ext*', '')
490
prototype = prototype.replace('*path*', '')
491
prototype = prototype.replace('*title*', '')
492
prototype = prototype.replace('*author*', '')
494
for row in self.main.ui.ls_documents:
495
uid = row[DOC_COLUMN.UID]
496
filename = Session.doc_temp.get(uid)
497
old_name = '/'.join((row[DOC_COLUMN.PATH], row[DOC_COLUMN.FILENAME]))
498
if not filename: filename = old_name
500
gtk.gdk.threads_enter()
501
self.parent.set_current_task('Processing "%s"...' % old_name)
502
gtk.gdk.threads_leave()
504
new_name = pattern.replace('*name*', os.path.splitext(row[DOC_COLUMN.FILENAME])[0])
505
new_name = new_name.replace('*ext*', os.path.splitext(row[DOC_COLUMN.FILENAME])[1])
506
new_name = new_name.replace('*path*', row[DOC_COLUMN.PATH])
507
new_name = new_name.replace('*title*', row[DOC_COLUMN.TITLE] if row[DOC_COLUMN.TITLE] else '')
508
new_name = new_name.replace('*author*', row[DOC_COLUMN.AUTHOR] if row[DOC_COLUMN.AUTHOR] else '')
510
new_name = new_name.replace(num_pattern, ("%%0%dd" % d) % s)
513
if new_name == prototype: continue
514
new_name = '.'.join((new_name, 'pdf'))
515
path = Session.main.ui.fcb_dest_folder.get_filename()
516
print '/'.join((path,new_name))
518
ranges = Session.doc_ranges.get(uid)
520
gtk.gdk.threads_enter()
521
self.parent.set_current_task('Saving "%s" as "%s"...' % (filename, new_name))
522
gtk.gdk.threads_leave()
525
temp_file = Session.temp_new('saveas').new_file('.pdf')
526
with file(filename, 'rb') as src, file(temp_file, 'wb') as dest:
527
pdf_in = pdf.PdfFileReader(src)
528
pdf_out = pdf.PdfFileWriter()
530
ranges = produce_ranges(*Session.doc_ranges.get(uid, (True, '')), n_pages = pdf_in.getNumPages())
531
for page in pdf_in.pages:
533
if j not in ranges: continue
534
pdf_out.addPage(page)
538
os.rename(temp_file, '/'.join((path, new_name)))
540
shutil.copyfile(filename, '/'.join((path, new_name)))
543
gtk.gdk.threads_enter()
544
self.parent.set_fraction(i / tot)
545
gtk.gdk.threads_leave()
547
gtk.gdk.threads_enter()
548
self.parent.set_current_task("Done.")
549
gtk.gdk.threads_leave()
550
self.parent.response(gtk.RESPONSE_OK)
513
552
### END THREAD CLASSES
515
554
### BEGIN COMMAND CLASSES
1055
1094
color = gtk.gdk.Color(preferences["cb_box%d" % box])
1056
1095
self.draw_rectangle(widget, Session.boxes[box], (color.red_float, color.green_float, color.blue_float))
1097
def on_gtumbler_window_delete_event(self, widget, *args):
1098
return not self.ask_proceed_with_action()
1058
1100
def on_ls_documents_row_changed(self, widget, path, it, *args):
1059
1101
self.on_tv_documents_cursor_changed(widget, *args)