2011-09-06 00:45:53 +00:00
|
|
|
# Copyright 2010-2011 Florent Le Coz <louiz@louiz.org>
|
2010-01-10 20:14:17 +00:00
|
|
|
#
|
|
|
|
# This file is part of Poezio.
|
|
|
|
#
|
|
|
|
# Poezio is free software: you can redistribute it and/or modify
|
2011-09-11 15:10:05 +00:00
|
|
|
# it under the terms of the zlib license. See the COPYING file.
|
2010-05-18 13:29:02 +00:00
|
|
|
"""
|
|
|
|
Starting point of poezio. Launches both the Connection and Gui
|
|
|
|
"""
|
2010-07-19 23:55:20 +00:00
|
|
|
|
2010-01-21 01:54:50 +00:00
|
|
|
import sys
|
2010-12-26 20:51:14 +00:00
|
|
|
import os
|
2010-08-04 23:54:02 +00:00
|
|
|
import signal
|
2010-07-20 17:25:41 +00:00
|
|
|
|
2017-11-12 14:03:09 +00:00
|
|
|
|
2015-01-20 19:35:25 +00:00
|
|
|
def test_curses():
|
|
|
|
"""
|
|
|
|
Check if the system ncurses linked with python has unicode capabilities.
|
|
|
|
"""
|
|
|
|
import curses
|
|
|
|
if hasattr(curses, 'unget_wch'):
|
|
|
|
return True
|
|
|
|
print("""\
|
|
|
|
ERROR: The current python executable is linked with a ncurses version that \
|
|
|
|
has no unicode capabilities.
|
|
|
|
|
|
|
|
This could mean that:
|
|
|
|
- python was built on a system where readline is linked against \
|
|
|
|
libncurses and not libncursesw
|
|
|
|
- python was built without ncursesw headers available
|
|
|
|
|
|
|
|
Please file a bug for your distribution or fix that on your system and then \
|
|
|
|
recompile python.
|
|
|
|
Poezio is currently unable to read your input or draw its interface properly,\
|
|
|
|
so it will now exit.""")
|
|
|
|
return False
|
|
|
|
|
2018-01-13 14:33:19 +00:00
|
|
|
|
2018-01-13 14:31:10 +00:00
|
|
|
def test_env():
|
|
|
|
"""
|
|
|
|
Check if the environment has the right variables set
|
|
|
|
"""
|
|
|
|
unset = set()
|
|
|
|
for i in ('HOME', 'PATH', 'TERM'):
|
|
|
|
if not os.environ.get(i):
|
|
|
|
unset.add(i)
|
|
|
|
if unset:
|
|
|
|
variables = ', '.join('$%s' % i for i in unset)
|
|
|
|
print('ERROR: %s not set' % variables)
|
|
|
|
return False
|
|
|
|
return True
|
|
|
|
|
2015-01-20 19:35:25 +00:00
|
|
|
|
2018-06-07 12:42:14 +00:00
|
|
|
def test_unicode():
|
2018-07-21 14:47:28 +00:00
|
|
|
from . import poopt
|
2018-06-07 12:42:14 +00:00
|
|
|
try:
|
|
|
|
poopt.wcswidth('✔')
|
|
|
|
except UnicodeError:
|
|
|
|
print("""\
|
|
|
|
ERROR: The current system is misconfigured for Unicode.
|
|
|
|
|
|
|
|
Check your locale setup, especially the $LANG environment variable and \
|
|
|
|
whether it matches a locale built on your system. Also check that it is a \
|
|
|
|
.UTF-8 locale, and not using some legacy encoding.
|
|
|
|
|
|
|
|
Poezio is unable to display characters properly, so it will now exit.""")
|
|
|
|
return False
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
2011-03-07 18:57:55 +00:00
|
|
|
def main():
|
|
|
|
"""
|
2016-06-27 22:55:51 +00:00
|
|
|
Entry point.
|
2011-03-07 18:57:55 +00:00
|
|
|
"""
|
2014-04-30 19:54:25 +00:00
|
|
|
sys.stdout.write("\x1b]0;poezio\x07")
|
|
|
|
sys.stdout.flush()
|
2016-06-30 21:36:25 +00:00
|
|
|
from poezio import config
|
2018-07-03 10:32:31 +00:00
|
|
|
config.run_cmdline_args()
|
2014-04-06 15:17:51 +00:00
|
|
|
config.create_global_config()
|
|
|
|
config.setup_logging()
|
|
|
|
config.post_logging_setup()
|
|
|
|
|
2016-06-30 21:36:25 +00:00
|
|
|
from poezio.config import options
|
2014-04-06 15:17:51 +00:00
|
|
|
|
2015-02-21 22:16:52 +00:00
|
|
|
if options.check_config:
|
|
|
|
config.check_config()
|
|
|
|
sys.exit(0)
|
|
|
|
|
2016-10-05 18:20:46 +00:00
|
|
|
from poezio.asyncio import monkey_patch_asyncio_slixmpp
|
|
|
|
monkey_patch_asyncio_slixmpp()
|
|
|
|
|
2016-06-30 21:36:25 +00:00
|
|
|
from poezio import theming
|
2014-04-24 19:25:31 +00:00
|
|
|
theming.update_themes_dir()
|
|
|
|
|
2016-06-30 21:36:25 +00:00
|
|
|
from poezio import logger
|
2014-04-06 15:26:33 +00:00
|
|
|
logger.create_logger()
|
2014-04-06 15:17:51 +00:00
|
|
|
|
2016-06-30 21:36:25 +00:00
|
|
|
from poezio import roster
|
2014-04-06 15:30:52 +00:00
|
|
|
roster.create_roster()
|
|
|
|
|
2018-10-15 17:40:02 +00:00
|
|
|
from poezio.core.core import Core
|
2014-04-06 15:17:51 +00:00
|
|
|
|
2017-11-12 14:03:09 +00:00
|
|
|
signal.signal(signal.SIGINT, signal.SIG_IGN) # ignore ctrl-c
|
2018-10-15 17:40:02 +00:00
|
|
|
cocore = Core()
|
2017-11-12 14:03:09 +00:00
|
|
|
signal.signal(signal.SIGUSR1, cocore.sigusr_handler) # reload the config
|
2013-02-28 21:23:25 +00:00
|
|
|
signal.signal(signal.SIGHUP, cocore.exit_from_signal)
|
|
|
|
signal.signal(signal.SIGTERM, cocore.exit_from_signal)
|
2012-10-13 13:14:34 +00:00
|
|
|
if options.debug:
|
|
|
|
cocore.debug = True
|
2011-03-07 18:57:55 +00:00
|
|
|
cocore.start()
|
2014-07-30 15:32:24 +00:00
|
|
|
|
2015-06-10 22:12:04 +00:00
|
|
|
from slixmpp.exceptions import IqError, IqTimeout
|
2017-11-12 14:03:09 +00:00
|
|
|
|
2015-06-10 22:12:04 +00:00
|
|
|
def swallow_iqerrors(loop, context):
|
|
|
|
"""Do not log unhandled iq errors and timeouts"""
|
|
|
|
if not isinstance(context['exception'], (IqError, IqTimeout)):
|
|
|
|
loop.default_exception_handler(context)
|
|
|
|
|
2014-07-30 15:32:24 +00:00
|
|
|
# Warning: asyncio must always be imported after the config. Otherwise
|
|
|
|
# the asyncio logger will not follow our configuration and won't write
|
|
|
|
# the tracebacks in the correct file, etc
|
|
|
|
import asyncio
|
2014-09-21 18:28:17 +00:00
|
|
|
loop = asyncio.get_event_loop()
|
2015-06-10 22:12:04 +00:00
|
|
|
loop.set_exception_handler(swallow_iqerrors)
|
2014-07-31 02:45:02 +00:00
|
|
|
|
2014-09-21 18:28:17 +00:00
|
|
|
loop.add_reader(sys.stdin, cocore.on_input_readable)
|
|
|
|
loop.add_signal_handler(signal.SIGWINCH, cocore.sigwinch_handler)
|
2014-07-30 15:32:24 +00:00
|
|
|
cocore.xmpp.start()
|
2014-09-21 18:28:17 +00:00
|
|
|
loop.run_forever()
|
2014-07-30 15:32:24 +00:00
|
|
|
# We reach this point only when loop.stop() is called
|
2012-08-31 20:41:36 +00:00
|
|
|
try:
|
|
|
|
cocore.reset_curses()
|
2014-07-30 15:32:24 +00:00
|
|
|
except:
|
|
|
|
pass
|