Skip to content
Snippets Groups Projects
Commit 5db0178a authored by Philipp Hörist's avatar Philipp Hörist
Browse files

Windows: Add debug logging switch in preferences

If debug logging is enabled verbose output is redirected to a file
in the user dir
parent 3bdcd53f
No related branches found
No related tags found
No related merge requests found
...@@ -34,6 +34,8 @@ ...@@ -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): ...@@ -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): ...@@ -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): ...@@ -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: ...@@ -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> ...@@ -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> ...@@ -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> ...@@ -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 @@ ...@@ -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): ...@@ -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): ...@@ -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())
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment