Windows: Add debug logging switch in preferences
If debug logging is enabled verbose output is redirected to a file in the user dir
This commit is contained in:
parent
3bdcd53ff5
commit
5db0178a15
|
@ -34,6 +34,8 @@
|
||||||
# along with Gajim. If not, see <http://www.gnu.org/licenses/>.
|
# along with Gajim. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
|
from datetime import datetime
|
||||||
|
from pathlib import Path
|
||||||
from urllib.parse import unquote
|
from urllib.parse import unquote
|
||||||
|
|
||||||
from gi.repository import GLib, Gio, Gtk
|
from gi.repository import GLib, Gio, Gtk
|
||||||
|
@ -291,7 +293,14 @@ class GajimApplication(Gtk.Application):
|
||||||
configpaths.set_config_root(path)
|
configpaths.set_config_root(path)
|
||||||
|
|
||||||
configpaths.init()
|
configpaths.init()
|
||||||
logging_helpers.init()
|
|
||||||
|
if app.get_win_debug_mode():
|
||||||
|
# Redirect has to happen before logging init
|
||||||
|
self._redirect_output()
|
||||||
|
logging_helpers.init()
|
||||||
|
logging_helpers.set_verbose()
|
||||||
|
else:
|
||||||
|
logging_helpers.init()
|
||||||
|
|
||||||
if options.contains('quiet'):
|
if options.contains('quiet'):
|
||||||
logging_helpers.set_quiet()
|
logging_helpers.set_quiet()
|
||||||
|
@ -318,6 +327,14 @@ class GajimApplication(Gtk.Application):
|
||||||
warnings.showwarning = warn_with_traceback
|
warnings.showwarning = warn_with_traceback
|
||||||
warnings.filterwarnings(action="always")
|
warnings.filterwarnings(action="always")
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def _redirect_output():
|
||||||
|
debug_folder = Path(configpaths.get('DEBUG'))
|
||||||
|
date = datetime.today().strftime('%Y-%m-%d')
|
||||||
|
filename = '%s-debug.log' % date
|
||||||
|
fd = open(debug_folder / filename, 'a')
|
||||||
|
sys.stderr = sys.stdout = fd
|
||||||
|
|
||||||
def add_actions(self):
|
def add_actions(self):
|
||||||
''' Build Application Actions '''
|
''' Build Application Actions '''
|
||||||
from gajim import app_actions
|
from gajim import app_actions
|
||||||
|
|
|
@ -646,3 +646,19 @@ def get_app_window(cls, account=None):
|
||||||
def load_css_config():
|
def load_css_config():
|
||||||
global css_config
|
global css_config
|
||||||
css_config = CSSConfig()
|
css_config = CSSConfig()
|
||||||
|
|
||||||
|
def set_win_debug_mode(enable: bool) -> None:
|
||||||
|
debug_folder = Path(configpaths.get('DEBUG'))
|
||||||
|
debug_enabled = debug_folder / 'debug-enabled'
|
||||||
|
if enable:
|
||||||
|
debug_enabled.touch()
|
||||||
|
else:
|
||||||
|
if debug_enabled.exists():
|
||||||
|
debug_enabled.unlink()
|
||||||
|
|
||||||
|
def get_win_debug_mode() -> bool:
|
||||||
|
if sys.platform != 'win32':
|
||||||
|
return False
|
||||||
|
debug_folder = Path(configpaths.get('DEBUG'))
|
||||||
|
debug_enabled = debug_folder / 'debug-enabled'
|
||||||
|
return debug_enabled.exists()
|
||||||
|
|
|
@ -195,6 +195,7 @@ class ConfigPaths:
|
||||||
# Data paths
|
# Data paths
|
||||||
('SECRETS_FILE', 'secrets', PathLocation.DATA, PathType.FILE),
|
('SECRETS_FILE', 'secrets', PathLocation.DATA, PathType.FILE),
|
||||||
('MY_PEER_CERTS', 'certs', PathLocation.DATA, PathType.FOLDER),
|
('MY_PEER_CERTS', 'certs', PathLocation.DATA, PathType.FOLDER),
|
||||||
|
('DEBUG', 'debug', PathLocation.DATA, PathType.FOLDER),
|
||||||
|
|
||||||
# Config paths
|
# Config paths
|
||||||
('CONFIG_FILE', 'config', PathLocation.CONFIG, PathType.FILE),
|
('CONFIG_FILE', 'config', PathLocation.CONFIG, PathType.FILE),
|
||||||
|
|
|
@ -1509,6 +1509,7 @@ $T will be replaced by auto-not-available timeout</property>
|
||||||
<property name="orientation">vertical</property>
|
<property name="orientation">vertical</property>
|
||||||
<property name="spacing">12</property>
|
<property name="spacing">12</property>
|
||||||
<child>
|
<child>
|
||||||
|
<placeholder/>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkFrame" id="frame3">
|
<object class="GtkFrame" id="frame3">
|
||||||
|
@ -1640,6 +1641,7 @@ $T will be replaced by auto-not-available timeout</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
<child>
|
<child>
|
||||||
|
<placeholder/>
|
||||||
</child>
|
</child>
|
||||||
</object>
|
</object>
|
||||||
<packing>
|
<packing>
|
||||||
|
@ -2384,6 +2386,23 @@ to discover one from server.</property>
|
||||||
<property name="position">0</property>
|
<property name="position">0</property>
|
||||||
</packing>
|
</packing>
|
||||||
</child>
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkCheckButton" id="enable_logging">
|
||||||
|
<property name="label" translatable="yes">Enable debug logging</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="receives_default">False</property>
|
||||||
|
<property name="no_show_all">True</property>
|
||||||
|
<property name="halign">start</property>
|
||||||
|
<property name="use_underline">True</property>
|
||||||
|
<property name="draw_indicator">True</property>
|
||||||
|
<signal name="toggled" handler="on_enable_logging_toggled" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
</object>
|
</object>
|
||||||
</child>
|
</child>
|
||||||
<child type="label">
|
<child type="label">
|
||||||
|
|
|
@ -13,6 +13,7 @@
|
||||||
# along with Gajim. If not, see <http://www.gnu.org/licenses/>.
|
# along with Gajim. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
import sys
|
||||||
|
|
||||||
from gi.repository import Gtk
|
from gi.repository import Gtk
|
||||||
from gi.repository import Gdk
|
from gi.repository import Gdk
|
||||||
|
@ -449,6 +450,11 @@ class Preferences(Gtk.ApplicationWindow):
|
||||||
else:
|
else:
|
||||||
w.set_active(st)
|
w.set_active(st)
|
||||||
|
|
||||||
|
if sys.platform == 'win32':
|
||||||
|
w = self.xml.get_object('enable_logging')
|
||||||
|
w.set_active(app.get_win_debug_mode())
|
||||||
|
w.show()
|
||||||
|
|
||||||
self.xml.connect_signals(self)
|
self.xml.connect_signals(self)
|
||||||
self.connect('key-press-event', self._on_key_press)
|
self.connect('key-press-event', self._on_key_press)
|
||||||
|
|
||||||
|
@ -998,3 +1004,6 @@ class Preferences(Gtk.ApplicationWindow):
|
||||||
else:
|
else:
|
||||||
app.interface.instances['advanced_config'] = \
|
app.interface.instances['advanced_config'] = \
|
||||||
AdvancedConfigurationWindow(self)
|
AdvancedConfigurationWindow(self)
|
||||||
|
|
||||||
|
def on_enable_logging_toggled(self, widget):
|
||||||
|
app.set_win_debug_mode(widget.get_active())
|
||||||
|
|
Loading…
Reference in New Issue