[Pymoul-svn] SF.net SVN: pymoul: [154] pymoul/trunk/src/moul
Status: Alpha
Brought to you by:
tiran
|
From: <ti...@us...> - 2007-02-07 13:28:12
|
Revision: 154
http://pymoul.svn.sourceforge.net/pymoul/?rev=154&view=rev
Author: tiran
Date: 2007-02-07 05:28:12 -0800 (Wed, 07 Feb 2007)
Log Message:
-----------
Removed clear call from Threadlet.run()
Implemented first version of chat log browser
Modified Paths:
--------------
pymoul/trunk/src/moul/file/chatlog.py
pymoul/trunk/src/moul/qt/mainwindow.py
pymoul/trunk/src/moul/qt/threadlet.py
Modified: pymoul/trunk/src/moul/file/chatlog.py
===================================================================
--- pymoul/trunk/src/moul/file/chatlog.py 2007-02-07 11:31:49 UTC (rev 153)
+++ pymoul/trunk/src/moul/file/chatlog.py 2007-02-07 13:28:12 UTC (rev 154)
@@ -204,40 +204,47 @@
Lists all chat logs in the directory
"""
- def __init__(self, logdir):
- self._logdir = logdir
- self._logfiles = [] # list of ChatlogViews
+ def __init__(self, archivedir):
+ self._archivedir = archivedir
+ self._chatlogs = [] # list of ChatlogViews
+ LOG.debug("Chatlogs DV in %s" % archivedir)
self.refresh()
def refresh(self):
"""Refresh list
"""
# TODO: inefficient, compare list with directory content
- if not os.path.isdir(self._logdir):
- LOG.warning("%s is not a directory" % logdir)
- return
- self._logfiles[:] = []
+ if not os.path.isdir(self._archivedir):
+ LOG.warning("%s is not a directory" % self._archivedir)
+ return
+ self._chatlogs[:] = []
self._findChatlogs()
def _findChatlogs(self):
"""Find chat logs in logdir directory
"""
- for name in os.listdir(self._logdir):
- fname = os.path.join(self._logdir, name)
+ for name in os.listdir(self._archivedir):
+ fname = os.path.join(self._archivedir, name)
if not os.path.isfile(fname):
continue
chatlog = ChatlogView(fname)
if chatlog.date is not None:
- self._logfiles.append(chatlog)
- self._logfiles.sort(key=lambda element:(element.date, element.name))
+ self._chatlogs.append(chatlog)
+ self._chatlogs.sort(key=lambda element:element.name)
def __len__(self):
"""len() support
"""
- return len(self._logfiles)
+ return len(self._chatlogs)
def __iter__(self):
- return iter(self._logfiles)
+ return iter(self._chatlogs)
+
+ def __contains__(self, other):
+ return other in self._chatlogs
+
+ def __getitem__(self, idx):
+ return self._chatlogs[idx]
class ChatlogView(object):
"""A view of a single chat log file
@@ -271,9 +278,21 @@
if not mo:
# urks
return None
- d = mo.groupdict()
+ d = {}
+ for key, value in mo.groupdict().items():
+ d[key] = int(value)
self._date = d
return d
+
+ @property
+ def humanname(self):
+ """Human readable name
+ """
+ d = self.date
+ if not d:
+ return self.name
+ return "Chatlog %02i:%02i - %02i:%02i %02i-%02i-%02i" % (
+ d['ch'], d['cm'], d['sh'], d['sm'], d['Y'], d['M'], d['D'])
def open(self):
"""Open fhe file
@@ -281,6 +300,7 @@
if not self._opened:
self._fd = open(self._fname, 'r')
self._opened = True
+ self._fd.seek(0)
def close(self):
"""Close the file
@@ -298,4 +318,4 @@
@rtype: str
"""
self.open()
- self._fd.read()
+ return self._fd.read()
Modified: pymoul/trunk/src/moul/qt/mainwindow.py
===================================================================
--- pymoul/trunk/src/moul/qt/mainwindow.py 2007-02-07 11:31:49 UTC (rev 153)
+++ pymoul/trunk/src/moul/qt/mainwindow.py 2007-02-07 13:28:12 UTC (rev 154)
@@ -46,6 +46,7 @@
from moul.qt.wdysini import IniFileContainer
from moul.qt.simpleprogressbar import SimpleProgressbar
from moul.qt.threadlet import YieldingThreadlet
+from moul.qt.threadlet import Threadlet
from moul.qt.ui.mainwindow import Ui_MainWindow
from moul.qt import utils as qtutils
@@ -87,6 +88,7 @@
self._ping_init()
self._systray_init()
self._about_init()
+ self._chatlog_init()
self.qcLocalization = LocalizationContainer(self)
self.qcIniFile = IniFileContainer(self)
@@ -208,7 +210,45 @@
# ************************************************************************
# tasks
+ def _chatlog_init(self):
+ self._chatlog_threadlet = Threadlet(self)
+ self.connect(self, SIGNAL("chatlogsUpdated()"),
+ self._chatlog_threadlet.start)
+ self.connect(self._chatlog_threadlet, SIGNAL("finished()"),
+ self.on_chatlogview_refresh)
+ # detach and fire
+ self._chatlog_threadlet.detach(self.on_chatlogs_updated)
+
@pyqtSignature("")
+ def on_chatlogs_updated(self):
+ """
+ Called as detached method inside a threadlet
+ """
+ self.urupersonaldir.chatview.refresh()
+
+ @pyqtSignature("")
+ def on_chatlogview_refresh(self):
+ """
+ Called when the chatlet threadlet has finished
+ """
+ self.cb_chatlog.clear()
+ lst = [chatview.humanname
+ for chatview in self.urupersonaldir.chatview]
+ lst.insert(0, "<choose>")
+ self.cb_chatlog.addItems(QtCore.QStringList(lst))
+
+ @pyqtSignature("int")
+ def on_cb_chatlog_currentIndexChanged(self, idx):
+ """
+ """
+ self.tb_chatlog_view.clear()
+ if idx < 1:
+ # chooser or -1
+ return
+ chatview = self.urupersonaldir.chatview[idx-1]
+ self.tb_chatlog_view.setPlainText(chatview.view())
+
+ @pyqtSignature("")
def on_pb_kiimage_repair_clicked(self):
"""
Clicked repair button
@@ -262,7 +302,6 @@
def on_pb_log_archive_clicked(self):
"""
"""
- self.emit(SIGNAL("chatlogsUpdated()"))
chatmover = self.urupersonaldir.chatmover
logzipper = self.urupersonaldir.logzipper
if chatmover.findLogs():
@@ -273,12 +312,16 @@
len(chatmover))
)
mb.exec_()
+ self.emit(SIGNAL("chatlogsUpdated()"))
else:
mb = qtutils.infoMB(self,
self.trUtf8("Chatlog archive"),
self.trUtf8("No chatlog(s) to archive")
)
mb.exec_()
+ # also emit the signal here so the button reacts as a refresh
+ # button, too
+ self.emit(SIGNAL("chatlogsUpdated()"))
#mb = qtutils.notImplementedMB(self)
#mb.exec_()
Modified: pymoul/trunk/src/moul/qt/threadlet.py
===================================================================
--- pymoul/trunk/src/moul/qt/threadlet.py 2007-02-07 11:31:49 UTC (rev 153)
+++ pymoul/trunk/src/moul/qt/threadlet.py 2007-02-07 13:28:12 UTC (rev 154)
@@ -79,6 +79,9 @@
self._args = None
self._kwargs = None
+ def __del__(self):
+ self.clear()
+
def detach(self, obj, *args, **kwargs):
"""
Detach a function call
@@ -89,8 +92,8 @@
"""
self.mutex.lock()
self._obj = obj
- self._args = args
- self._kwargs = kwargs
+ self._args = args or ()
+ self._kwargs = kwargs or {}
self.mutex.unlock()
if not self.isRunning():
self.start()
@@ -107,7 +110,6 @@
self.mutex.lock()
result = self._obj(*self._args, **self._kwargs)
self.emit(SIGNAL("done(result)"), result)
- self.clear()
self.mutex.unlock()
class YieldingThreadlet(Threadlet):
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|