+++ /dev/null
-#!/usr/bin/env python
-# -*-coding: utf-8 -*-
-# vim: sw=4 ts=4 expandtab ai
-
-import gtk
-import pango
-from os import walk
-from os.path import join, abspath, normcase, basename, \
- isdir, getsize
-from heapq import nlargest
-
-from misc import size_hum_read
-
-class Search_File_Control(object):
-
- def __init__(self, get_start_data, ignore_dirs, show_func):
- self.start_data = get_start_data
- self.srch_abs = Search_File_Abstraction(ignore_dirs)
- self.srch_present = Search_File_Presentation(self.start_search, show_func)
-
- def get_ui(self):
- return self.srch_present.get_ui()
-
- def start_search(self, stopit, label, show_func):
- self.filelist = []
- start_path, count = self.start_data()
- for fsize, fpath in nlargest(count, \
- self.srch_abs.filegetter(start_path, stopit, label) ):
- self.filelist.append([fpath, size_hum_read(fsize), fsize])
- show_func(self.filelist)
-
-
-class Search_File_Abstraction(object):
-
- def __init__(self, ignore_dirs):
- self.ignore_dirs = ignore_dirs
-
- def filegetter(self, startdir, get_stopit, label):
- """Generator of file sizes and paths based on os.walk."""
- # Проходим по всем папкам вглубь от заданного пути
- for dirpath, dirnames, fnames in walk(startdir):
- # Исключаем каталоги из поиска в соответствии со списком исключений
- ignore_dirs = self.ignore_dirs
- for ign_dir in ignore_dirs[:]:
- for dirname in dirnames[:]:
- if ign_dir == normcase(join(abspath(dirpath), dirname)):
- dirnames.remove(dirname)
- ignore_dirs.remove(ign_dir)
-
- for fname in fnames:
- flpath = abspath(join(dirpath, fname))
- # Выводим текущий опрашиваемый файл в строку статуса
- label.set_text(flpath)
- # обновляем окно
- gtk.main_iteration()
- # Останавливаем цикл по нажатию кнопки стоп
- stopit = get_stopit()
- if stopit:
- stopit = False
- raise StopIteration
- # Проверяем можем ли мы определить размер файла - иначе пропускаем его
- try:
- # Возвращаем размер и полный путь файла
- yield getsize(flpath), flpath
- except OSError:
- continue
-
-class Search_File_Presentation(object):
-
- def __init__(self, st_func, show_func):
-
- # Строка вывода текущего осматриваемого файла
- self.currfilelbl = gtk.Label('---')
- self.currfilelbl.set_alignment(0, 0.5)
- self.currfilelbl.set_ellipsize(pango.ELLIPSIZE_MIDDLE)
- self.currfilelbl.set_padding(2, 2)
- currfilefrm = gtk.Frame()
- currfilefrm.add(self.currfilelbl)
-
- # Кнопка "Показать"
- self.butt_start = gtk.Button('Go')
- self.butt_start.connect('released', self.start_srch, st_func, show_func)
-
- # Кнопка "Остановить"
- self.butt_stop = gtk.Button('Stop')
- self.butt_stop.set_sensitive(False)
- self.stopit = False
- self.butt_stop.connect('clicked', self.stop_srch)
-
-
- self.search_hbox = gtk.HBox(False, 10)
- self.search_hbox.pack_start(currfilefrm, True, True, 0)
- self.search_hbox.pack_end(self.butt_start, False, False, 0)
- self.search_hbox.pack_end(self.butt_stop, False, False, 0)
-
- def get_ui(self):
- return self.search_hbox
-
- def start_srch(self, widget, start_func, show_func):
- self.stopit = False
- self.butt_stop.set_sensitive(True)
- self.butt_start.set_sensitive(False)
- start_func(self.get_stopit, self.currfilelbl, show_func)
- self.butt_stop.set_sensitive(False)
- self.butt_start.set_sensitive(True)
-
- def stop_srch(self, widget):
- self.stopit = True
- self.butt_stop.set_sensitive(False)
- self.butt_start.set_sensitive(True)
-
- def get_stopit(self):
- return self.stopit
+++ /dev/null
-#!/usr/bin/env python
-# -*-coding: utf-8 -*-
-# vim: sw=4 ts=4 expandtab ai
-
-import gtk
-
-class Gtk_Inp_Control(object):
- def __init__(self, start_path, count):
- self.input_ui = Gtk_Inp_Presentation(start_path, count)
-
- def get_ui(self):
- return self.input_ui.get_ui()
-
- def get_data(self):
- return self.input_ui.get_data()
-
-class Gtk_Inp_Abstraction(object):
- pass
-
-
-class Gtk_Inp_Presentation(object):
- def __init__(self, start_path, count):
- self.input_vbox = gtk.VBox(False, 0)
-
- # Строка ввода каталога
- self.srch_p_entr = gtk.Entry()
- self.srch_p_entr.set_text(start_path)
-
- label1 = gtk.Label('Files quantity')
- # Окошко ввода количества файлов, мин значение=1 макс=65536 по умолчанию 10
- adj = gtk.Adjustment(count, 1, 65536, 1, 5, 0)
- self.file_cnt = gtk.SpinButton(adj, 0, 0)
-
- hbox = gtk.HBox(False, 0)
- hbox.pack_start(label1, False, False, 5)
- hbox.pack_start(self.file_cnt, False, False, 0)
-
- self.input_vbox.pack_start(self.srch_p_entr, False, False, 0)
- self.input_vbox.pack_start(hbox, False, False, 0)
-
- def get_ui(self):
- return self.input_vbox
-
- def get_data(self):
- return self.srch_p_entr.get_text(), int( self.file_cnt.get_value() )