fixing problem with search path - fixed in src/searchfile.py
authorAlexandr Popov <popov2al@gmail.com>
Sun, 29 Mar 2009 17:12:30 +0000 (21:12 +0400)
committerAlexandr Popov <popov2al@gmail.com>
Sun, 29 Mar 2009 17:12:30 +0000 (21:12 +0400)
src/searchfile.py

index 08f2da0..dbd7236 100644 (file)
@@ -11,27 +11,26 @@ from heapq import nlargest
 
 class Search_File_Control(object):
     
-    def __init__(self, start_dir, count, ignore_dirs, show_func):
-        self.filelist = []
-        self.fl_cnt = count
-        self.srch_abs = Search_File_Abstraction(start_dir, ignore_dirs)
+    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):
-        #count, start_path = self.srch_present() 
-        for fsize, fpath in nlargest(self.fl_cnt, \
-                self.srch_abs.filegetter(stopit, label) ):
+        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, self.srch_abs.size_convert(fsize), fsize])
         show_func(self.filelist)
 
 
 class Search_File_Abstraction(object):
     
-    def __init__(self, startdir, ignore_dirs):
-        self.startdir = startdir
+    def __init__(self, ignore_dirs):
         self.ignore_dirs = ignore_dirs
         
     def size_convert(self, size):
@@ -41,12 +40,13 @@ class Search_File_Abstraction(object):
                 return unit % (size/1024.**i)
         return '>1024 Tb'
 
-    def filegetter(self, stopit, label):
+    def filegetter(self, startdir, stopit, label):
         """Generator of file sizes and paths based on os.walk."""
         # Проходим по всем папкам вглубь от заданного пути
-        for dirpath, dirnames, fnames in walk(self.startdir):
+        for dirpath, dirnames, fnames in walk(startdir):
         # Исключаем каталоги из поиска в соответствии со списком исключений
-            for ign_dir in self.ignore_dirs[:]:
+            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)
@@ -83,13 +83,13 @@ class Search_File_Presentation(object):
 
         # Кнопка "Показать"
         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.butt_start.connect('released', self.start_srch, st_func, show_func)
         
 
         self.search_hbox = gtk.HBox(False, 10)
@@ -101,6 +101,7 @@ class Search_File_Presentation(object):
         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.stopit, self.currfilelbl, show_func)