gajim-plural/gajim/app_actions.py

327 lines
9.4 KiB
Python

#
# Copyright (C) 2017 Philipp Hörist <philipp AT hoerist.com>
#
# 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 gajim.common import app
from gajim.common import helpers
from gajim.common.app import interface
from gajim.common.exceptions import GajimGeneralException
from gajim import config
from gajim import dialogs
from gajim import features_window
from gajim import shortcuts_window
from gajim import accounts_window
import gajim.plugins.gui
from gajim import history_window
from gajim import disco
from gajim.history_sync import HistorySyncAssistant
from gajim.server_info import ServerInfoDialog
# General Actions
def on_add_contact_jid(action, param):
dialogs.AddNewContactWindow(None, param.get_string())
# Application Menu Actions
def on_preferences(action, param):
if 'preferences' in interface.instances:
interface.instances['preferences'].window.present()
else:
interface.instances['preferences'] = \
config.PreferencesWindow()
def on_plugins(action, param):
if 'plugins' in interface.instances:
interface.instances['plugins'].window.present()
else:
interface.instances['plugins'] = gajim.plugins.gui.PluginsWindow()
def on_accounts(action, param):
if 'accounts' in app.interface.instances:
app.interface.instances['accounts'].present()
else:
app.interface.instances['accounts'] = accounts_window.AccountsWindow()
def on_history_manager(action, param):
from gajim.history_manager import HistoryManager
HistoryManager()
def on_manage_bookmarks(action, param):
config.ManageBookmarksWindow()
def on_quit(action, param):
interface.roster.on_quit_request()
def on_new_chat(action, param):
if 'start_chat' in app.interface.instances:
app.interface.instances['start_chat'].present()
else:
app.interface.instances['start_chat'] = dialogs.StartChatDialog()
# Accounts Actions
def on_profile(action, param):
interface.edit_own_details(param.get_string())
def on_activate_bookmark(action, param):
dict_ = param.unpack()
account, jid, nick, password = \
dict_['account'], dict_['jid'], None, None
if 'nick' in dict_:
nick = dict_['nick']
if 'password' in dict_:
password = dict_['password']
interface.join_gc_room(account, jid, nick, password)
def on_send_server_message(action, param):
account = param.get_string()
server = app.config.get_per('accounts', account, 'hostname')
server += '/announce/online'
dialogs.SingleMessageWindow(account, server, 'send')
def on_service_disco(action, param):
account = param.get_string()
server_jid = app.config.get_per('accounts', account, 'hostname')
if server_jid in interface.instances[account]['disco']:
interface.instances[account]['disco'][server_jid].\
window.present()
else:
try:
# Object will add itself to the window dict
disco.ServiceDiscoveryWindow(account, address_entry=True)
except GajimGeneralException:
pass
def on_join_gc(action, param):
account = None
if param is None:
if not app.get_connected_accounts():
return
else:
account = param.get_string()
window = app.get_app_window(dialogs.JoinGroupchatWindow)
if window is None:
dialogs.JoinGroupchatWindow(account, None)
else:
window.present()
def on_add_contact(action, param):
dialogs.AddNewContactWindow(param.get_string())
def on_single_message(action, param):
dialogs.SingleMessageWindow(param.get_string(), action='send')
def on_merge_accounts(action, param):
action.set_state(param)
value = param.get_boolean()
app.config.set('mergeaccounts', value)
# Do not merge accounts if only one active
if len(app.connections) >= 2:
app.interface.roster.regroup = value
else:
app.interface.roster.regroup = False
app.interface.roster.setup_and_draw_roster()
def on_use_pgp_agent(action, param):
action.set_state(param)
app.config.set('use_gpg_agent', param.get_boolean())
def on_add_account(action, param):
if 'account_creation_wizard' in app.interface.instances:
app.interface.instances['account_creation_wizard'].window.present()
else:
app.interface.instances['account_creation_wizard'] = \
config.AccountCreationWizardWindow()
def on_import_contacts(action, param):
account = param.get_string()
if 'import_contacts' in app.interface.instances:
app.interface.instances['import_contacts'].dialog.present()
else:
app.interface.instances['import_contacts'] = \
dialogs.SynchroniseSelectAccountDialog(account)
# Advanced Actions
def on_archiving_preferences(action, param):
account = param.get_string()
if 'archiving_preferences' in interface.instances[account]:
interface.instances[account]['archiving_preferences'].window.\
present()
else:
interface.instances[account]['archiving_preferences'] = \
dialogs.Archiving313PreferencesWindow(account)
def on_history_sync(action, param):
account = param.get_string()
if 'history_sync' in interface.instances[account]:
interface.instances[account]['history_sync'].present()
else:
interface.instances[account]['history_sync'] = \
HistorySyncAssistant(account, interface.roster.window)
def on_privacy_lists(action, param):
account = param.get_string()
if 'privacy_lists' in interface.instances[account]:
interface.instances[account]['privacy_lists'].window.present()
else:
interface.instances[account]['privacy_lists'] = \
dialogs.PrivacyListsWindow(account)
def on_server_info(action, param):
account = param.get_string()
if 'server_info' in interface.instances[account]:
interface.instances[account]['server_info'].present()
else:
interface.instances[account]['server_info'] = \
ServerInfoDialog(account)
def on_xml_console(action, param):
account = param.get_string()
if 'xml_console' in interface.instances[account]:
interface.instances[account]['xml_console'].present()
else:
interface.instances[account]['xml_console'] = \
dialogs.XMLConsoleWindow(account)
def on_manage_proxies(action, param):
if 'manage_proxies' in app.interface.instances:
app.interface.instances['manage_proxies'].window.present()
else:
app.interface.instances['manage_proxies'] = \
config.ManageProxiesWindow(interface.roster.window)
# Admin Actions
def on_set_motd(action, param):
account = param.get_string()
server = app.config.get_per('accounts', account, 'hostname')
server += '/announce/motd'
dialogs.SingleMessageWindow(account, server, 'send')
def on_update_motd(action, param):
account = param.get_string()
server = app.config.get_per('accounts', account, 'hostname')
server += '/announce/motd/update'
dialogs.SingleMessageWindow(account, server, 'send')
def on_delete_motd(action, param):
account = param.get_string()
server = app.config.get_per('accounts', account, 'hostname')
server += '/announce/motd/delete'
app.connections[account].send_motd(server)
# Help Actions
def on_contents(action, param):
helpers.launch_browser_mailer(
'url', 'https://dev.gajim.org/gajim/gajim/wikis')
def on_faq(action, param):
helpers.launch_browser_mailer(
'url', 'https://dev.gajim.org/gajim/gajim/wikis/help/gajimfaq')
def on_keyboard_shortcuts(action, param):
shortcuts_window.show(app.app.get_active_window())
def on_features(action, param):
features_window.FeaturesWindow()
def on_about(action, param):
dialogs.AboutDialog()
# View Actions
def on_file_transfers(action, param):
if interface.instances['file_transfers']. \
window.get_property('visible'):
interface.instances['file_transfers'].window.present()
else:
interface.instances['file_transfers'].window.show_all()
def on_history(action, param):
if 'logs' in interface.instances:
interface.instances['logs'].window.present()
else:
interface.instances['logs'] = history_window.\
HistoryWindow()
def on_open_event(action, param):
dict_ = param.unpack()
app.interface.handle_event(
dict_['account'], dict_['jid'], dict_['type_'])
# Other Actions
def toggle_ipython(action, param):
"""
Show/hide the ipython window
"""
win = app.ipython_window
if win and win.window.is_visible():
win.present()
else:
app.interface.create_ipython_window()
def show_next_pending_event(action, param):
"""
Show the window(s) with next pending event in tabbed/group chats
"""
if app.events.get_nb_events():
account, jid, event = app.events.get_first_systray_event()
if not event:
return
app.interface.handle_event(account, jid, event.type_)