ServerInfo: Add server uptime info

This commit is contained in:
Philipp Hörist 2017-11-06 20:10:26 +01:00
parent 3c823d307d
commit 80f658e81f

View file

@ -18,14 +18,19 @@
# along with Gajim. If not, see <http://www.gnu.org/licenses/>. # along with Gajim. If not, see <http://www.gnu.org/licenses/>.
from collections import namedtuple from collections import namedtuple
from datetime import timedelta
import nbxmpp import nbxmpp
import logging
from gi.repository import Gtk from gi.repository import Gtk
from gajim.common import app from gajim.common import app
from gajim.common import ged from gajim.common import ged
from gajim.gtkgui_helpers import get_icon_pixmap, Color from gajim.gtkgui_helpers import get_icon_pixmap, Color
log = logging.getLogger('gajim.serverinfo')
class ServerInfoDialog(Gtk.Dialog): class ServerInfoDialog(Gtk.Dialog):
def __init__(self, account): def __init__(self, account):
flags = Gtk.DialogFlags.DESTROY_WITH_PARENT flags = Gtk.DialogFlags.DESTROY_WITH_PARENT
@ -67,8 +72,10 @@ class ServerInfoDialog(Gtk.Dialog):
self._nec_agent_info_received) self._nec_agent_info_received)
self.version = '' self.version = ''
self.uptime = ''
self.hostname = app.get_hostname_from_account(account) self.hostname = app.get_hostname_from_account(account)
app.connections[account].request_os_info(self.hostname, None) app.connections[account].request_os_info(self.hostname, None)
self.request_last_activity()
for feature in self.get_features(): for feature in self.get_features():
self.add_feature(feature) self.add_feature(feature)
@ -94,6 +101,35 @@ class ServerInfoDialog(Gtk.Dialog):
row.get_child().update(item) row.get_child().update(item)
row.set_tooltip_text(item.tooltip) row.set_tooltip_text(item.tooltip)
def request_last_activity(self):
if not app.account_is_connected(self.account):
return
con = app.connections[self.account]
iq = nbxmpp.Iq(to=self.hostname, typ='get', queryNS=nbxmpp.NS_LAST)
con.connection.SendAndCallForResponse(iq, self._on_last_activity)
def _on_last_activity(self, stanza):
if 'server_info' not in app.interface.instances[self.account]:
# Window got closed in the meantime
return
if not nbxmpp.isResultNode(stanza):
log.warning('Received malformed result: %s', stanza)
return
if stanza.getQueryNS() != nbxmpp.NS_LAST:
log.warning('Wrong namespace on result: %s', stanza)
return
try:
seconds = int(stanza.getQuery().getAttr('seconds'))
except (ValueError, TypeError, AttributeError):
log.exception('Received malformed last activity result')
else:
delta = timedelta(seconds=seconds)
hours = 0
if seconds >= 3600:
hours = delta.seconds // 3600
self.uptime = _('%s days, %s hours') % (delta.days, hours)
self.update(self.get_infos, self.info_listbox)
def _nec_version_result_received(self, obj): def _nec_version_result_received(self, obj):
if obj.jid != self.hostname: if obj.jid != self.hostname:
return return
@ -133,7 +169,8 @@ class ServerInfoDialog(Gtk.Dialog):
Info = namedtuple('Info', ['name', 'value', 'tooltip']) Info = namedtuple('Info', ['name', 'value', 'tooltip'])
return [ return [
Info(_('Hostname'), self.hostname, None), Info(_('Hostname'), self.hostname, None),
Info(_('Server Software'), self.version, None)] Info(_('Server Software'), self.version, None),
Info(_('Server Uptime'), self.uptime, None)]
def on_response(self, dialog, response): def on_response(self, dialog, response):
if response == Gtk.ResponseType.OK: if response == Gtk.ResponseType.OK: