SF.net SVN: fclient:[904] trunk/fclient/fclient/impl
Status: Pre-Alpha
Brought to you by:
jurner
|
From: <jU...@us...> - 2008-08-12 08:42:40
|
Revision: 904
http://fclient.svn.sourceforge.net/fclient/?rev=904&view=rev
Author: jUrner
Date: 2008-08-12 08:42:46 +0000 (Tue, 12 Aug 2008)
Log Message:
-----------
bit more work to impl a genaral purpose requests widget
Modified Paths:
--------------
trunk/fclient/fclient/impl/BaseRequestsWidget.py
trunk/fclient/fclient/impl/ViewDownloads.py
Modified: trunk/fclient/fclient/impl/BaseRequestsWidget.py
===================================================================
--- trunk/fclient/fclient/impl/BaseRequestsWidget.py 2008-08-12 08:41:55 UTC (rev 903)
+++ trunk/fclient/fclient/impl/BaseRequestsWidget.py 2008-08-12 08:42:46 UTC (rev 904)
@@ -89,6 +89,8 @@
StatusComplete = 'complete'
StatusError = 'error'
StatusRemoved = 'removed'
+ StatusCompressing = 'compressing'
+ ##StatusCompressed = 'compressed' #TODO: no way to distinguish compressed an loading
def __init__(self, fcpRequest, *params):
QtGui.QTreeWidgetItem.__init__(self, *params)
@@ -102,8 +104,16 @@
return self.StatusComplete
elif self.fcpRequest['RequestStatus'] & fcp2.ConstRequestStatus.Error:
return self.StatusError
+
+ #TODO: more or less aguess ..have to check this in detail
elif self.fcpRequest['RequestStatus'] & fcp2.ConstRequestStatus.Started:
- return self.StatusLoading
+ if self.fcpRequest['RequestStatus'] & fcp2.ConstRequestStatus.Compressing:
+ if self.fcpRequest['RequestStatus'] & fcp2.ConstRequestStatus.Compressed:
+ return self.StatusLoading
+ else:
+ return self.compressing
+ else:
+ return self.StatusLoading
else:
return self.StatusPending
@@ -187,6 +197,8 @@
(config.fcpClient.events.RequestProgress, self.onFcpClientRequestProgress),
(config.fcpClient.events.RequestStarted, self.onFcpClientRequestStarted),
(config.fcpClient.events.RequestRemoved, self.onFcpClientRequestRemoved),
+ (config.fcpClient.events.RequestCompressionStarted, self.onFcpClientRequestCompressionStarted),
+ (config.fcpClient.events.RequestCompressionCompleted, self.onFcpClientRequestCompressionCompleted),
)
config.fcpClient.events += self.fcpClientEvents
@@ -220,6 +232,8 @@
progressBar.setValue(oldProgressBar.value())
elif itemStatus == TreeItem.StatusRemoved:
pass
+ elif itemStatus == TreeItem.StatusCompressing:
+ progressBar.setRange(0, 0)
else:
raise ValueError('Unknown status: %r' % itemStatus)
if itemStatusChanged:
@@ -232,40 +246,6 @@
)
item.fcOldStatus = itemStatus
- def _createItemFromFcpRequest(self, fcpRequest):
- tree = self.controlById(self.IdTree)
- root = tree.invisibleRootItem()
- item= TreeItem(fcpRequest, root)
- progressBar = ProgressBar(self.tree, item)
-
- progressBar.setObjectName(TreeItem.ProgressBarName)
- tree.setItemWidget(item, TreeItem.IndexProgress, progressBar)
- fileName = fcpRequest['Filename']
- mimeType = mimetypes.guess_type(fileName)[0]
- icon = config.fcResources.getIcon(
- config.mimeTypeIconName(mimeType),
- config.fcSettings.value('IconSize'),
- config.fcSettings.value('IconTheme'),
- )
- item.setIcon(0, icon)
- item.setData(
- TreeItem.IndexName,
- QtCore.Qt.DisplayRole,
- QtCore.QVariant(os.path.basename(fcpRequest['Filename']))
- )
-
- #TODO: take a wild guess at the size. no other way to do it currently
- estimatedSize = int((BLOCK_SIZE * fcpRequest['ProgressRequired']) + 1)
- item.setData(
- TreeItem.IndexSize,
- QtCore.Qt.DisplayRole,
- QtCore.QVariant(self.trUtf8('< ') + numbers.format_num_bytes(estimatedSize)),
- )
-
- self.fcpRequests[fcpRequest['Identifier']] = item
- self._adjustItemStatus(item)
- return item
-
############################
##
############################
@@ -293,6 +273,8 @@
TreeItem.StatusComplete: self.trUtf8('Complete'),
TreeItem.StatusError: self.trUtf8('Error'),
TreeItem.StatusRemoved: self.trUtf8('Removed'),
+ TreeItem.StatusCompressing: self.trUtf8('Compressing'),
+ ##TreeItem.StatusCompressed: self.trUtf8('Compressed'), #TODO: no way to distinguish compressed an loading
}
for item in treewidgetwrap.walkItem(root):
fcpRequest = getattr(item, 'fcpRequest', None)
@@ -328,28 +310,57 @@
#########################################
## methods
#########################################
+ #TODO: much...
+ def addFcpRequest(self, fcpRequest):
+ """
+ @note: if you add a newly created request, make shure to set the requests PersistentUserData
+ to the result of the call to L{persistentFcpRequestData}
+ """
+ tree = self.controlById(self.IdTree)
+ root = tree.invisibleRootItem()
+ item= TreeItem(fcpRequest, root)
+ progressBar = ProgressBar(self.tree, item)
+
+ progressBar.setObjectName(TreeItem.ProgressBarName)
+ tree.setItemWidget(item, TreeItem.IndexProgress, progressBar)
+ fileName = fcpRequest['Filename']
+ mimeType = mimetypes.guess_type(fileName)[0]
+ icon = config.fcResources.getIcon(
+ config.mimeTypeIconName(mimeType),
+ config.fcSettings.value('IconSize'),
+ config.fcSettings.value('IconTheme'),
+ )
+ item.setIcon(0, icon)
+ item.setData(
+ TreeItem.IndexName,
+ QtCore.Qt.DisplayRole,
+ QtCore.QVariant(os.path.basename(fcpRequest['Filename']))
+ )
+
+ #TODO: take a wild guess at the size. no other way to do it currently
+ estimatedSize = int((BLOCK_SIZE * fcpRequest['ProgressRequired']) + 1)
+ item.setData(
+ TreeItem.IndexSize,
+ QtCore.Qt.DisplayRole,
+ QtCore.QVariant(self.trUtf8('< ') + numbers.format_num_bytes(estimatedSize)),
+ )
+
+ self.fcpRequests[fcpRequest['Identifier']] = item
+ self._adjustItemStatus(item)
+ return item
+
+ self.fcpRequests[fcpRequest['Identifier']] = item
+ self._adjustItemStatus(item)
+ return item
+
+
def controlById(idGlobalFeedback, idControl):
return getattr(idGlobalFeedback, idControl)
- def downloadFile(self, fcpKey, fileName, **kws):
- """"""
- fileName = unicode(fileName)
- fcpRequest = config.fcpClient.getFile(
- fcpKey,
- fileName,
- persistentUserData=PersistentRequestData(ClientName=unicode(self.objectName())).dump(),
- #TODO: browser sets this. ok or not?
- #handleFilenameCollision=True,
- handlePermanentRedirect=True,
- **kws
- )
- item = self._createItemFromFcpRequest(fcpRequest)
-
+ # overwrite
def populateMenu(self, menu):
- menu.addAction(self.fcActions['ActionDownloadKeyToDisk'])
return menu
-
def execDlgDownloadKey(self, fcpKey=None):
"""pops up the dialog to allow the user to download a key to disk
@param fcpKey: key to initialize the key with or None
@@ -363,6 +374,9 @@
handleFilenameCollision=True,
)
+ def persistentFcpRequestData(self):
+ return PersistentRequestData(ClientName=unicode(self.objectName())).dump()
+
#########################################
## event handlers
#########################################
@@ -456,6 +470,7 @@
def onFcpClientRequestCompleted(self, fcpEvent, fcpRequest):
item = self.fcpRequests.get(fcpRequest['Identifier'], None)
if item is not None:
+ mimeType = fcpRequest['MetadataContentType']
item.setData(
TreeItem.IndexSize,
QtCore.Qt.DisplayRole,
@@ -464,10 +479,26 @@
item.setData(
TreeItem.IndexMimeType,
QtCore.Qt.DisplayRole,
- QtCore.QVariant(fcpRequest['MetadataContentType'])
+ QtCore.QVariant(mimeType)
)
+ icon = config.fcResources.getIcon(
+ config.mimeTypeIconName(mimeType),
+ config.fcSettings.value('IconSize'),
+ config.fcSettings.value('IconTheme'),
+ )
+ item.setIcon(0, icon)
self._adjustItemStatus(item)
+ def onFcpClientRequestCompressionStarted(self, fcpEvent, fcpRequest):
+ item = self.fcpRequests.get(fcpRequest['Identifier'], None)
+ if item is not None:
+ self._adjustItemStatus(item)
+
+ def onFcpClientRequestCompressionCompleted(self, fcpEvent, fcpRequest):
+ item = self.fcpRequests.get(fcpRequest['Identifier'], None)
+ if item is not None:
+ self._adjustItemStatus(item)
+
def onFcpClientRequestFailed(self, fcpEvent, fcpRequest):
item = self.fcpRequests.get(fcpRequest['Identifier'], None)
if item is not None:
@@ -511,7 +542,7 @@
pass
else:
if requestData.get('ClientName', None) == self.objectName():
- item = self._createItemFromFcpRequest(fcpRequest)
+ item = self.addFcpRequest(fcpRequest)
else:
item = self.fcpRequests.get(fcpRequest['Identifier'], None)
if item is not None:
Modified: trunk/fclient/fclient/impl/ViewDownloads.py
===================================================================
--- trunk/fclient/fclient/impl/ViewDownloads.py 2008-08-12 08:41:55 UTC (rev 903)
+++ trunk/fclient/fclient/impl/ViewDownloads.py 2008-08-12 08:42:46 UTC (rev 904)
@@ -8,6 +8,7 @@
from PyQt4 import QtCore, QtGui
+from . import config
from .BaseRequestsWidget import RequestsWidget
#************************************************************************************
#
@@ -111,6 +112,9 @@
self.menuRemoveGroup.addAction(action)
+ ###################################
+ ## overwritten methods
+ ###################################
def hideEvent(self, event):
self.fcGlobalFeedback.setVisible(False)
RequestsWidget.hideEvent(self, event)
@@ -119,11 +123,35 @@
self.fcGlobalFeedback.setVisible(True)
RequestsWidget.showEvent(self, event)
+ def populateMenu(self, menu):
+ menu.addAction(self.fcActions['ActionDownloadKeyToDisk'])
+ return menu
+
def retranslateUi(self, parent):
RequestsWidget.retranslateUi(self, parent)
if self.menuRemoveGroup is not None:
self.menuRemoveGroup.setTitle(self.trUtf8('Remove group'))
+ ###################################
+ ## methods
+ ###################################
+ def downloadFile(self, fcpKey, fileName, **kws):
+ """"""
+ fileName = unicode(fileName)
+ fcpRequest = config.fcpClient.getFile(
+ fcpKey,
+ fileName,
+ persistentUserData = self.persistentFcpRequestData(),
+ #TODO: browser sets this. ok or not?
+ #handleFilenameCollision=True,
+ handlePermanentRedirect=True,
+ **kws
+ )
+ item = self.addFcpRequest(fcpRequest)
+
+ ###################################
+ ## event handlers
+ ###################################
def onTreeCustomContextMenuRequested(self, pt):
tree = self.controlById(self.IdTree)
pt = tree.viewport().mapToGlobal(pt)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|