# -*-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())