#!/usr/bin/env python2.5

#
# PyPackager
#
# Copyright (c) 2007 Khertan (Benoit HERVIER)
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#        
# Khertan (Benoit HERVIER) khertan@khertan.net
#
import gtk
import hildon
import pango
import gtk.glade
import debfile
import osso
import commands
import os
from cPickle import Pickler, Unpickler
from subprocess import *

###############################################################################
# @brief PyWindow
###############################################################################
class py_window(hildon.Window):
  """
  Create PyEditor window
  """
  def __init__(self, app,context):
    """
    Window initialisation.
    """
    self.app=app
    self.osso_context=context
    hildon.Window.__init__(self)
    self.app.add_window(self)
    self.set_title ("PyPackager")
    self.connect ('delete-event', self.cb_win_close)
    self.connect("key-press-event", self.on_key_press)
    self.connect("window-state-event", self.on_window_state_change)
    self.window_in_fullscreen = False #The window isn't in full screen mode initially.
    self.currentProject="Untitled"
    # vbox
    #self.vbox = gtk.VBox (False, 1)
    #self.vbox.set_border_width (1)
    #self.add (self.vbox)
    #self.vbox.show ()

    accel_group = gtk.AccelGroup ()
    self.add_accel_group (accel_group)

    self.create_menu()
    self.create_gui()

    self.show_all()

  def create_gui(self):
    self.wTree=gtk.glade.XML("/usr/lib/pypackager/pypackager.glade2")
    #self.wTree=gtk.glade.XML("pypackager.glade2")

    #reparent the vbox1 from glade to self.window
    self.vbox1 = self.wTree.get_widget("vbox1")
    self.vbox1.reparent(self)

    self.create_toolbar()
    #self.toolbar1 = self.wTree.get_widget("toolbar1")
    #self.add_toolbar(self.toolbar1)

    self.bp_name = self.wTree.get_widget("bp_name")
    self.bp_version = self.wTree.get_widget("bp_version")
    self.bp_section = self.wTree.get_widget("bp_section")
    self.bp_architecture = self.wTree.get_widget("bp_architecture")
    self.bp_priority = self.wTree.get_widget("bp_priority")
    self.bp_maintainer = self.wTree.get_widget("bp_maintainer")
    self.bp_depends = self.wTree.get_widget("bp_depends")
    self.bp_description = self.wTree.get_widget("bp_description")
    #self.bp_description.modify_font (pango.FontDescription ("Monospace 10"))
    self.bp_description.get_buffer().set_text("Enter here the description of your package")#\nThe area is about the same size as the text that can be displayed in the Osso Application Manager")
    self.bp_source = self.wTree.get_widget("bp_source")
    self.bp_icon = self.wTree.get_widget("bp_icon")
    self.bp_postinst = self.wTree.get_widget("bp_postinst")
    self.bp_postrm = self.wTree.get_widget("bp_postrm")

    self.bp_postinst.get_buffer().set_text("")
    self.bp_postrm.get_buffer().set_text("")
    self.bp_preinst = self.wTree.get_widget("bp_preinst")
    self.bp_prerm = self.wTree.get_widget("bp_prerm")
    self.bp_preinst.get_buffer().set_text("")
    self.bp_prerm.get_buffer().set_text("")

    self.bp_changes = self.wTree.get_widget("bp_changes")
    self.bp_changes.get_buffer().set_text("")

    self.bp_repository = self.wTree.get_widget("bp_repository")
    self.bp_distribution = self.wTree.get_widget("bp_distribution")
    self.bp_urgency = self.wTree.get_widget("bp_urgency")

    self.bp_source2 = self.wTree.get_widget("bp_source2")
    self.bp_gpg = self.wTree.get_widget("bp_gpg")
    self.bp_builddepends = self.wTree.get_widget("bp_builddepends")
    #self.bp_create = self.wTree.get_widget("tb_create")
    #self.bp_create.connect("clicked", self.create_deb)

    self.bp_choose = self.wTree.get_widget("bp_choose")
    self.bp_choose.connect("clicked", self.choose_folder,None)

    self.bp_choose2 = self.wTree.get_widget("bp_choose2")
    self.bp_choose2.connect("clicked", self.choose_icon,None) 

    self.bp_choose3 = self.wTree.get_widget("bp_choose3")
    self.bp_choose3.connect("clicked", self.choose_source,None) 

    self.bp_login = self.wTree.get_widget("bp_login")
    self.bp_packageversion = self.wTree.get_widget("bp_packageversion")
    #self.tb_open = self.wTree.get_widget("tb_open")
    #self.tb_open.connect("clicked", self.open,None)

    #self.tb_save = self.wTree.get_widget("tb_save")
    #self.tb_save.connect("clicked", self.save,None)

  def save_file_gtk_dialog(self):
    if self.currentProject=="Untitled":
      return self.save_as_file_gtk_dialog()
    else:
      return self.currentProject

  def save_as_file_gtk_dialog(self):
    filepath=""
    dialog = hildon.FileChooserDialog(self, "save")
    #dialog = gtk.FileChooserDialog('Open Project', None, gtk.FILE_CHOOSER_ACTION_SAVE, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK))
    if(dialog.run()==gtk.RESPONSE_OK) and (dialog.get_filename()!=None):
      try:
        filepath = dialog.get_filename()
        dialog.destroy()
      except StandardError,e:
        print e
        dialog.destroy()
        self.open_file_gtk_dialog()
    else:
       dialog.destroy()
    return filepath

  def open_file_gtk_dialog(self):
    filepath=""
    dialog = gtk.FileChooserDialog('Open Project', None, gtk.FILE_CHOOSER_ACTION_OPEN, (gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK))
    if(dialog.run()==gtk.RESPONSE_OK) and (dialog.get_filename()!=None):
      try:
        filepath = dialog.get_filename()
        dialog.destroy()
      except StandardError,e:
        print e
        dialog.destroy()
        self.open_file_gtk_dialog()
    else:
       dialog.destroy()
    return filepath

  def cb_tb_open(self,widget,*data):
    print "open"
    filepath = self.open_file_gtk_dialog()
    if filepath!="":
      self.currentProject=filepath
      file = Unpickler(open(filepath,'r'))
      project = ()
      try:
        project = file.load()
      finally:
        self.wTree.get_widget("bp_name").set_text(project[0])
        self.wTree.get_widget("bp_version").set_text(project[1])
        self.wTree.get_widget("bp_section").set_text(project[2])
        self.wTree.get_widget("bp_architecture").set_text(project[3])
        self.wTree.get_widget("bp_priority").set_text(project[4])
        self.wTree.get_widget("bp_maintainer").set_text(project[5])
        self.wTree.get_widget("bp_depends").set_text(project[6])
        self.wTree.get_widget("bp_description").get_buffer().set_text(project[7])
        self.wTree.get_widget("bp_source").set_text(project[8])
        self.wTree.get_widget("bp_icon").set_text(project[9])
        self.wTree.get_widget("bp_postinst").get_buffer().set_text(project[10])
        self.wTree.get_widget("bp_postrm").get_buffer().set_text(project[11])
        self.wTree.get_widget("bp_preinst").get_buffer().set_text(project[12])
        self.wTree.get_widget("bp_prerm").get_buffer().set_text(project[13])
        self.wTree.get_widget("bp_changes").get_buffer().set_text(project[14])
        self.wTree.get_widget("bp_repository").set_text(project[15])
        self.wTree.get_widget("bp_distribution").set_text(project[16])
        self.wTree.get_widget("bp_urgency").set_text(project[17])
        self.wTree.get_widget("bp_gpg").set_text(project[18])
        self.wTree.get_widget("bp_builddepends").set_text(project[19])
        self.wTree.get_widget("bp_source2").set_text(project[20])
        self.wTree.get_widget("bp_login").set_text(project[21])
        self.wTree.get_widget("bp_packageversion").set_text(project[22])

  def cb_tb_save(self,widget,*data):
    print "save"
    project = (self.wTree.get_widget("bp_name").get_text(),
               self.wTree.get_widget("bp_version").get_text(),
               self.wTree.get_widget("bp_section").get_text(),
               self.wTree.get_widget("bp_architecture").get_text(),
               self.wTree.get_widget("bp_priority").get_text(),
               self.wTree.get_widget("bp_maintainer").get_text(),
               self.wTree.get_widget("bp_depends").get_text(),
               self.wTree.get_widget("bp_description").get_buffer().get_text(self.wTree.get_widget("bp_description").get_buffer().get_start_iter(), self.wTree.get_widget("bp_description").get_buffer().get_end_iter()),
               self.wTree.get_widget("bp_source").get_text(),
               self.wTree.get_widget("bp_icon").get_text(),
               self.wTree.get_widget("bp_postinst").get_buffer().get_text(self.wTree.get_widget("bp_postinst").get_buffer().get_start_iter(), self.wTree.get_widget("bp_postinst").get_buffer().get_end_iter()),
               self.wTree.get_widget("bp_postrm").get_buffer().get_text(self.wTree.get_widget("bp_postrm").get_buffer().get_start_iter(), self.wTree.get_widget("bp_postrm").get_buffer().get_end_iter()),
               self.wTree.get_widget("bp_preinst").get_buffer().get_text(self.wTree.get_widget("bp_preinst").get_buffer().get_start_iter(), self.wTree.get_widget("bp_preinst").get_buffer().get_end_iter()),
               self.wTree.get_widget("bp_prerm").get_buffer().get_text(self.wTree.get_widget("bp_prerm").get_buffer().get_start_iter(), self.wTree.get_widget("bp_prerm").get_buffer().get_end_iter()),
               self.wTree.get_widget("bp_changes").get_buffer().get_text(self.wTree.get_widget("bp_changes").get_buffer().get_start_iter(), self.wTree.get_widget("bp_changes").get_buffer().get_end_iter()),
               self.wTree.get_widget("bp_repository").get_text(),
               self.wTree.get_widget("bp_distribution").get_text(),
               self.wTree.get_widget("bp_urgency").get_text(),
               self.wTree.get_widget("bp_gpg").get_text(),
               self.wTree.get_widget("bp_builddepends").get_text(),
               self.wTree.get_widget("bp_source2").get_text(),
               self.wTree.get_widget("bp_login").get_text(),
               self.wTree.get_widget("bp_packageversion").get_text(),

               )
    print project
    filepath = self.save_file_gtk_dialog()
    if filepath!="":
      file = Pickler(open(filepath,'w'))
      file.dump(project)
      self.currentProject = filepath

  def cb_tb_save_as(self,widget,*data):
    print "save"
    project = (self.wTree.get_widget("bp_name").get_text(),
               self.wTree.get_widget("bp_version").get_text(),
               self.wTree.get_widget("bp_section").get_text(),
               self.wTree.get_widget("bp_architecture").get_text(),
               self.wTree.get_widget("bp_priority").get_text(),
               self.wTree.get_widget("bp_maintainer").get_text(),
               self.wTree.get_widget("bp_depends").get_text(),
               self.wTree.get_widget("bp_description").get_buffer().get_text(self.wTree.get_widget("bp_description").get_buffer().get_start_iter(), self.wTree.get_widget("bp_description").get_buffer().get_end_iter()),
               self.wTree.get_widget("bp_source").get_text(),
               self.wTree.get_widget("bp_icon").get_text(),
               self.wTree.get_widget("bp_postinst").get_buffer().get_text(self.wTree.get_widget("bp_postinst").get_buffer().get_start_iter(), self.wTree.get_widget("bp_postinst").get_buffer().get_end_iter()),
               self.wTree.get_widget("bp_postrm").get_buffer().get_text(self.wTree.get_widget("bp_postrm").get_buffer().get_start_iter(), self.wTree.get_widget("bp_postrm").get_buffer().get_end_iter()),
               self.wTree.get_widget("bp_preinst").get_buffer().get_text(self.wTree.get_widget("bp_preinst").get_buffer().get_start_iter(), self.wTree.get_widget("bp_preinst").get_buffer().get_end_iter()),
               self.wTree.get_widget("bp_prerm").get_buffer().get_text(self.wTree.get_widget("bp_prerm").get_buffer().get_start_iter(), self.wTree.get_widget("bp_prerm").get_buffer().get_end_iter()),
               self.wTree.get_widget("bp_changes").get_buffer().get_text(self.wTree.get_widget("bp_changes").get_buffer().get_start_iter(), self.wTree.get_widget("bp_changes").get_buffer().get_end_iter()),
               self.wTree.get_widget("bp_repository").get_text(),
               self.wTree.get_widget("bp_distribution").get_text(),
               self.wTree.get_widget("bp_urgency").get_text(),
               self.wTree.get_widget("bp_gpg").get_text(),
               self.wTree.get_widget("bp_builddepends").get_text(),
               self.wTree.get_widget("bp_source2").get_text(),
               self.wTree.get_widget("bp_login").get_text(),
               self.wTree.get_widget("bp_packageversion").get_text(),

               )
    #print project
    filepath = self.save_as_file_gtk_dialog()
    if filepath!="":
      file = Pickler(open(filepath,'w'))
      file.dump(project)
      self.currentProject = filepath

  def cleanMacFile(self,folder):
    for folder,ufolders,files in os.walk(folder.get_text()):
      for file in files:
        if file.startswith(".DS_Store") or file.startswith("._"):
          #print os.path.join(folder,file)
          os.remove(os.path.join(folder,file))

  def choose_folder(self,widget,data):
    dialog = gtk.FileChooserDialog("Please choose a folder",self,gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER,(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK))
    #dialog = gtk.FileChooserDialog("Please choose a folder",self,"open",(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK))
    if (dialog.run()==gtk.RESPONSE_OK):
      self.bp_source.set_text(dialog.get_filename())
      self.cleanMacFile(self.bp_source)
    dialog.destroy()

  def choose_source(self,widget,data):
    dialog = gtk.FileChooserDialog("Please choose a folder",self,gtk.FILE_CHOOSER_ACTION_SELECT_FOLDER,(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK))
    #dialog = gtk.FileChooserDialog("Please choose a folder",self,"open",(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK))
    if (dialog.run()==gtk.RESPONSE_OK):
      self.bp_source2.set_text(dialog.get_filename())
      self.cleanMacFile(self.bp_source2)
    dialog.destroy()

  def choose_icon(self,widget,data):
    dialog = gtk.FileChooserDialog("Please choose an for the package",self,gtk.FILE_CHOOSER_ACTION_OPEN,(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK))
    #dialog = gtk.FileChooserDialog("Please choose a folder",self,"open",(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_OK))
    if (dialog.run()==gtk.RESPONSE_OK):
      self.bp_icon.set_text(dialog.get_filename())
      #self.cleanMacFile()
    dialog.destroy()

  def getbase64(self,iconpath):
    from base64 import encode, encodestring
    #print "test"
    b64=""
    if iconpath<>"":
      fi=open(iconpath,'r')
      #fo=open("/tmp/pypackager.tmp","w")
      #encode(fi,fo)
      b64=encodestring(fi.read(1024*65535))
      fi.close()
      #fo.close()
      #fi = open("/tmp/pypackager.tmp","r")
      #for line in fi:
      #  b64 = b64 + " " + line
      #fi.close()
    b64=b64.replace("\n","\n ")
    return b64

  def sign_dsc(self,widget,*data):
    from changefile import ChangeFile
    from time import gmtime, strftime

    print "signing and uploading"
    fileHandle = open('/tmp/pypackager.tmp', 'w')
    fileHandle.write('#!/bin/sh\n')

    fileHandle.write('gpg --local-user '+self.bp_gpg.get_text()+' --clearsign '+os.path.join(self.bp_source.get_text(),'..',self.bp_name.get_text()+'-'+self.bp_version.get_text()+'-'+self.bp_packageversion.get_text()+ '.dsc')+'\n')
    fileHandle.write('mv '+os.path.join(self.bp_source.get_text(),'..',self.bp_name.get_text()+'-'+self.bp_version.get_text()+'-'+self.bp_packageversion.get_text()+ '.dsc.asc')+' '+os.path.join(self.bp_source.get_text(),'..',self.bp_name.get_text()+'-'+self.bp_version.get_text()+'-'+self.bp_packageversion.get_text()+ '.dsc')+'\n')
    fileHandle.write('\nread -p "Close this window to continue ..." foo')
    fileHandle.write('\nexit')
    fileHandle.close()
    commands.getoutput("chmod 777 /tmp/pypackager.tmp")
    #commands.getoutput("/usr/bin/osso-xterm /tmp/pygtkeditor.tmp")
    call(['/usr/bin/osso-xterm','/tmp/pypackager.tmp'])

  def upload_deb(self,widget,*data):
    from changefile import ChangeFile
    from time import gmtime, strftime

    print "signing and uploading"
    #fileHandle = open('/tmp/pypackager.tmp', 'w')
