X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fpkgsearch.py;h=aea925726a9a7effa49adf96928b1d046a89103f;hb=424dd055b9952bf9bbe20d636851ed0a00f747b9;hp=56c253b54810c7a9559b110808b2b2ae4815b35d;hpb=ebf54fe879699d577020031d3c4a9357a876c0ac;p=findit diff --git a/src/pkgsearch.py b/src/pkgsearch.py index 56c253b..aea9257 100644 --- a/src/pkgsearch.py +++ b/src/pkgsearch.py @@ -2,31 +2,93 @@ # -*-coding: utf-8 -*- # vim: sw=4 ts=4 expandtab ai +import gtk import apt_pkg from heapq import nlargest +from misc import size_hum_read -def pkggetter(cache): - for pkg in cache.Packages: - # pkg is from a list of packages, sorted by name. - if pkg.CurrentState == apt_pkg.CurStateInstalled: - yield [version.InstalledSize for version in pkg.VersionList][0], pkg.Name - -def size_convert(size): - """Return string with file size in b or Kb or Mb or Gb or Tb.""" - for i, unit in enumerate(['%d b', '%.1f Kb', '%.2f Mb', '%.3f Gb', '%.4f Tb']): - if size < 1024**(i+1): - return unit % (size/1024.**i) - return '>1024 Tb' - -def main(): - """The main function.""" - apt_pkg.InitConfig() - apt_pkg.InitSystem() - - cache = apt_pkg.GetCache() - count = 50 - for size, packg in nlargest(count, pkggetter(cache)): - print packg, size_convert(size) - -if __name__ == "__main__": - main() +class Search_Pkg_Control(object): + + def __init__(self, config, show_funct): + win_width = config.get('window_width') + win_height = config.get('window_height') + count = config.get('default_count') + self.show_func = show_funct + self.abstr = Search_Pkg_Abstraction() + self.present = Search_Pkg_Presentation(win_width, win_height, count, self.start_search) + + def start_search(self, count): + pkglist = [] + for psize, packg in nlargest(count, self.abstr.pkggetter()): + pkglist.append([packg, size_hum_read(psize), psize]) + print pkglist + self.show_func.show(pkglist) + self.show_func.run() + + def run(self): + self.present.run() + + +class Search_Pkg_Abstraction(object): + + def __init__(self): + apt_pkg.InitConfig() + apt_pkg.InitSystem() + self.cache = apt_pkg.GetCache() + + def pkggetter(self): + for pkg in self.cache.Packages: + # pkg is from a list of packages, sorted by name. + if pkg.CurrentState == apt_pkg.CurStateInstalled: + yield [version.InstalledSize for version in pkg.VersionList][0], pkg.Name + + +class Search_Pkg_Presentation(gtk.Window): + + def __init__(self, win_width, win_height, count, st_func): + """Create MainWindow.""" + # Создаем новое окно + gtk.Window.__init__(self) + self.set_default_size(win_width, win_height) + self.set_border_width(4) + self.connect('delete_event', gtk.main_quit) + + 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.butt_start = gtk.Button('Go >') + self.butt_start.connect('released', self.start_srch, st_func) + + self.butt_prev = gtk.Button('< Previous') + #self.butt_prev.connect('released', self.show_prev, prev_window) + + hbox1 = gtk.HBox(False, 0) + hbox1.pack_start(self.butt_prev, False, False, 5) + hbox1.pack_start(self.butt_start, False, False, 5) + + vbox = gtk.VBox(False, 0) + vbox.pack_start(hbox, False, False, 5) + vbox.pack_start(hbox1, False, False, 5) + + self.add(vbox) + + #def get_ui(self): + # return self + + def get_data(self): + return int( self.file_cnt.get_value() ) + + def run(self): + self.show_all() + gtk.main() + + def start_srch(self, widget, start_func): + self.destroy() + gtk.main_quit() + start_func(self.get_data())