Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGonzalo Odiard <godiard@gmail.com>2014-02-11 20:00:39 (GMT)
committer Gonzalo Odiard <godiard@gmail.com>2014-02-11 20:16:13 (GMT)
commit3add3f3733354dfb9897485cff8c8d672c28e6a6 (patch)
tree25dc5e87636a15c456f636c94e34157e4816ff1c
parent7030f1fc6cfc65bab8eca9c4b1798a5cb6c12994 (diff)
Big logviewer refactoring. Fix update of opened files
-rw-r--r--develop-activity/develop_app.py33
-rw-r--r--develop-activity/logviewer.py161
2 files changed, 87 insertions, 107 deletions
diff --git a/develop-activity/develop_app.py b/develop-activity/develop_app.py
index 1430930..a9a877d 100644
--- a/develop-activity/develop_app.py
+++ b/develop-activity/develop_app.py
@@ -46,7 +46,7 @@ import logviewer
import sourceview_editor
S_WHERE = sourceview_editor.S_WHERE
import new_activity
-
+from widgets import TabLabel
from symbols_tree import SymbolsTree
DEBUG_FILTER_LEVEL = 1
@@ -428,7 +428,11 @@ class DevelopActivity(activity.Activity):
"""
self.open_activity(activity_dir)
namefilter = ActivityBundle(activity_dir).get_bundle_id()
- self.logview = logviewer.LogMinder(self, namefilter)
+ self._log_files_viewer = logviewer.LogFilesViewer(namefilter)
+ self._log_files_viewer.connect('file-selected',
+ self.__log_file_selected_cb)
+ self.treenotebook.add_page(_("Log"), self._log_files_viewer)
+
self.set_dirty(False)
def refresh_files(self):
@@ -463,6 +467,31 @@ class DevelopActivity(activity.Activity):
self.load_file(path)
self.numb = False
+ def __log_file_selected_cb(self, log_file_viewer, path):
+ if not path:
+ return
+
+ if os.path.isdir(path):
+ #do not try to open folders
+ return
+
+ # Set buffer and scroll down
+ if self.editor.set_to_page_like(path):
+ return
+ newlogview = logviewer.LogView(path, log_file_viewer)
+ scrollwnd = Gtk.ScrolledWindow()
+ scrollwnd.set_policy(Gtk.PolicyType.AUTOMATIC,
+ Gtk.PolicyType.AUTOMATIC)
+ scrollwnd.add(newlogview)
+ scrollwnd.page = newlogview
+ tablabel = TabLabel(newlogview, os.path.basename(path))
+ tablabel.connect(
+ 'tab-close', lambda widget, child:
+ self.editor.remove_page(self.editor.page_num(child)))
+ self.editor.append_page(scrollwnd, tablabel)
+ self.editor.show_all()
+ self.editor.set_current_page(-1)
+
def save_bundle(self, btn):
#create bundle
builder = XOPackager(Builder(Config(self.activity_dir, '/tmp')))
diff --git a/develop-activity/logviewer.py b/develop-activity/logviewer.py
index 9b517bd..3bed44b 100644
--- a/develop-activity/logviewer.py
+++ b/develop-activity/logviewer.py
@@ -31,44 +31,61 @@ from sugar3.graphics import style
from sourceview_editor import TabLabel
-#does not import develop_app, but references internals from the activity,
-# as passed to init.
-#In other words, needs refactoring.
-
def _get_filename_from_path(path):
return os.path.split(path)[-1]
-class LogMinder(Gtk.VBox):
+class LogFilesViewer(Gtk.ScrolledWindow):
+ __gtype_name__ = 'LogFileViewer'
+
+ __gsignals__ = {
+ 'file-selected': (GObject.SignalFlags.RUN_FIRST,
+ None,
+ ([str])),
+ }
+
+ def __init__(self, namefilter):
- def __init__(self, activity, namefilter, path=None, extra_files=None):
- self.activity = activity
self._openlogs = []
- logging.info('creating MultiLogView namefilter %s', namefilter)
- if not path:
- # Main path to watch: ~/.sugar/someuser/logs...
- path = os.path.join(os.path.expanduser("~"), ".sugar", "default",
- "logs")
+ logging.info('creating LogFilesViewer namefilter %s', namefilter)
+ # Main path to watch: ~/.sugar/someuser/logs...
+ path = os.path.join(os.path.expanduser("~"), ".sugar", "default",
+ "logs")
self._logs_path = path + '/'
- self._active_log = None
- self._extra_files = extra_files
+ self._extra_files = ['shell.log']
self._namefilter = namefilter
- # Creating Main treeview with Actitivities list
- self.file_viewer = LogFileViewer()
- self.file_viewer.connect('file-selected', self._load_log)
- self.file_viewer.set_title(_("Sugar logs"))
+ Gtk.ScrolledWindow.__init__(self)
- # the internals of the treeview
- self.file_viewer.init_logs(path, self._filter_by_name)
+ self.props.hscrollbar_policy = Gtk.PolicyType.AUTOMATIC
+ self.props.vscrollbar_policy = Gtk.PolicyType.AUTOMATIC
+ self.set_size_request(style.GRID_CELL_SIZE * 3, -1)
- self._monitors = []
+ self._path = None
+
+ self._tree_view = Gtk.TreeView()
+ self._tree_view.connect('cursor-changed', self.__cursor_changed_cb)
+ self.add(self._tree_view)
+ self._tree_view.show()
+
+ self._tree_view.props.headers_visible = False
+ selection = self._tree_view.get_selection()
+ selection.connect('changed', self.__selection_changed_cb)
- # Activities menu
- self.activity.treenotebook.add_page(_("Log"), self.file_viewer)
+ cell = Gtk.CellRendererText()
+ self._column = Gtk.TreeViewColumn()
+ self._column.pack_start(cell, True)
+ self._column.add_attribute(cell, 'text', 0)
+ self._tree_view.append_column(self._column)
+ self._tree_view.set_search_column(0)
+
+ # Configuration
+ self.set_title(_("Sugar logs"))
+ self.init_logs(path, self._filter_by_name)
+ self._monitors = []
self._configure_watcher()
@@ -92,91 +109,18 @@ class LogMinder(Gtk.VBox):
"""
def _log_file_changed_cb(self, monitor, path1, path2, event):
- _directory, logfile = os.path.split(str(path1))
-
if event == Gio.FileMonitorEvent.CHANGED:
for log in self._openlogs:
- if logfile in log.full_path:
+ if path1.get_path() == log.full_path:
+ logging.debug('updating logfile %s', path1.get_path())
log.update()
elif (event == Gio.FileMonitorEvent.DELETED
or event == Gio.FileMonitorEvent.CREATED):
- self.file_viewer.load_model()
- #If the log is open, just leave it that way
-
- # Load the log information in View (text_view)
- def _load_log(self, file_viewer, path):
- if not path:
- return
-
- if os.path.isdir(path):
- #do not try to open folders
- return
-
- # Set buffer and scroll down
- if self.activity.editor.set_to_page_like(path):
- return
- newlogview = LogView(path, self)
-
- scrollwnd = Gtk.ScrolledWindow()
- scrollwnd.set_policy(Gtk.PolicyType.AUTOMATIC,
- Gtk.PolicyType.AUTOMATIC)
- scrollwnd.add(newlogview)
- scrollwnd.page = newlogview
- file_name = os.path.basename(path)
- tablabel = TabLabel(newlogview, file_name)
- tablabel.connect(
- 'tab-close',
- lambda widget, child: self.activity.editor.remove_page(
- self.activity.editor.page_num(child)))
- self.activity.editor.append_page(scrollwnd, tablabel)
- self._active_log = newlogview
- self.activity.editor.show_all()
- self.activity.editor.set_current_page(-1)
+ self.load_model()
def _filter_by_name(self, filename):
return self._namefilter in filename
- def _remove_logview(self, logview):
- try:
- self._openlogs.remove(logview)
- except ValueError:
- logging.debug("_remove_logview failed")
-
-
-class LogFileViewer(Gtk.ScrolledWindow):
- __gtype_name__ = 'LogFileViewer'
-
- __gsignals__ = {
- 'file-selected': (GObject.SignalFlags.RUN_FIRST,
- None,
- ([str])),
- }
-
- def __init__(self):
- Gtk.ScrolledWindow.__init__(self)
-
- self.props.hscrollbar_policy = Gtk.PolicyType.AUTOMATIC
- self.props.vscrollbar_policy = Gtk.PolicyType.AUTOMATIC
- self.set_size_request(style.GRID_CELL_SIZE * 3, -1)
-
- self._path = None
-
- self._tree_view = Gtk.TreeView()
- self._tree_view.connect('cursor-changed', self.__cursor_changed_cb)
- self.add(self._tree_view)
- self._tree_view.show()
-
- self._tree_view.props.headers_visible = False
- selection = self._tree_view.get_selection()
- selection.connect('changed', self.__selection_changed_cb)
-
- cell = Gtk.CellRendererText()
- self._column = Gtk.TreeViewColumn()
- self._column.pack_start(cell, True)
- self._column.add_attribute(cell, 'text', 0)
- self._tree_view.append_column(self._column)
- self._tree_view.set_search_column(0)
-
def init_logs(self, path, filter_function):
self._path = path
self._filter_function = filter_function
@@ -221,8 +165,15 @@ class LogFileViewer(Gtk.ScrolledWindow):
def set_title(self, title):
self._column.set_title(title)
+ def remove_logview(self, logview):
+ try:
+ self._openlogs.remove(logview)
+ except ValueError:
+ logging.debug("_remove_logview failed")
+
class LogBuffer(Gtk.TextBuffer):
+
def __init__(self, logfile):
Gtk.TextBuffer.__init__(self)
@@ -249,12 +200,12 @@ class LogBuffer(Gtk.TextBuffer):
class LogView(Gtk.TextView):
- def __init__(self, full_path, logminder):
+ def __init__(self, full_path, log_file_viewer):
GObject.GObject.__init__(self)
- self.logminder = logminder
+ self._log_file_viewer = log_file_viewer
self.full_path = full_path
- self.logminder._openlogs.append(self)
+ self._log_file_viewer._openlogs.append(self)
self.set_wrap_mode(Gtk.WrapMode.WORD)
@@ -272,7 +223,7 @@ class LogView(Gtk.TextView):
self.show()
def remove(self):
- self.logminder._remove_logview(self)
+ self._log_file_viewer.remove_logview(self)
def _create_log_buffer(self, path):
self._written = False
@@ -280,11 +231,11 @@ class LogView(Gtk.TextView):
return False
if not os.path.exists(path):
- logging.error("ERROR: %s don't exists", path)
+ logging.error("_create_log_buffer: %s don't exists", path)
return False
if not os.access(path, os.R_OK):
- logging.error("ERROR: I can't read '%s' file", path)
+ logging.error("_create_log_buffer: I can't read '%s' file", path)
return False
self.filename = _get_filename_from_path(path)