Show Lutris logs in System tab

This commit is contained in:
Mathieu Comandon 2024-04-13 01:03:46 -07:00
parent 4552089cc4
commit 41c57cf66b

View file

@ -1,11 +1,14 @@
import os
from gettext import gettext as _
from typing import Dict, Iterable, List
from gi.repository import Gdk, Gtk
from lutris.gui.config.base_config_box import BaseConfigBox
from lutris.gui.widgets.log_text_view import LogTextView
from lutris.util import linux, system
from lutris.util.linux import gather_system_info_dict
from lutris.util.log import LOG_FILENAME
from lutris.util.strings import gtk_safe
from lutris.util.wine.wine import is_esync_limit_set, is_fsync_supported, is_installed_systemwide
@ -46,14 +49,41 @@ class SystemBox(BaseConfigBox):
sysinfo_frame.add(self.scrolled_window)
self.pack_start(sysinfo_frame, True, True, 0)
button_copy = Gtk.Button(_("Copy to Clipboard"), halign=Gtk.Align.START, visible=True)
button_copy = Gtk.Button(_("Copy system info to Clipboard"), halign=Gtk.Align.START, visible=True)
button_copy.connect("clicked", self.on_copy_clicked)
self.pack_start(button_copy, False, False, 0)
self.pack_start(self.get_section_label(_("Lutris logs")), False, False, 0)
self.log_scrolled_window = Gtk.ScrolledWindow(visible=True)
self.log_scrolled_window.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC)
log_frame = Gtk.Frame(visible=True)
log_frame.get_style_context().add_class("info-frame")
log_frame.add(self.log_scrolled_window)
self.pack_start(log_frame, True, True, 0)
button_log_copy = Gtk.Button(_("Copy logs to Clipboard"), halign=Gtk.Align.START, visible=True)
button_log_copy.connect("clicked", self.on_copy_log_clicked)
self.pack_start(button_log_copy, False, False, 0)
def populate(self):
items = self.get_items()
self.scrolled_window.add(self.get_grid(items))
self.log_scrolled_window.add(self.get_log_view())
def get_log_view(self):
log_buffer = Gtk.TextBuffer()
log_buffer.set_text(self.get_log_contents())
return LogTextView(log_buffer)
def get_log_contents(self):
if not os.path.exists(LOG_FILENAME):
return ""
with open(LOG_FILENAME, encoding="utf-8") as log_file:
content = log_file.read()
return content
def get_items(self) -> list:
"""Assembles a list of items to display; most items are name-value tuples
@ -127,3 +157,8 @@ class SystemBox(BaseConfigBox):
clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
clipboard.set_text(text.strip(), -1)
def on_copy_log_clicked(self, _widget) -> None:
text = self.get_log_contents()
clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
clipboard.set_text(text.strip(), -1)