9578053 Jan 22 2022 distfiles.gentoo.org/distfiles/gajim-1.3.3-2.tar.gz
This commit is contained in:
parent
a5b3822651
commit
4c1b226bff
1045 changed files with 753037 additions and 18 deletions
138
gajim/data/plugins/plugin_installer/widget.py
Normal file
138
gajim/data/plugins/plugin_installer/widget.py
Normal file
|
|
@ -0,0 +1,138 @@
|
|||
# This file is part of Gajim.
|
||||
#
|
||||
# Gajim 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; version 3 only.
|
||||
#
|
||||
# Gajim is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with Gajim. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from enum import IntEnum
|
||||
|
||||
from gi.repository import Gtk
|
||||
|
||||
from gajim.common.helpers import Observable
|
||||
|
||||
from gajim.plugins.plugins_i18n import _
|
||||
from gajim.plugins.helpers import get_builder
|
||||
|
||||
|
||||
class Column(IntEnum):
|
||||
PIXBUF = 0
|
||||
NAME = 1
|
||||
INSTALLED_VERSION = 2
|
||||
VERSION = 3
|
||||
INSTALL = 4
|
||||
PLUGIN = 5
|
||||
|
||||
|
||||
class AvailablePage(Observable):
|
||||
def __init__(self, builder_path, notebook):
|
||||
Observable.__init__(self)
|
||||
self._ui = get_builder(builder_path)
|
||||
|
||||
self._notebook = notebook
|
||||
self._page_num = self._notebook.append_page(
|
||||
self._ui.available_plugins_box,
|
||||
Gtk.Label.new(_('Available')))
|
||||
|
||||
self._ui.plugin_store.set_sort_column_id(1, Gtk.SortType.ASCENDING)
|
||||
self._ui.connect_signals(self)
|
||||
|
||||
def destroy(self):
|
||||
self._notebook.remove_page(self._page_num)
|
||||
self._notebook = None
|
||||
self._ui.plugin_store.clear()
|
||||
self._ui.available_plugins_box.destroy()
|
||||
self._ui = None
|
||||
self._plugin = None
|
||||
self.disconnect_signals()
|
||||
|
||||
def show_page(self):
|
||||
self._notebook.set_current_page(self._page_num)
|
||||
|
||||
def append_plugins(self, plugins):
|
||||
for plugin in plugins:
|
||||
self._ui.plugin_store.append(plugin.fields)
|
||||
|
||||
if plugins:
|
||||
self._select_first_plugin()
|
||||
|
||||
self._update_install_button()
|
||||
self._ui.spinner.stop()
|
||||
self._ui.spinner.hide()
|
||||
|
||||
def update_plugin(self, plugin):
|
||||
for row in self._ui.plugin_store:
|
||||
if row[Column.NAME] == plugin.name:
|
||||
row[Column.INSTALLED_VERSION] = str(plugin.version)
|
||||
row[Column.INSTALL] = False
|
||||
break
|
||||
|
||||
def set_download_in_progress(self, state):
|
||||
self._download_in_progress = state
|
||||
self._update_install_button()
|
||||
|
||||
def _available_plugin_toggled(self, _cell, path):
|
||||
is_active = self._ui.plugin_store[path][Column.INSTALL]
|
||||
self._ui.plugin_store[path][Column.INSTALL] = not is_active
|
||||
self._update_install_button()
|
||||
|
||||
def _update_install_button(self):
|
||||
if self._download_in_progress:
|
||||
self._ui.install_plugin_button.set_sensitive(False)
|
||||
return
|
||||
|
||||
sensitive = False
|
||||
for row in self._ui.plugin_store:
|
||||
if row[Column.INSTALL]:
|
||||
sensitive = True
|
||||
break
|
||||
self._ui.install_plugin_button.set_sensitive(sensitive)
|
||||
|
||||
def _on_install_update_clicked(self, _button):
|
||||
self._ui.install_plugin_button.set_sensitive(False)
|
||||
|
||||
plugins = []
|
||||
for row in self._ui.plugin_store:
|
||||
if row[Column.INSTALL]:
|
||||
plugins.append(row[Column.PLUGIN])
|
||||
|
||||
self.notify('download-plugins', plugins)
|
||||
|
||||
def _on_plugin_selection_changed(self, selection):
|
||||
model, iter_ = selection.get_selected()
|
||||
if not iter_:
|
||||
self._clear_plugin_info()
|
||||
else:
|
||||
self._set_plugin_info(model, iter_)
|
||||
|
||||
def _clear_plugin_info(self):
|
||||
self._ui.name_label.set_text('')
|
||||
self._ui.description_label.set_text('')
|
||||
self._ui.version_label.set_text('')
|
||||
self._ui.authors_label.set_text('')
|
||||
self._ui.homepage_linkbutton.set_text('')
|
||||
self._ui.install_plugin_button.set_sensitive(False)
|
||||
|
||||
def _set_plugin_info(self, model, iter_):
|
||||
plugin = model[iter_][Column.PLUGIN]
|
||||
self._ui.name_label.set_text(plugin.name)
|
||||
self._ui.version_label.set_text(str(plugin.version))
|
||||
self._ui.authors_label.set_text(plugin.authors)
|
||||
homepage = '<a href="%s">%s</a>' % (plugin.homepage, plugin.homepage)
|
||||
self._ui.homepage_linkbutton.set_markup(homepage)
|
||||
self._ui.description_label.set_text(plugin.description)
|
||||
|
||||
def _select_first_plugin(self):
|
||||
selection = self._ui.available_plugins_treeview.get_selection()
|
||||
iter_ = self._ui.plugin_store.get_iter_first()
|
||||
if iter_ is not None:
|
||||
selection.select_iter(iter_)
|
||||
path = self._ui.plugin_store.get_path(iter_)
|
||||
self._ui.available_plugins_treeview.scroll_to_cell(path)
|
||||
Loading…
Add table
Add a link
Reference in a new issue