#    fileHandle.write('#!/bin/sh\n')
#
#    fileHandle.write('gpg --local-user '+self.bp_gpg.get_text()+' --clearsign '+os.path.join(self.bp_source.get_text(),'..',self.bp_name.get_text()+'-'+self.bp_version.get_text()+ '.dsc')+'\n')
#    fileHandle.write('mv '+os.path.join(self.bp_source.get_text(),'..',self.bp_name.get_text()+'-'+self.bp_version.get_text()+ '.dsc.asc')+' '+os.path.join(self.bp_source.get_text(),'..',self.bp_name.get_text()+'-'+self.bp_version.get_text()+ '.dsc')+'\n')
#    fileHandle.close()
#    commands.getoutput("chmod 777 /tmp/pypackager.tmp")
#    #commands.getoutput("/usr/bin/osso-xterm /tmp/pygtkeditor.tmp")
#    call(['/usr/bin/osso-xterm','/tmp/pypackager.tmp'])
#
    #commands.getoutput('/usr/bin/osso-xterm gpg --local-user '+self.bp_gpg.get_text()+' --clearsign '+os.path.join(self.bp_source.get_text(),'..',self.bp_name.get_text()+'-'+self.bp_version.get_text()+ '.dsc'))

    open(os.path.join(self.bp_source.get_text(),'..',self.bp_name.get_text()+'-'+self.bp_version.get_text()+'-'+self.bp_packageversion.get_text()+'_'+self.bp_architecture.get_text()+ '.changes'),"wb").write(self.theChangeFile.getContent())

    fileHandle = open('/tmp/pypackager.tmp', 'w')
    fileHandle.write('#!/bin/sh\n')
    fileHandle.write('gpg --local-user '+self.bp_gpg.get_text()+' --clearsign '+os.path.join(self.bp_source.get_text(),'..',self.bp_name.get_text()+'-'+self.bp_version.get_text()+'-'+self.bp_packageversion.get_text()+'_'+self.bp_architecture.get_text()+ '.changes')+'\n')
    fileHandle.write('mv '+os.path.join(self.bp_source.get_text(),'..',self.bp_name.get_text()+'-'+self.bp_version.get_text()+'-'+self.bp_packageversion.get_text()+'_'+self.bp_architecture.get_text()+ '.changes.asc')+' '+os.path.join(self.bp_source.get_text(),'..',self.bp_name.get_text()+'-'+self.bp_version.get_text()+'-'+self.bp_packageversion.get_text()+'_'+self.bp_architecture.get_text()+ '.changes')+'\n')

    fileHandle.write('scp '+os.path.join(self.bp_source.get_text(),'..',self.bp_name.get_text()+'-'+self.bp_version.get_text()+'-'+self.bp_packageversion.get_text()+'_'+self.bp_architecture.get_text()+ '.deb')+' '+self.bp_login.get_text()+'@garage.maemo.org:/var/www/'+self.bp_repository.get_text()+'/incoming/'+self.bp_distribution.get_text()+'\n')
    fileHandle.write('scp '+os.path.join(self.bp_source.get_text(),'..',self.bp_name.get_text()+'-'+self.bp_version.get_text()+'-'+self.bp_packageversion.get_text()+ '.tar.gz')+' '+self.bp_login.get_text()+'@garage.maemo.org:/var/www/'+self.bp_repository.get_text()+'/incoming/'+self.bp_distribution.get_text()+'\n')
    fileHandle.write('scp '+os.path.join(self.bp_source.get_text(),'..',self.bp_name.get_text()+'-'+self.bp_version.get_text()+'-'+self.bp_packageversion.get_text()+ '.dsc')+' '+self.bp_login.get_text()+'@garage.maemo.org:/var/www/'+self.bp_repository.get_text()+'/incoming/'+self.bp_distribution.get_text()+'\n')
    fileHandle.write('scp '+os.path.join(self.bp_source.get_text(),'..',self.bp_name.get_text()+'-'+self.bp_version.get_text()+'-'+self.bp_packageversion.get_text()+'_'+self.bp_architecture.get_text()+ '.changes')+' '+self.bp_login.get_text()+'@garage.maemo.org:/var/www/'+self.bp_repository.get_text()+'/incoming/'+self.bp_distribution.get_text()+'\n')
