190 lines
9.1 KiB
Python
190 lines
9.1 KiB
Python
|
|
import Default
|
|
|
|
from AppInstall.Menu import SHOW_ALL, SHOW_ONLY_SUPPORTED, SHOW_ONLY_FREE, SHOW_ONLY_MAIN, SHOW_ONLY_PROPRIETARY, SHOW_ONLY_THIRD_PARTY, SHOW_ONLY_INSTALLED
|
|
from AppInstall.Util import *
|
|
|
|
import datetime
|
|
import locale
|
|
|
|
from gettext import gettext as _
|
|
|
|
class Distribution(Default.Distribution):
|
|
|
|
def __init__(self):
|
|
Default.Distribution.__init__(self)
|
|
# Dictonary of all available filters with corresponding choser name
|
|
# and tooltip
|
|
# The installed filter will be automatically added in non-installer mode
|
|
# The primary and secondary filters are separated
|
|
self.filters_primary = {
|
|
SHOW_ALL : (_("All available applications"), ""),
|
|
SHOW_ONLY_FREE : (_("All Open Source applications"), ""),
|
|
}
|
|
self.filters_secondary = {
|
|
SHOW_ONLY_SUPPORTED : (_("Canonical-maintained applications"), ""),
|
|
SHOW_ONLY_THIRD_PARTY :(_("Third party applications"), ""),
|
|
}
|
|
# List of components whose applications should not be installed
|
|
# before asking for a confirmation
|
|
self.components_ask = ["universe", "multiverse"]
|
|
# Dictonary that provides dialog messages that are shown,
|
|
# before a component gets activated or when it requires to be confirmed
|
|
self.components_activation = {
|
|
# Fallback
|
|
None : [_("Enable the installation of software from the %s "
|
|
"component of Ubuntu?"),
|
|
# %s is the name of the component
|
|
_("%s is not officially supported with security "
|
|
"updates.")],
|
|
"main" : [_("Enable the installaion of officially "
|
|
"supported Ubuntu software?"),
|
|
# %s is the name of the application
|
|
_("%s is part of the Ubuntu main distribution. "
|
|
"Canonical Ltd. provides support and security "
|
|
"updates, which will be enabled too.")],
|
|
"universe" : [_("Enable the installation of community maintained "
|
|
"software?"),
|
|
# %s is the name of the application
|
|
_("%s is maintained by the Ubuntu community. "
|
|
"The Ubuntu community provides support and "
|
|
"security updates, which will be enabled too.")],
|
|
"multiverse" : [_("Enable the installation of unsupported and "
|
|
"restricted software?"),
|
|
# %s is the name of the application
|
|
_("The use, modification and distribution of %s "
|
|
"is restricted by copyright or by legal terms in "
|
|
"some countries.")]
|
|
}
|
|
|
|
self.dependencies_map = [
|
|
# KDE
|
|
(("kdelibs5","python-kde4","libqtgui4"),
|
|
# %s is the name of an application
|
|
None,
|
|
"application-kde"),
|
|
# GNOME
|
|
(("libgnome2-0","python-gnome2","libgtk2.0-0","python-gtk2"),
|
|
# %s is the name of an application
|
|
None,
|
|
"application-gnome"),
|
|
# XUBUNTU
|
|
# FIXME: get an icon from xubuntu
|
|
(("libxfce4util4",),
|
|
# %s is the name of an application
|
|
None,
|
|
None)]
|
|
|
|
self.comp_depend_map = { "universe":["main"],
|
|
"multiverse":["main", "universe"]}
|
|
|
|
def get_app_emblems(self, app, cache):
|
|
# A short statement about the freedom, legal status and level of
|
|
# support of the application
|
|
emblems = []
|
|
icon_name = None
|
|
tooltip = None
|
|
if app.channel.endswith("-partner") and app.supported:
|
|
tooltip = _("%s is provided by a third party vendor "
|
|
"from the Canonical partner repository.") % app.name
|
|
icon_name = "application-partner"
|
|
emblems.append((icon_name, tooltip))
|
|
elif app.component == "main" or app.supported:
|
|
tooltip = _("Canonical Ltd. provides technical support and "
|
|
"security updates for %s") % app.name
|
|
icon_name = "application-supported"
|
|
emblems.append((icon_name, tooltip))
|
|
elif app.thirdparty or app.channel:
|
|
tooltip = ("%s is provided by a third party vendor "
|
|
"and is therefore not an official part "
|
|
"of Ubuntu. The third party vendor is "
|
|
"responsible for support and security "
|
|
"updates.") % app.name
|
|
icon_name = "application-proprietary"
|
|
emblems.append((icon_name, tooltip))
|
|
if app.component == "universe":
|
|
tooltip =_("This application is provided by the "
|
|
"Ubuntu community.")
|
|
icon_name = "application-community"
|
|
emblems.append((icon_name, tooltip))
|
|
if app.component == "multiverse" or app.thirdparty:
|
|
tooltip = _("The use, modification and distribution "
|
|
"of %s is restricted by copyright or by "
|
|
"legal terms in some countries.") % app.name
|
|
icon_name = "application-proprietary"
|
|
emblems.append((icon_name, tooltip))
|
|
|
|
# Add an emblem corresponding to the dependencies of the app
|
|
if cache.has_key(app.pkgname):
|
|
for (deps, tooltip, icon_name) in self.dependencies_map:
|
|
for dep in deps:
|
|
if cache.pkgDependsOn(app.pkgname, dep):
|
|
if type(tooltip) == str:
|
|
tooltip = tooltip % app.name
|
|
emblems.append((icon_name, tooltip))
|
|
break
|
|
icon_name = None
|
|
tooltip = None
|
|
return emblems
|
|
|
|
def get_codec_information_link(self):
|
|
url = "https://codecs.canonical.com"
|
|
label = _("Buy Licensed Plug-ins...")
|
|
return (label, url)
|
|
|
|
def get_maintenance_status(self, app, cache):
|
|
|
|
# try to figure out the support dates of the release and make
|
|
# sure to look only for stuff in "Ubuntu" and "distro_codename"
|
|
# (to exclude stuff in ubuntu-updates for the support time
|
|
# calculation because the "Release" file time for that gets
|
|
# updated regularly)
|
|
releasef = get_release_filename_for_pkg(cache, app.pkgname,
|
|
"Ubuntu", self.get_codename())
|
|
time_t = get_release_date_from_release_file(releasef)
|
|
# check the release date and show support information
|
|
# based on this
|
|
if time_t:
|
|
release_date = datetime.datetime.fromtimestamp(time_t)
|
|
#print "release_date: ", release_date
|
|
now = datetime.datetime.now()
|
|
release_age = (now - release_date).days
|
|
#print "release age: ", release_age
|
|
|
|
# mvo: we do not define the end date very precisely
|
|
# currently this is why it will just display a end
|
|
# range
|
|
(support_end_year, support_end_month) = get_maintenance_end_date(release_date, 18)
|
|
support_end_month_str = locale.nl_langinfo(getattr(locale,"MON_%d" % support_end_month))
|
|
# check if the support has ended
|
|
support_ended = (now.year >= support_end_year and
|
|
now.month > support_end_month)
|
|
if app.component == "main":
|
|
if support_ended:
|
|
return _("Canonical does no longer provide "
|
|
"updates for %s in Ubuntu %s. "
|
|
"Updates may be available in a newer version of "
|
|
"Ubuntu.") % (app.name, self.get_distro_release())
|
|
else:
|
|
return _("Canonical provides critical updates for "
|
|
"%(appname)s until %(support_end_month_str)s "
|
|
"%(support_end_year)s.") % {'appname' : app.name,
|
|
'support_end_month_str' : support_end_month_str,
|
|
'support_end_year' : support_end_year}
|
|
elif app.component == "restricted":
|
|
if support_ended:
|
|
return _("Canonical does no longer provide "
|
|
"updates for %s in Ubuntu %s. "
|
|
"Updates may be available in a newer version of "
|
|
"Ubuntu.") % (app.name, self.get_distro_release())
|
|
else:
|
|
return _("Canonical provides critical updates supplied "
|
|
"by the developers of %(appname)s until "
|
|
"%(support_end_month_str)s "
|
|
"%(support_end_year)s.") % {'appname' : app.name,
|
|
'support_end_month_str' : support_end_month_str,
|
|
'support_end_year' : support_end_year}
|
|
|
|
|
|
return _("") % app.name
|
|
|