Fixes
This commit is contained in:
parent
90e379a6de
commit
cf5c5b1608
@ -4,7 +4,7 @@ import sys
|
||||
import traceback
|
||||
from random import shuffle
|
||||
import threading
|
||||
from time import sleep, time
|
||||
from time import sleep
|
||||
|
||||
from gevent import monkey; monkey.patch_all(); del monkey # noqa
|
||||
import gevent
|
||||
@ -75,7 +75,6 @@ from user_data.backup_service import BackupService
|
||||
import styles.style # TODO: dynamic loading
|
||||
|
||||
import wrapper_tests.support_testing as ts
|
||||
from wrapper_tests.tests_wrapper import test_bootstrap_iNmapInfo
|
||||
|
||||
global LOG
|
||||
import logging
|
||||
@ -488,7 +487,7 @@ class App:
|
||||
LOG.debug(f"_start_threads init: {te()!r}")
|
||||
|
||||
# starting threads for tox iterate and toxav iterate
|
||||
self._main_loop = threads.ToxIterateThread(self._tox, self)
|
||||
self._main_loop = threads.ToxIterateThread(self._tox)
|
||||
self._main_loop.start()
|
||||
|
||||
self._av_loop = threads.ToxAVIterateThread(self._tox.AV)
|
||||
@ -775,8 +774,7 @@ class App:
|
||||
# FixMe:
|
||||
self._log = lambda line: LOG.log(self._oArgs.loglevel,
|
||||
self._ms.status(line))
|
||||
self._ms._log = self._log # used in callbacks.py
|
||||
self.LOG = self._log # backwards
|
||||
# self._ms._log = self._log # was used in callbacks.py
|
||||
|
||||
if False:
|
||||
self.status_handler = logging.Handler()
|
||||
@ -812,6 +810,7 @@ class App:
|
||||
|
||||
def _init_callbacks(self, ms=None):
|
||||
LOG.debug("_init_callbacks")
|
||||
# this will block if you are not connected
|
||||
callbacks.init_callbacks(self._tox, self._profile, self._settings,
|
||||
self._plugin_loader, self._contacts_manager,
|
||||
self._calls_manager,
|
||||
@ -846,10 +845,10 @@ class App:
|
||||
sleep(interval / 1000.0)
|
||||
|
||||
def _test_tox(self):
|
||||
self.test_net(iMax=8)
|
||||
self.test_net()
|
||||
self._ms.log_console()
|
||||
|
||||
def test_net(self, oThread=None, iMax=6):
|
||||
def test_net(self, lElts=None, oThread=None, iMax=4):
|
||||
|
||||
LOG.debug("test_net " +self._oArgs.network)
|
||||
# bootstrap
|
||||
@ -905,9 +904,6 @@ class App:
|
||||
LOG.trace(f"Connected status #{i}: {status!r}")
|
||||
self.loop(2)
|
||||
|
||||
global iLAST_CONN
|
||||
iLAST_CONN = time()
|
||||
|
||||
def _test_env(self):
|
||||
_settings = self._settings
|
||||
if 'proxy_type' not in _settings or _settings['proxy_type'] == 0 or \
|
||||
@ -961,7 +957,7 @@ class App:
|
||||
lElts = self._settings['current_nodes_tcp']
|
||||
shuffle(lElts)
|
||||
try:
|
||||
test_bootstrap_iNmapInfo(lElts)
|
||||
bootstrap_iNodeInfo(lElts)
|
||||
except Exception as e:
|
||||
# json.decoder.JSONDecodeError
|
||||
LOG.error(f"test_tox ' +' : {e}")
|
||||
|
@ -93,10 +93,10 @@ class ContactsManager(ToxSave):
|
||||
|
||||
def is_contact_active(self, contact):
|
||||
if not self._active_contact:
|
||||
LOG.warn("No self._active_contact")
|
||||
# LOG.debug("No self._active_contact")
|
||||
return False
|
||||
if self._active_contact not in self._contacts:
|
||||
LOG.debug(f"_active_contact={self._active_contact} len={len(self._contacts)}")
|
||||
LOG.warn(f"_active_contact={self._active_contact} not in contacts len={len(self._contacts)}")
|
||||
return False
|
||||
if not self._contacts[self._active_contact]:
|
||||
LOG.debug(f"{self._contacts[self._active_contact]} {contact.tox_id}")
|
||||
@ -241,7 +241,7 @@ class ContactsManager(ToxSave):
|
||||
# AttributeError: 'NoneType' object has no attribute 'number'
|
||||
for (i, contact) in enumerate(self._contacts):
|
||||
if contact is None or not hasattr(contact, 'number'):
|
||||
LOG.error("Contact {i} is None or not hasattr 'number'")
|
||||
LOG.error(f"Contact {i} is None or not hasattr 'number'")
|
||||
del self._contacts[i]
|
||||
continue
|
||||
contacts = sorted(self._contacts, key=lambda c: c.number)
|
||||
|
@ -35,19 +35,8 @@ with ts.ignoreStderr():
|
||||
__maintainer__ = 'Ingvar'
|
||||
__version__ = '0.5.0+'
|
||||
|
||||
from PyQt5 import QtCore
|
||||
import gevent
|
||||
if 'QtCore' in sys.modules:
|
||||
def qt_sleep(fSec):
|
||||
if fSec > .001:
|
||||
QtCore.QThread.msleep(int(fSec*1000.0))
|
||||
QtCore.QCoreApplication.processEvents()
|
||||
sleep = qt_sleep
|
||||
elif 'gevent' in sys.modules:
|
||||
sleep = gevent.sleep
|
||||
else:
|
||||
import time
|
||||
sleep = time.sleep
|
||||
import time
|
||||
sleep = time.sleep
|
||||
|
||||
def reset():
|
||||
Settings.reset_auto_profile()
|
||||
@ -230,6 +219,9 @@ def main_parser():
|
||||
parser.add_argument('--udp_enabled',type=str,
|
||||
default='True', choices=['True','False'],
|
||||
help='En/Disable udp')
|
||||
parser.add_argument('--trace_enabled',type=str,
|
||||
default='False', choices=['True','False'],
|
||||
help='Debugging from toxcore logger_trace')
|
||||
parser.add_argument('--ipv6_enabled',type=str,
|
||||
default=bIpV6, choices=lIpV6Choices,
|
||||
help='En/Disable ipv6')
|
||||
|
@ -97,20 +97,19 @@ class Messenger(tox_save.ToxSave):
|
||||
:param friend_number: number of friend
|
||||
from Qt callback
|
||||
"""
|
||||
if not text:
|
||||
return
|
||||
if friend_number is None:
|
||||
friend_number = self._contacts_manager.get_active_number()
|
||||
if friend_number is None:
|
||||
if friend_number is None or friend_number < 0:
|
||||
LOG.error(f"No _contacts_manager.get_active_number")
|
||||
return
|
||||
if not text or friend_number < 0:
|
||||
return
|
||||
assert_main_thread()
|
||||
|
||||
friend = self._get_friend_by_number(friend_number)
|
||||
if not friend:
|
||||
LOG.error(f"No self._get_friend_by_number")
|
||||
return
|
||||
assert friend
|
||||
messages = self._split_message(text.encode('utf-8'))
|
||||
t = util.get_unix_time()
|
||||
for message in messages:
|
||||
@ -336,8 +335,8 @@ class Messenger(tox_save.ToxSave):
|
||||
self._add_info_message(friend_number, text)
|
||||
|
||||
def _add_info_message(self, friend_number, text):
|
||||
assert friend
|
||||
friend = self._get_friend_by_number(friend_number)
|
||||
assert friend
|
||||
message = InfoMessage(text, util.get_unix_time())
|
||||
friend.append_message(message)
|
||||
if self._contacts_manager.is_friend_active(friend_number):
|
||||
|
@ -10,18 +10,6 @@ from wrapper.toxcore_enums_and_consts import TOX_USER_STATUS, TOX_CONNECTION
|
||||
import wrapper_tests.support_testing as ts
|
||||
from utils import util
|
||||
|
||||
if 'QtCore' in sys.modules:
|
||||
def qt_sleep(fSec):
|
||||
if fSec > .001:
|
||||
QtCore.QThread.msleep(int(fSec*1000.0))
|
||||
QtCore.QCoreApplication.processEvents()
|
||||
sleep = qt_sleep
|
||||
elif 'gevent' in sys.modules:
|
||||
import gevent
|
||||
sleep = gevent.sleep
|
||||
else:
|
||||
import time
|
||||
sleep = time.sleep
|
||||
import time
|
||||
sleep = time.sleep
|
||||
|
||||
@ -63,7 +51,7 @@ class BaseThread(threading.Thread):
|
||||
if not self.is_alive(): break
|
||||
i = i + 1
|
||||
else:
|
||||
LOG_WARN(f"BaseThread {self.name} BLOCKED")
|
||||
LOG_WARN(f"BaseThread {self.name} BLOCKED after {ts.iTHREAD_JOINS}")
|
||||
|
||||
class BaseQThread(QtCore.QThread):
|
||||
|
||||
@ -101,12 +89,14 @@ class InitThread(BaseThread):
|
||||
self._is_first_start = is_first_start
|
||||
|
||||
def run(self):
|
||||
# DBUG+ InitThread run: ERROR name 'ts' is not defined
|
||||
import wrapper_tests.support_testing as ts
|
||||
LOG_DEBUG('InitThread run: ')
|
||||
try:
|
||||
if self._is_first_start and ts.bAreWeConnected():
|
||||
if self._settings['download_nodes_list']:
|
||||
LOG_INFO('downloading list of nodes')
|
||||
download_nodes_list(self._settings, oArgs=self._app._args)
|
||||
if self._is_first_start and ts.bAreWeConnected() and \
|
||||
self._settings['download_nodes_list']:
|
||||
LOG_INFO('downloading list of nodes')
|
||||
download_nodes_list(self._settings, oArgs=self._app._args)
|
||||
|
||||
if ts.bAreWeConnected():
|
||||
LOG_INFO(f"calling test_net nodes")
|
||||
|
@ -22,7 +22,7 @@ def LOG_INFO(a):
|
||||
bVERBOSE = hasattr(__builtins__, 'app') and app.oArgs.loglevel <= 20
|
||||
if bVERBOSE: print('INFO> '+a)
|
||||
def LOG_DEBUG(a):
|
||||
bVERBOSE = hasattr(__builtins__, 'app') and app.oArgs.loglevel <= 10-1
|
||||
bVERBOSE = hasattr(__builtins__, 'app') and app.oArgs.loglevel <= 10
|
||||
if bVERBOSE: print('DBUG> '+a)
|
||||
def LOG_TRACE(a):
|
||||
bVERBOSE = hasattr(__builtins__, 'app') and app.oArgs.loglevel < 10
|
||||
@ -39,18 +39,21 @@ def tox_log_cb(iTox, level, file, line, func, message, *args):
|
||||
* @param user_data The user data pointer passed to tox_new in options.
|
||||
"""
|
||||
try:
|
||||
if type(file) == bytes:
|
||||
file = str(file, 'UTF-8')
|
||||
if file == 'network.c' and line in [944, 660]: return
|
||||
file = str(file, 'UTF-8')
|
||||
# root WARNING 3network.c#944:b'send_packet'attempted to send message with network family 10 (probably IPv6) on IPv4 socket
|
||||
if type(func) == bytes:
|
||||
func = str(func, 'UTF-8')
|
||||
if type(message) == bytes:
|
||||
message = str(message, 'UTF-8')
|
||||
if file == 'network.c' and line in [944, 660]: return
|
||||
func = str(func, 'UTF-8')
|
||||
message = str(message, 'UTF-8')
|
||||
message = f"{file}#{line}:{func} {message}"
|
||||
LOG_LOG(message)
|
||||
except Exception as e:
|
||||
LOG_ERROR("tox_log_cb {e}")
|
||||
LOG_ERROR(f"tox_log_cb {e}")
|
||||
|
||||
#tox_log_handler (context=0x24763d0,
|
||||
# level=LOGGER_LEVEL_TRACE, file=0x7fffe599fb99 "TCP_common.c", line=203,
|
||||
# func=0x7fffe599fc50 <__func__.2> "read_TCP_packet",
|
||||
# message=0x7fffba7fabd0 "recv buffer has 0 bytes, but requested 10 bytes",
|
||||
# userdata=0x0) at /var/local/src/c-toxcore/toxcore/tox.c:78
|
||||
|
||||
def tox_factory(data=None, settings=None, args=None, app=None):
|
||||
"""
|
||||
@ -98,7 +101,8 @@ def tox_factory(data=None, settings=None, args=None, app=None):
|
||||
|
||||
LOG.debug("wrapper.tox.Tox settings: " +repr(settings))
|
||||
|
||||
if tox_options._options_pointer:
|
||||
if 'trace_enabled' in settings and settings['trace_enabled'] and \
|
||||
tox_options._options_pointer:
|
||||
c_callback = CFUNCTYPE(None, c_void_p, c_int, c_char_p, c_int, c_char_p, c_char_p, c_void_p)
|
||||
tox_options.self_logger_cb = c_callback(tox_log_cb)
|
||||
wrapper.tox.Tox.libtoxcore.tox_options_set_log_callback(
|
||||
|
@ -26,39 +26,75 @@ except Exception as e:
|
||||
LOG.warn(e)
|
||||
PythonConsole = None
|
||||
else:
|
||||
def hl_format(color, style=''):
|
||||
"""Return a QTextCharFormat with the given attributes.
|
||||
unused
|
||||
"""
|
||||
_color = QColor()
|
||||
_color.setNamedColor(color)
|
||||
if True:
|
||||
# I want to do reverse video but I cant figure how
|
||||
bg='white'
|
||||
def hl_format(color, style=''):
|
||||
"""Return a QTextCharFormat with the given attributes.
|
||||
"""
|
||||
_color = QColor()
|
||||
_color.setNamedColor(color)
|
||||
|
||||
_format = QTextCharFormat()
|
||||
_format.setBackground(_color)
|
||||
if 'bold' in style:
|
||||
_format.setFontWeight(QFont.Bold)
|
||||
if 'italic' in style:
|
||||
_format.setFontItalic(True)
|
||||
_format = QTextCharFormat()
|
||||
_format.setForeground(_color)
|
||||
if 'bold' in style:
|
||||
_format.setFontWeight(QFont.Bold)
|
||||
if 'italic' in style:
|
||||
_format.setFontItalic(True)
|
||||
|
||||
_fgcolor = QColor()
|
||||
_fgcolor.setNamedColor('white')
|
||||
_format.setForeground(_fgcolor)
|
||||
return _format
|
||||
_bgcolor = QColor()
|
||||
_bgcolor.setNamedColor(bg)
|
||||
_format.setBackground(_bgcolor)
|
||||
return _format
|
||||
|
||||
aFORMATS = {
|
||||
'keyword': hl.format('blue', 'bold'),
|
||||
'operator': hl.format('red'),
|
||||
'brace': hl.format('darkGray'),
|
||||
'defclass': hl.format('black', 'bold'),
|
||||
'string': hl.format('magenta'),
|
||||
'string2': hl.format('darkMagenta'),
|
||||
'comment': hl.format('darkGreen', 'italic'),
|
||||
'self': hl.format('black', 'italic'),
|
||||
'numbers': hl.format('brown'),
|
||||
'inprompt': hl.format('darkBlue', 'bold'),
|
||||
'outprompt': hl.format('darkRed', 'bold'),
|
||||
}
|
||||
aFORMATS = {
|
||||
'keyword': hl_format('blue', 'bold'),
|
||||
'operator': hl_format('red'),
|
||||
'brace': hl_format('darkGray'),
|
||||
'defclass': hl_format('black', 'bold'),
|
||||
'string': hl_format('magenta'),
|
||||
'string2': hl_format('darkMagenta'),
|
||||
'comment': hl_format('darkGreen', 'italic'),
|
||||
'self': hl_format('black', 'italic'),
|
||||
'numbers': hl_format('brown'),
|
||||
'inprompt': hl_format('darkBlue', 'bold'),
|
||||
'outprompt': hl_format('darkRed', 'bold'),
|
||||
}
|
||||
else:
|
||||
bg = 'black'
|
||||
def hl_format(color, style=''):
|
||||
|
||||
"""Return a QTextCharFormat with the given attributes.
|
||||
unused
|
||||
"""
|
||||
_color = QColor()
|
||||
_color.setNamedColor(color)
|
||||
|
||||
_format = QTextCharFormat()
|
||||
_format.setForeground(_color)
|
||||
if 'bold' in style:
|
||||
_format.setFontWeight(QFont.Bold)
|
||||
if 'italic' in style:
|
||||
_format.setFontItalic(True)
|
||||
|
||||
_bgcolor = QColor()
|
||||
_bgcolor.setNamedColor(bg)
|
||||
_format.setBackground(_bgcolor)
|
||||
return _format
|
||||
aFORMATS = {
|
||||
'keyword': hl_format('blue', 'bold'),
|
||||
'operator': hl_format('red'),
|
||||
'brace': hl_format('lightGray'),
|
||||
'defclass': hl_format('white', 'bold'),
|
||||
'string': hl_format('magenta'),
|
||||
'string2': hl_format('lightMagenta'),
|
||||
'comment': hl_format('lightGreen', 'italic'),
|
||||
'self': hl_format('white', 'italic'),
|
||||
'numbers': hl_format('lightBrown'),
|
||||
'inprompt': hl_format('lightBlue', 'bold'),
|
||||
'outprompt': hl_format('lightRed', 'bold'),
|
||||
}
|
||||
|
||||
|
||||
class QTextEditLogger(logging.Handler):
|
||||
def __init__(self, parent, app):
|
||||
@ -177,8 +213,10 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
|
||||
self.actionTest_tox = QtWidgets.QAction(window)
|
||||
self.actionTest_tox.setObjectName("actionTest_tox")
|
||||
self.actionTest_socks = QtWidgets.QAction(window)
|
||||
self.actionTest_socks.setObjectName("actionTest_socks")
|
||||
self.actionTest_nmap = QtWidgets.QAction(window)
|
||||
self.actionTest_nmap.setObjectName("actionTest_nmap")
|
||||
self.actionTest_main = QtWidgets.QAction(window)
|
||||
self.actionTest_main.setObjectName("actionTest_main")
|
||||
self.actionQuit_program = QtWidgets.QAction(window)
|
||||
self.actionQuit_program.setObjectName("actionQuit_program")
|
||||
|
||||
@ -231,7 +269,8 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
self.menuProfile.addAction(self.actionSettings)
|
||||
self.menuProfile.addAction(self.lockApp)
|
||||
self.menuProfile.addAction(self.actionTest_tox)
|
||||
self.menuProfile.addAction(self.actionTest_socks)
|
||||
self.menuProfile.addAction(self.actionTest_nmap)
|
||||
self.menuProfile.addAction(self.actionTest_main)
|
||||
self.menuProfile.addAction(self.actionQuit_program)
|
||||
|
||||
self.menuGC.addAction(self.createGC)
|
||||
@ -260,7 +299,8 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
self.menubar.addAction(self.menuPlugins.menuAction())
|
||||
self.menubar.addAction(self.menuAbout.menuAction())
|
||||
|
||||
self.actionTest_socks.triggered.connect(self.test_socks)
|
||||
self.actionTest_nmap.triggered.connect(self.test_nmap)
|
||||
self.actionTest_main.triggered.connect(self.test_main)
|
||||
self.actionTest_tox.triggered.connect(self.test_tox)
|
||||
|
||||
self.actionQuit_program.triggered.connect(self.quit_program)
|
||||
@ -322,7 +362,8 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
self.actionLog_console.setText(util_ui.tr("Console Log"))
|
||||
self.actionPython_console.setText(util_ui.tr("Python Console"))
|
||||
self.actionTest_tox.setText(util_ui.tr("Bootstrap"))
|
||||
self.actionTest_socks.setText(util_ui.tr("Test program"))
|
||||
self.actionTest_nmap.setText(util_ui.tr("Test Nmap"))
|
||||
self.actionTest_main.setText(util_ui.tr("Test Program"))
|
||||
self.actionQuit_program.setText(util_ui.tr("Quit program"))
|
||||
self.actionSettings.setText(util_ui.tr("Settings"))
|
||||
self.audioSettings.setText(util_ui.tr("Audio"))
|
||||
@ -628,13 +669,17 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
|
||||
try:
|
||||
if not self._pe:
|
||||
self._pe = PythonConsole(sFont=font_name,
|
||||
formats=aFORMATS,
|
||||
bBold=True,
|
||||
font_width=size)
|
||||
self._pe = PythonConsole(formats=aFORMATS)
|
||||
self._pe.setWindowTitle('variable: app is the application')
|
||||
# self._pe.edit.setStyleSheet('foreground: white; background-color: black;}')
|
||||
# Fix the pyconsole geometry
|
||||
|
||||
font = self._pe.edit.document().defaultFont()
|
||||
font.setFamily(font_name)
|
||||
font.setBold(True)
|
||||
if font_width is None:
|
||||
font_width = QFontMetrics(font).width('M')
|
||||
self._pe.setFont(font)
|
||||
geometry = self._pe.geometry()
|
||||
geometry.setWidth(font_width*80+20)
|
||||
geometry.setHeight(font_width*40)
|
||||
@ -736,6 +781,9 @@ class MainWindow(QtWidgets.QMainWindow):
|
||||
def test_nmap(self):
|
||||
self._app._test_nmap()
|
||||
|
||||
def test_main(self):
|
||||
self._app._test_main()
|
||||
|
||||
def quit_program(self):
|
||||
try:
|
||||
self.close_window()
|
||||
|
@ -63,9 +63,17 @@ class ProfileManager:
|
||||
def save_profile(self, data):
|
||||
if self._toxes.has_password():
|
||||
data = self._toxes.pass_encrypt(data)
|
||||
with open(self._path, 'wb') as fl:
|
||||
fl.write(data)
|
||||
LOG_INFO('Profile saved successfully to' +self._path)
|
||||
try:
|
||||
suf = f"{os.getpid()}"
|
||||
with open(self._path+suf, 'wb') as fl:
|
||||
fl.write(data)
|
||||
stat = os.stat(self._path+suf)
|
||||
if hasattr(stat, 'st_blocks'):
|
||||
assert stat.st_blocks > 0, f"Zero length file {self._path+suf}"
|
||||
os.rename(self._path+suf,self._path)
|
||||
LOG_INFO('Profile saved successfully to' +self._path)
|
||||
except Exception as e:
|
||||
LOG_WARN(f"Profile save failed to {self._path}\n{e}")
|
||||
|
||||
self._profile_saved_event(data)
|
||||
|
||||
|
@ -138,9 +138,8 @@ class Settings(dict):
|
||||
self._profile_path = path.replace('.json', '.tox')
|
||||
self._toxes = toxes
|
||||
self._app = app
|
||||
self._args = app._args
|
||||
self.LOG = lambda l: LOG.log(self._args.loglevel, l)
|
||||
self._log = self.LOG
|
||||
self._oArgs = app._oArgs
|
||||
self._log = lambda l: LOG.log(self._oArgs.loglevel, l)
|
||||
|
||||
self._settings_saved_event = Event()
|
||||
if path and os.path.isfile(path):
|
||||
@ -156,29 +155,29 @@ class Settings(dict):
|
||||
text = title + path
|
||||
LOG.error(title +str(ex))
|
||||
util_ui.message_box(text, title)
|
||||
info = Settings.get_default_settings(app._args)
|
||||
info = Settings.get_default_settings(app._oArgs)
|
||||
user_data.settings.clean_settings(info)
|
||||
else:
|
||||
LOG.debug('get_default_settings for: ' + repr(path))
|
||||
info = Settings.get_default_settings(app._args)
|
||||
info = Settings.get_default_settings(app._oArgs)
|
||||
|
||||
if not os.path.exists(path):
|
||||
merge_args_into_settings(app._args, info)
|
||||
merge_oArgs_into_settings(app._oArgs, info)
|
||||
else:
|
||||
aC = self._changed(app._args, info)
|
||||
aC = self._changed(app._oArgs, info)
|
||||
if aC:
|
||||
title = 'Override profile with commandline - '
|
||||
if path:
|
||||
title += os.path.basename(path)
|
||||
text = 'Override profile with command-line settings? \n'
|
||||
# text += '\n'.join([str(key) +'=' +str(val) for
|
||||
# key,val in self._changed(app._args).items()])
|
||||
# key,val in self._changed(app._oArgs).items()])
|
||||
text += repr(aC)
|
||||
reply = util_ui.question(text, title)
|
||||
if reply:
|
||||
merge_args_into_settings(app._args, info)
|
||||
info['audio'] = getattr(app._args, 'audio')
|
||||
info['video'] = getattr(app._args, 'video')
|
||||
merge_oArgs_into_settings(app._oArgs, info)
|
||||
info['audio'] = getattr(app._oArgs, 'audio')
|
||||
info['video'] = getattr(app._oArgs, 'video')
|
||||
super().__init__(info)
|
||||
self._upgrade()
|
||||
|
||||
@ -316,6 +315,7 @@ class Settings(dict):
|
||||
# FixMe: match? /var/local/src/c-toxcore/toxcore/tox.h
|
||||
'ipv6_enabled': True,
|
||||
'udp_enabled': True,
|
||||
'trace_enabled': False,
|
||||
'local_discovery_enabled': True,
|
||||
'dht_announcements_enabled': True,
|
||||
'proxy_type': 0,
|
||||
|
Loading…
Reference in New Issue
Block a user