#    print 'scp '+os.path.join(self.bp_source.get_text(),'..',self.bp_name.get_text()+'-'+self.bp_version.get_text()+'.'+self.bp_architecture.get_text()+ '.changes')+' '+self.bp_login.get_text()+'@garage.maemo.org:/var/www/'+self.bp_repository.get_text()+'/incoming/'+'\n')
    fileHandle.write('\nread -p "Press ENTER to continue ..." foo')
    fileHandle.write('\nexit')
    fileHandle.close()
    commands.getoutput("chmod 777 /tmp/pypackager.tmp")
    #commands.getoutput("/usr/bin/osso-xterm /tmp/pygtkeditor.tmp")
    Popen('/usr/bin/osso-xterm /tmp/pypackager.tmp',shell=True,stdout=None)

    note = osso.SystemNote(self.osso_context)
    result = note.system_note_infoprint("Opening xterm ...")

  def create_deb(self,widget,*data):
    print "creation in progress"
    self.cleanMacFile(self.bp_source)
    self.cleanMacFile(self.bp_source2)
    from debfile import MaemoPackage, ControlFile
    from MaemoSourcesPackage import MaemoSourcesPackage
    from changefile import ChangeFile
    from dscfile import DscFile
    from time import gmtime, strftime
    import locale

    theMaemoPackage = MaemoPackage(
       ControlFile(Icon=self.getbase64(self.bp_icon.get_text()),
      PreInst=self.bp_preinst.get_buffer().get_text(self.wTree.get_widget("bp_preinst").get_buffer().get_start_iter(), self.wTree.get_widget("bp_preinst").get_buffer().get_end_iter()),
      PostInst=self.bp_postinst.get_buffer().get_text(self.wTree.get_widget("bp_postinst").get_buffer().get_start_iter(), self.wTree.get_widget("bp_postinst").get_buffer().get_end_iter()),
      PreRm=self.bp_prerm.get_buffer().get_text(self.wTree.get_widget("bp_prerm").get_buffer().get_start_iter(), self.wTree.get_widget("bp_prerm").get_buffer().get_end_iter()),
      PostRm=self.bp_postrm.get_buffer().get_text(self.wTree.get_widget("bp_postrm").get_buffer().get_start_iter(), self.wTree.get_widget("bp_postrm").get_buffer().get_end_iter()),
      Package=self.bp_name.get_text(),
      Version=self.bp_version.get_text(),
      Section=self.bp_section.get_text(),
      Priority=self.bp_priority.get_text(),
      Architecture=self.bp_architecture.get_text(),
      Maintainer=self.bp_maintainer.get_text(),
      Depends=self.bp_depends.get_text(),
      Description=self.bp_description.get_buffer().get_text(self.wTree.get_widget("bp_description").get_buffer().get_start_iter(), self.wTree.get_widget("bp_description").get_buffer().get_end_iter()),

      #XBMaemoIcon26=test
      #XB-Maemo-Icon-26
      #base64.encodestring(chaine)
      ),
      self.bp_source.get_text()
      )

    theSourcesPackage = MaemoSourcesPackage(self.bp_source2.get_text())
    old_locale,iso=locale.getlocale(2)
    locale.setlocale(2,'en_US')

    theDscFile = DscFile(self.bp_version.get_text(),
                         self.bp_builddepends.get_text(),
                         (
                         os.path.join(self.bp_source.get_text(),'..',self.bp_name.get_text()+'-'+self.bp_version.get_text()+'-'+self.bp_packageversion.get_text()+ '.tar.gz'),
                         ),
                         Format='1.0',
                         Source=self.bp_name.get_text(),
                         Version=self.bp_version.get_text(),
                         Binary=self.bp_name.get_text(),
                         Maintainer=self.bp_maintainer.get_text(),                             
                         Architecture=self.bp_architecture.get_text(),

                        )

    self.theChangeFile = ChangeFile(
                              self.bp_maintainer.get_text(),
                              self.bp_description.get_buffer().get_text(self.wTree.get_widget("bp_description").get_buffer().get_start_iter(), self.wTree.get_widget("bp_description").get_buffer().get_end_iter()),
                              self.bp_changes.get_buffer().get_text(self.wTree.get_widget("bp_changes").get_buffer().get_start_iter(), self.wTree.get_widget("bp_changes").get_buffer().get_end_iter()),
                              (
                                     os.path.join(self.bp_source.get_text(),'..',self.bp_name.get_text()+'-'+self.bp_version.get_text()+'-'+self.bp_packageversion.get_text()+'_'+self.bp_architecture.get_text()+ '.deb'),
                                     os.path.join(self.bp_source.get_text(),'..',self.bp_name.get_text()+'-'+self.bp_version.get_text()+'-'+self.bp_packageversion.get_text()+ '.tar.gz'),
                                     os.path.join(self.bp_source.get_text(),'..',self.bp_name.get_text()+'-'+self.bp_version.get_text()+'-'+self.bp_packageversion.get_text()+ '.dsc'),
                              ),
                              self.bp_section.get_text(),
                              self.bp_repository.get_text(),
                              Format='1.7',
                              Date=strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime()),
                              Source=self.bp_name.get_text(),
                              Binary=self.bp_name.get_text(),
                              Architecture=self.bp_architecture.get_text(),
                              Version=self.bp_version.get_text(),
                              Distribution=self.bp_distribution.get_text(),
                              Urgency=self.bp_urgency.get_text(),
                              Maintainer=self.bp_maintainer.get_text()                             
                              )

    locale.setlocale(2,old_locale)
    #MaemoChangeFile()
    #MaemoDscFile()

    note = osso.SystemNote(self.osso_context)
    result = note.system_note_infoprint("Building binary package ...")
    open(os.path.join(self.bp_source.get_text(),'..',self.bp_name.get_text()+'-'+self.bp_version.get_text()+'-'+self.bp_packageversion.get_text()+'_'+self.bp_architecture.get_text()+ '.deb'),"wb").write(theMaemoPackage.packed())
    print "binary package created."

    result = note.system_note_infoprint("Building sources package ...")
    open(os.path.join(self.bp_source.get_text(),'..',self.bp_name.get_text()+'-'+self.bp_version.get_text()+'-'+self.bp_packageversion.get_text()+ '.tar.gz'),"wb").write(theSourcesPackage.packed())
    print "sources package created."

    result = note.system_note_infoprint("Building dsc file ...")
    open(os.path.join(self.bp_source.get_text(),'..',self.bp_name.get_text()+'-'+self.bp_version.get_text()+'-'+self.bp_packageversion.get_text()+ '.dsc'),"wb").write(theDscFile.content)
    print "dsc file created."

    result = note.system_note_infoprint("Building changes file ...")
    open(os.path.join(self.bp_source.get_text(),'..',self.bp_name.get_text()+'-'+self.bp_version.get_text()+'-'+self.bp_packageversion.get_text()+'_'+self.bp_architecture.get_text()+ '.changes'),"wb").write(self.theChangeFile.getContent())
    print "changes file created."

    result = note.system_note_infoprint("All files built")
    #print "."+self.bp_postrm.get_buffer().get_text(self.wTree.get_widget("bp_postrm").get_buffer().get_start_iter(), self.wTree.get_widget("bp_postrm").get_buffer().get_end_iter())+"."

  ###############################################################################
  # @brief Insert button with callback
  ###############################################################################
  def insert_with_callback (self,toolbar, stock_id, func):
    button = gtk.ToolButton (stock_id)
    toolbar.insert (button, -1)
    button.connect ('clicked', func)

  ###############################################################################
  # @brief Create Toolbar
  ###############################################################################
  def create_toolbar (self):
    toolbar = gtk.Toolbar ()
    toolbar.set_border_width (3)
    toolbar.set_orientation ('horizontal')
    toolbar.set_style ('both-horiz')
    self.insert_with_callback (toolbar, 'gtk-open', self.cb_tb_open)
    self.insert_with_callback (toolbar, 'gtk-save', self.cb_tb_save)
    self.insert_with_callback (toolbar, 'gtk-save-as', self.cb_tb_save_as)
    toolbar.insert(gtk.SeparatorToolItem(),-1)
    toolbar.insert(gtk.SeparatorToolItem(),-1)
    self.insert_with_callback (toolbar, 'gtk-execute', self.create_deb)
    toolbar.insert(gtk.SeparatorToolItem(),-1)
    self.insert_with_callback (toolbar, 'gtk-convert', self.sign_dsc)
    toolbar.insert(gtk.SeparatorToolItem(),-1)
    self.insert_with_callback (toolbar, 'gtk-convert', self.upload_deb)
    self.add_toolbar (toolbar)

  def create_menu(self):
    self.menubar = gtk.Menu ()
    self.set_menu(self.menubar)

    item = gtk.MenuItem ('_Help')
    item.show ()
    self.menubar.append (item)

    menu = gtk.Menu ()
    menu.show ()
    item.set_submenu (menu)

    item = gtk.ImageMenuItem (gtk.STOCK_ABOUT)
    item.connect ("activate", self.onAbout)
    item.show ()
    menu.append (item)

  #############################################################################
  # @brief Main Window state changed callback
  #############################################################################
  def on_window_state_change(self, widget, event, *args):
    if event.new_window_state & gtk.gdk.WINDOW_STATE_FULLSCREEN:
      self.window_in_fullscreen = True
    else:
      self.window_in_fullscreen = False

  #############################################################################
  # @brief Main Window keypressed callback
  #############################################################################
  def on_key_press(self, widget, event, *args):
    if event.keyval == gtk.keysyms.F6:
    # The "Full screen" hardware key has been pressed
      if self.window_in_fullscreen:
        self.unfullscreen ()
      else:
        self.fullscreen ()

  #############################################################################
  # @brief Main Window close callback
  #############################################################################
  def cb_win_close(self,widget,*data):
    self.app.remove_window(self)
    gtk.main_quit()

  #############################################################################
  # @brief About
  #############################################################################
  def onAbout(self, widget):
    dialog = gtk.AboutDialog()
    dialog.set_name("PyPackager")
    dialog.set_version("v0.7.0")
    dialog.set_icon("/usr/share/pixmaps/pypackager.png")
    dialog.set_license("This program is free software; you can redistribute it and/or\nmodify it under the terms of the GNU General Public License\nas published by the Free Software Foundation; either version 2\nof the License, or (at your option) any later version.")
    dialog.set_copyright("By Benoit HERVIER (aka Khertan)")
    dialog.set_website("http://khertan.net/")
    dialog.connect ("response", lambda d, r: d.destroy())
    dialog.show()

if __name__ == '__main__':
  try:
    osso_context = osso.Context("net.khertan.pypackager", "0.7.0", False)
  except:
    osso_context = None
  app = hildon.Program()
  py_window(app,osso_context)
  gtk.main()