diff -uNr old/thumbnail-checker.glade new_thumbnail/thumbnail-checker.glade
--- old/thumbnail-checker.glade 2006-08-30 23:53:11.000000000 +0800
+++ new_thumbnail/thumbnail-checker.glade 2006-08-30 22:43:48.000000000 +0800
@@ -29,37 +29,81 @@
12
-
+
+ 128
True
-
- False
- False
- GTK_JUSTIFY_LEFT
- False
- False
- 0
- 0.5
- 0
- 0
- PANGO_ELLIPSIZE_NONE
- -1
- False
- 0
-
-
- 0
- False
- False
-
-
+ False
+ 6
-
-
- True
- GTK_PROGRESS_LEFT_TO_RIGHT
- 0
- 0.10000000149
- PANGO_ELLIPSIZE_NONE
+
+
+ True
+ False
+ 0
+
+
+
+ True
+
+ False
+ False
+ GTK_JUSTIFY_LEFT
+ False
+ False
+ 0
+ 0.5
+ 0
+ 0
+ PANGO_ELLIPSIZE_NONE
+ -1
+ False
+ 0
+
+
+ 0
+ True
+ True
+
+
+
+
+
+ True
+ GTK_PROGRESS_LEFT_TO_RIGHT
+ 0
+ 0.10000000149
+ PANGO_ELLIPSIZE_NONE
+
+
+ 0
+ True
+ False
+
+
+
+
+ 0
+ True
+ True
+
+
+
+
+
+ 128
+ 128
+ True
+ 0.5
+ 0.5
+ 0
+ 0
+
+
+ 0
+ False
+ False
+
+
0
@@ -90,6 +134,8 @@
False
False
False
+
+
@@ -101,111 +147,213 @@
-
+
True
- GTK_BUTTONBOX_END
- 6
+ False
+ 0
-
+
True
- False
- True
- True
- gtk-stop
- True
- GTK_RELIEF_NORMAL
- True
-
+ GTK_BUTTONBOX_START
+ 6
+
+
+
+ True
+ False
+ True
+ True
+ GTK_RELIEF_NORMAL
+ True
+
+
+
+
+ True
+ 0.5
+ 0.5
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
+
+
+
+ True
+ False
+ 2
+
+
+
+ True
+ gtk-delete
+ 4
+ 0.5
+ 0.5
+ 0
+ 0
+
+
+ 0
+ False
+ False
+
+
+
+
+
+ True
+ _Remove All
+ True
+ False
+ GTK_JUSTIFY_LEFT
+ False
+ False
+ 0.5
+ 0.5
+ 0
+ 0
+ PANGO_ELLIPSIZE_NONE
+ -1
+ False
+ 0
+
+
+ 0
+ False
+ False
+
+
+
+
+
+
+
+
+
+ 0
+ True
+ True
+
-
+
True
- True
- True
- GTK_RELIEF_NORMAL
- True
-
+ GTK_BUTTONBOX_END
+ 6
-
+
True
- 0.5
- 0.5
- 0
- 0
- 0
- 0
- 0
- 0
+ False
+ True
+ True
+ gtk-stop
+ True
+ GTK_RELIEF_NORMAL
+ True
+
+
+
+
+
+
+ True
+ True
+ True
+ GTK_RELIEF_NORMAL
+ True
+
-
+
True
- False
- 2
+ 0.5
+ 0.5
+ 0
+ 0
+ 0
+ 0
+ 0
+ 0
-
+
True
- gtk-go-forward
- 4
- 0.5
- 0.5
- 0
- 0
-
-
- 0
- False
- False
-
-
+ False
+ 2
-
-
- True
- _Start
- True
- False
- GTK_JUSTIFY_LEFT
- False
- False
- 0.5
- 0.5
- 0
- 0
- PANGO_ELLIPSIZE_NONE
- -1
- False
- 0
+
+
+ True
+ gtk-go-forward
+ 4
+ 0.5
+ 0.5
+ 0
+ 0
+
+
+ 0
+ False
+ False
+
+
+
+
+
+ True
+ _Start
+ True
+ False
+ GTK_JUSTIFY_LEFT
+ False
+ False
+ 0.5
+ 0.5
+ 0
+ 0
+ PANGO_ELLIPSIZE_NONE
+ -1
+ False
+ 0
+
+
+ 0
+ False
+ False
+
+
-
- 0
- False
- False
-
-
-
-
-
- True
- True
- True
- gtk-close
- True
- GTK_RELIEF_NORMAL
- True
-
+
+
+ True
+ True
+ True
+ gtk-close
+ True
+ GTK_RELIEF_NORMAL
+ True
+
+
+
+
+ 0
+ True
+ True
+
diff -uNr old/thumbnail-checker.py new_thumbnail/thumbnail-checker.py
--- old/thumbnail-checker.py 2006-08-30 23:53:33.000000000 +0800
+++ new_thumbnail/thumbnail-checker.py 2006-08-30 23:50:58.000000000 +0800
@@ -3,6 +3,7 @@
from gnomevfs import get_local_path_from_uri
from gc import collect
from os.path import join, getsize
+from string import atoi
import gtk
import gtk.gdk
@@ -18,24 +19,26 @@
self.first_time = True
xml = gtk.glade.XML('thumbnail-checker.glade', None, None)
- self.model = gtk.TreeStore(str, str)
+ self.model = gtk.TreeStore(str, str, str, int)
self.window = xml.get_widget('window')
- treeview = xml.get_widget('treeview')
+ self.treeview = xml.get_widget('treeview')
self.progressbar = xml.get_widget('progressbar')
self.progress = xml.get_widget('progress')
self.button_start = xml.get_widget('button_start')
self.button_stop = xml.get_widget('button_stop')
+ self.image_view = xml.get_widget('image2')
+ self.removeall = xml.get_widget('RemoveAllButton')
xml.signal_autoconnect(self)
- treeview.set_search_column(1)
- treeview.set_model(self.model)
+ self.treeview.set_search_column(1)
+ self.treeview.set_model(self.model)
renderer = gtk.CellRendererText()
column = gtk.TreeViewColumn("File name or Thumbnail file", renderer, text=0)
column.set_resizable(True)
column.set_expand(True)
- treeview.append_column(column)
+ self.treeview.append_column(column)
renderer = gtk.CellRendererText()
renderer.set_property('xalign', 1.0)
@@ -43,7 +46,20 @@
column.set_resizable(True)
column.set_min_width(80)
column.set_resizable(True)
- treeview.append_column(column)
+ self.treeview.append_column(column)
+
+ column = gtk.TreeViewColumn("Thumbnail Path", None)
+ column.set_visible(False)
+ self.treeview.append_column(column)
+
+ column = gtk.TreeViewColumn("Size", None)
+ column.set_visible(False)
+ self.treeview.append_column(column)
+
+ self.homedir = os.path.expanduser('~')
+ (self.invalid_size, self.invalid_count, self.non_fd_size, self.non_fd_count,
+ self.orphan_size, self.orphan_count, self.external_size, self.external_count) = (0,0,0,0,0,0,0,0)
+ (self.orphan_iter, self.external_iter, self.invalid_iter, self.non_fd_iter) = (None, None, None, None)
def show(self):
self.window.show_all()
@@ -65,18 +81,17 @@
self.id = gobject.idle_add(self.task.next)
def walk(self, *args):
- (invalid_size, invalid_count) = (0, 0)
- (non_fd_size, non_fd_count) = (0, 0)
- (orphan_size, orphan_count) = (0, 0)
- (external_size, external_count) = (0, 0)
+ (self.invalid_size, self.invalid_count) = (0, 0)
+ (self.non_fd_size, self.non_fd_count) = (0, 0)
+ (self.orphan_size, self.orphan_count) = (0, 0)
+ (self.external_size, self.external_count) = (0, 0)
- orphan_iter = self.model.append(None, ["Orphans", '0'])
- external_iter = self.model.append(None, ["Orphans and/or Externals", '0'])
- invalid_iter = self.model.append(None, ["Invalid (broken image)", '0'])
- non_fd_iter = self.model.append(None, ["No Free Desktop compliant", '0'])
+ self.orphan_iter = self.model.append(None, ["Orphans", '0','',0])
+ self.external_iter = self.model.append(None, ["Orphans and/or Externals", '0','',0])
+ self.invalid_iter = self.model.append(None, ["Invalid (broken image)", '0','',0])
+ self.non_fd_iter = self.model.append(None, ["No Free Desktop compliant", '0','',0])
rootdir = os.path.expanduser('~/.thumbnails')
- homedir = os.path.expanduser('~')
for root, dirs, files in os.walk(rootdir):
i = 0.0
@@ -89,7 +104,7 @@
i = i + 1.0
uri = None
filename = join(root, name)
- shortname = filename.replace(homedir, '~')
+ shortname = filename.replace(self.homedir, '~')
self.progressbar.set_fraction(i / len(files))
text = "%d of %d" % (i, len(files))
@@ -111,59 +126,59 @@
if len(local_path) == 0 and uri is not None and len(uri):
# external resource (vfs method and/or orphan)
size = getsize(filename)
- external_size += size
- external_count += 1
+ self.external_size += size
+ self.external_count += 1
str_size = locale.format("%d", size, grouping=True)
- self.model.append(external_iter, [uri, str_size])
+ self.model.append(self.external_iter, [uri, str_size, filename, size])
- str_size = locale.format("%d", external_size, grouping=True)
- self.model.set(external_iter, 1, str_size)
- self.model.set(external_iter, 0,
- "Orphans and/or Externals [%d]" % external_count)
+ str_size = locale.format("%d", self.external_size, grouping=True)
+ self.model.set(self.external_iter, 1, str_size)
+ self.model.set(self.external_iter, 0,
+ "Orphans and/or Externals [%d]" % self.external_count)
elif len(local_path) and not os.path.lexists(local_path):
# orphan thumbnail
size = getsize(filename)
- orphan_size += size
- orphan_count += 1
- shortname = local_path.replace(homedir, '~')
+ self.orphan_size += size
+ self.orphan_count += 1
+ shortname = local_path.replace(self.homedir, '~')
str_size = locale.format("%d", size, grouping=True)
- self.model.append(orphan_iter, [shortname, str_size])
+ self.model.append(self.orphan_iter, [shortname, str_size, filename, size])
- str_size = locale.format("%d", orphan_size, grouping=True)
- self.model.set(orphan_iter, 1, str_size)
- self.model.set(orphan_iter, 0, "Orphans [%d]" % orphan_count)
+ str_size = locale.format("%d", self.orphan_size, grouping=True)
+ self.model.set(self.orphan_iter, 1, str_size)
+ self.model.set(self.orphan_iter, 0, "Orphans [%d]" % self.orphan_count)
elif uri is None:
# pixbuf is ok, but no FD compliant.
size = getsize(filename)
- non_fd_size += size
- non_fd_count += 1
+ self.non_fd_size += size
+ self.non_fd_count += 1
str_size = locale.format("%d", size, grouping=True)
- self.model.append(non_fd_iter, [shortname, str_size])
+ self.model.append(self.non_fd_iter, [shortname, str_size, filename, size])
- str_size = locale.format("%d", non_fd_size, grouping=True)
- self.model.set(non_fd_iter, 1, str_size)
- self.model.set(non_fd_iter, 0,
- "No Free Desktop compliant [%d]" % non_fd_count)
+ str_size = locale.format("%d", self.non_fd_size, grouping=True)
+ self.model.set(self.non_fd_iter, 1, str_size)
+ self.model.set(self.non_fd_iter, 0,
+ "Non Free Desktop compliant [%d]" % self.non_fd_count)
elif len(uri) == 0:
# thumbnail is not a valid pixbuf
size = getsize(filename)
- invalid_size += size
- invalid_count += 1
- shortname = filename.replace(homedir, '~')
+ self.invalid_size += size
+ self.invalid_count += 1
+ shortname = filename.replace(self.homedir, '~')
str_size = locale.format("%d", size, grouping=True)
- self.model.append(invalid_iter, [shortname, str_size])
+ self.model.append(self.invalid_iter, [shortname, str_size, filename, size])
- str_size = locale.format("%d", invalid_size, grouping=True)
- self.model.set(invalid_iter, 1, str_size)
- self.model.set(invalid_iter, 0,
- "Invalid (broken images) [%d]" % invalid_count)
+ str_size = locale.format("%d", self.invalid_size, grouping=True)
+ self.model.set(self.invalid_iter, 1, str_size)
+ self.model.set(self.invalid_iter, 0,
+ "Invalid (broken images) [%d]" % self.invalid_count)
collect()
yield True
@@ -172,13 +187,102 @@
self.progress.set_text(text)
yield True
+ if self.non_fd_count+self.external_count+self.orphan_count+self.invalid_count != 0:
+ self.removeall.set_sensitive(True)
+
+ self.button_stop.set_sensitive(False)
+ self.button_start.set_sensitive(True)
+
self.progressbar.set_text('Done')
self.progress.set_text('')
yield False
+
+ def on_treeview_cursor_changed(self, *args):
+ (path, col) = self.treeview.get_cursor()
+ iter = self.model.get_iter(path)
+ if self.model.iter_depth(iter) != 0:
+ value = self.model.get_value(iter, 2)
+ self.image_view.set_from_file(value)
+
+ def on_treeview_key_press_event(self, widget, event, *args):
+ if event.hardware_keycode == 107: # Delete key
+ (path, col) = self.treeview.get_cursor()
+ if path != None:
+ iter = self.model.get_iter(path)
+ if self.model.iter_depth(iter) != 0:
+ parent = self.model.iter_parent(iter)
+ value = self.model.get_value(iter, 2)
+ size = self.model.get_value(iter,3)
+ print "Deleting %s" % value
+ os.remove(value)
+ self.model.remove(iter)
+ if self.model.get_string_from_iter(parent) == self.model.get_string_from_iter(self.external_iter):
+ self.external_size -= size
+ self.external_count -= 1
+ str_size = locale.format("%d", self.external_size, grouping=True)
+ self.model.set(self.external_iter, 1, str_size)
+ if self.external_count != 0:
+ self.model.set(self.external_iter, 0,
+ "Orphans and/or Externals [%d]" % self.external_count)
+ else:
+ self.model.set(self.external_iter, 0, "Orphans and/or Externals")
+
+ elif self.model.get_string_from_iter(parent) == self.model.get_string_from_iter(self.orphan_iter):
+ self.orphan_size -= size
+ self.orphan_count -= 1
+ str_size = locale.format("%d", self.orphan_size, grouping=True)
+ self.model.set(self.orphan_iter, 1, str_size)
+ if self.orphan_count != 0:
+ self.model.set(self.orphan_iter, 0,
+ "Orphans [%d]" % self.orphan_count)
+ else:
+ self.model.set(self.orphan_iter, 0, "Orphans")
+
+ elif self.model.get_string_from_iter(parent) == self.model.get_string_from_iter(self.non_fd_iter):
+ self.non_fd_size -= size
+ self.non_fd_count -= 1
+ str_size = locale.format("%d", self.non_fd_size, grouping=True)
+ self.model.set(self.non_fd_iter, 1, str_size)
+ if self.non_fd_count != 0:
+ self.model.set(self.non_fd_iter, 0,
+ "Non Free Desktop compliant [%d]" % self.non_fd_count)
+ else:
+ self.model.set(self.non_fd_iter, 0, "Non Free Desktop compliant")
+
+ elif self.model.get_string_from_iter(parent) == self.model.get_string_from_iter(self.invalid_iter):
+ self.invalid_size -= size
+ self.invalid_count -= 1
+ str_size = locale.format("%d", self.invalid_size, grouping=True)
+ self.model.set(self.invalid_iter, 1, str_size)
+ if self.invalid_count != 0:
+ self.model.set(self.invalid_iter, 0,
+ "Invalid (broken images) [%d]" % self.invalid_count)
+ else:
+ self.model.set(self.invalid_iter, 0, "Invalid (broken images)")
+
+ if self.non_fd_count+self.external_count+self.orphan_count+self.invalid_count == 0:
+ self.removeall.set_sensitive(False)
+
+ if self.model.iter_is_valid(iter) == True:
+ self.treeview.set_cursor(path, None, False)
+
+ def on_RemoveAllButton_clicked(self, *args):
+
+ iter = self.model.get_iter_root()
+ while iter != None:
+ if self.model.iter_has_child(iter) == True:
+ child_iter = self.model.iter_children(iter)
+ while child_iter != None:
+ filename = self.model.get_value(child_iter,2)
+# print "Deleting %s" % filename
+ os.remove(filename)
+ child_iter = self.model.iter_next(child_iter)
+ iter = self.model.iter_next(iter)
+ self.model.clear()
+
if __name__ == "__main__":
- (lang_code, encoding) = locale.getdefaultlocale()
- locale.setlocale(locale.LC_ALL, lang_code)
+ locale.setlocale(locale.LC_ALL,locale.getdefaultlocale())
checker = ThumbnailChecker()
checker.show()