| 
									
										
										
										
											2006-10-16 15:24:23 +02:00
										 |  |  | #!/usr/bin/python | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Copyright (C) 2006, Red Hat, Inc. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # This program is free software; you can redistribute it and/or modify | 
					
						
							|  |  |  | # it under the terms of the GNU General Public License as published by | 
					
						
							|  |  |  | # the Free Software Foundation; either version 2 of the License, or | 
					
						
							|  |  |  | # (at your option) any later version. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # This program is distributed in the hope that it will be useful, | 
					
						
							|  |  |  | # but WITHOUT ANY WARRANTY; without even the implied warranty of | 
					
						
							|  |  |  | # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | 
					
						
							|  |  |  | # GNU General Public License for more details. | 
					
						
							|  |  |  | # | 
					
						
							|  |  |  | # You should have received a copy of the GNU General Public License | 
					
						
							|  |  |  | # along with this program; if not, write to the Free Software | 
					
						
							|  |  |  | # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import os | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import pygtk | 
					
						
							|  |  |  | pygtk.require('2.0') | 
					
						
							|  |  |  | import gtk | 
					
						
							|  |  |  | import gobject | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | from sugar import env | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class LogBuffer(gtk.TextBuffer): | 
					
						
							|  |  |  | 	def __init__(self, logfile): | 
					
						
							|  |  |  | 		gtk.TextBuffer.__init__(self) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		self._logfile = logfile | 
					
						
							|  |  |  | 		self._pos = 0 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-10-16 16:26:37 +02:00
										 |  |  | 		self.update() | 
					
						
							| 
									
										
										
										
											2006-10-16 15:24:23 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-10-16 16:26:37 +02:00
										 |  |  | 	def update(self): | 
					
						
							| 
									
										
										
										
											2006-10-16 15:24:23 +02:00
										 |  |  | 		f = open(self._logfile, 'r') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		f.seek(self._pos) | 
					
						
							|  |  |  | 		self.insert(self.get_end_iter(), f.read()) | 
					
						
							|  |  |  | 		self._pos = f.tell() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		f.close() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return True | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-10-16 16:26:37 +02:00
										 |  |  | class LogView(gtk.ScrolledWindow): | 
					
						
							|  |  |  | 	def __init__(self, model): | 
					
						
							|  |  |  | 		gtk.ScrolledWindow.__init__(self) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		self.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		textview = gtk.TextView(model) | 
					
						
							|  |  |  | 		textview.set_wrap_mode(gtk.WRAP_WORD) | 
					
						
							|  |  |  | 		textview.set_editable(False) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		self.add(textview) | 
					
						
							|  |  |  | 		textview.show() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class MultiLogView(gtk.Notebook): | 
					
						
							|  |  |  | 	def __init__(self, path): | 
					
						
							|  |  |  | 		gtk.Notebook.__init__(self) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		self._logs_path = path | 
					
						
							|  |  |  | 		self._pages = {} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		self._update() | 
					
						
							| 
									
										
										
										
											2006-10-16 16:38:02 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-10-16 16:26:37 +02:00
										 |  |  | 		gobject.timeout_add(1000, self._update) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	def _add_page(self, logfile): | 
					
						
							|  |  |  | 		full_log_path = os.path.join(self._logs_path, logfile) | 
					
						
							|  |  |  | 		model = LogBuffer(full_log_path) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		view = LogView(model) | 
					
						
							|  |  |  | 		self.append_page(view, gtk.Label(logfile)) | 
					
						
							|  |  |  | 		view.show() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		self._pages[logfile] = model | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	def _update(self): | 
					
						
							| 
									
										
										
										
											2006-10-16 16:38:02 +02:00
										 |  |  | 		if not os.path.isdir(self._logs_path): | 
					
						
							|  |  |  | 			return True | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-10-16 16:26:37 +02:00
										 |  |  | 		for logfile in os.listdir(self._logs_path): | 
					
						
							|  |  |  | 			if self._pages.has_key(logfile): | 
					
						
							|  |  |  | 				self._pages[logfile].update() | 
					
						
							|  |  |  | 			else: | 
					
						
							|  |  |  | 				self._add_page(logfile) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-10-16 16:38:02 +02:00
										 |  |  | 		return True | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-10-16 15:24:23 +02:00
										 |  |  | window = gtk.Window() | 
					
						
							| 
									
										
										
										
											2006-10-16 15:29:32 +02:00
										 |  |  | window.set_default_size(gtk.gdk.screen_width() * 3 / 4, | 
					
						
							|  |  |  | 						gtk.gdk.screen_height() * 3 / 4) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | window.realize() | 
					
						
							|  |  |  | window.window.set_type_hint(gtk.gdk.WINDOW_TYPE_HINT_DIALOG) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-10-16 16:26:37 +02:00
										 |  |  | path = os.path.join(env.get_profile_path(), 'logs') | 
					
						
							|  |  |  | viewer = MultiLogView(path) | 
					
						
							|  |  |  | window.add(viewer) | 
					
						
							|  |  |  | viewer.show() | 
					
						
							| 
									
										
										
										
											2006-10-16 15:29:32 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2006-10-16 15:24:23 +02:00
										 |  |  | window.show() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | gtk.main() |