/tortoisehg/hgtk/about.py

https://bitbucket.org/tortoisehg/hgtk/ · Python · 106 lines · 82 code · 16 blank · 8 comment · 20 complexity · 71043e74ccf850c6083320963d5458df MD5 · raw file

  1. # about.py - TortoiseHg About dialog
  2. #
  3. # Copyright 2007 TK Soh <teekaysoh@gmail.com>
  4. # Copyright 2007 Steve Borho <steve@borho.org>
  5. #
  6. # This software may be used and distributed according to the terms of the
  7. # GNU General Public License version 2, incorporated herein by reference.
  8. import os
  9. import sys
  10. import gtk
  11. import urllib2
  12. from tortoisehg.util.i18n import _
  13. from tortoisehg.util import version, paths, hglib, shlib
  14. from tortoisehg.hgtk import gtklib, hgtk
  15. _verurl = 'http://tortoisehg.bitbucket.org/curversion.txt'
  16. def url_handler(dialog, link, user_data):
  17. shlib.browse_url(link)
  18. gtk.about_dialog_set_url_hook(url_handler, None)
  19. def make_version(tuple):
  20. vers = ".".join([str(x) for x in tuple])
  21. return vers
  22. class AboutDialog(gtk.AboutDialog):
  23. def __init__(self):
  24. super(AboutDialog, self).__init__()
  25. gtklib.set_tortoise_keys(self)
  26. lib_versions = ', '.join([
  27. "Mercurial-%s" % hglib.hgversion,
  28. "Python-%s" % make_version(sys.version_info[0:3]),
  29. "PyGTK-%s" % make_version(gtk.pygtk_version),
  30. "GTK-%s" % make_version(gtk.gtk_version),
  31. ])
  32. comment = _("Several icons are courtesy of the TortoiseSVN project")
  33. newver = (0,0,0)
  34. upgradeurl = 'http://tortoisehg.org'
  35. try:
  36. f = urllib2.urlopen(_verurl).read().splitlines()
  37. newver = tuple([int(p) for p in f[0].split('.')])
  38. upgradeurl = f[1] # generic download URL
  39. platform = sys.platform
  40. if platform == 'win32':
  41. from win32process import IsWow64Process as IsX64
  42. platform = IsX64() and 'x64' or 'x86'
  43. # linux2 for Linux, darwin for OSX
  44. for line in f[2:]:
  45. p, url = line.split(':')
  46. if platform == p:
  47. upgradeurl = url.strip()
  48. break
  49. except:
  50. pass
  51. ver = version.version()
  52. if '+' in ver:
  53. ver = ver[:ver.index('+')]
  54. try:
  55. curver = tuple([int(p) for p in ver.split('.')])
  56. except:
  57. curver = (0,0,0)
  58. if newver > curver:
  59. comment = _('A new version of TortoiseHg is ready for download!')
  60. self.set_website(upgradeurl)
  61. else:
  62. self.set_website('http://tortoisehg.org')
  63. self.set_name("TortoiseHg")
  64. self.set_version(_("(version %s)") % version.version())
  65. if hasattr(self, 'set_wrap_license'):
  66. self.set_wrap_license(False)
  67. self.set_copyright(_("Copyright 2008-2010 Steve Borho and others"))
  68. thg_logo = paths.get_tortoise_icon('thg_logo_92x50.png')
  69. thg_icon = paths.get_tortoise_icon('thg_logo.ico')
  70. try:
  71. license_file = paths.get_license_path()
  72. if license_file.endswith('.gz'):
  73. import gzip
  74. lic = gzip.open(license_file, 'rb').read()
  75. else:
  76. lic = open(license_file, 'rb').read()
  77. self.set_license(lic)
  78. except (ImportError, IOError):
  79. license = hgtk.shortlicense.splitlines()[1:]
  80. self.set_license('\n'.join(license))
  81. self.set_comments(_("with %s") % lib_versions + "\n\n" + comment)
  82. if thg_logo:
  83. self.set_logo(gtk.gdk.pixbuf_new_from_file(thg_logo))
  84. if thg_icon:
  85. self.set_icon_from_file(thg_icon)
  86. self.connect('response', self.response)
  87. def response(self, widget, respid):
  88. self.destroy()
  89. def run(_ui, *pats, **opts):
  90. return AboutDialog()