[pitivi/ges: 231/287] medialibrary: Make discovery asynchroneous and show progress
- From: Jean-FranÃois Fortin Tam <jfft src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [pitivi/ges: 231/287] medialibrary: Make discovery asynchroneous and show progress
- Date: Thu, 15 Mar 2012 16:45:15 +0000 (UTC)
commit 14ceaa0659820046bce5f59f735ca5b291741dd9
Author: Jean-FranÃois Fortin Tam <nekohayo gmail com>
Date: Thu Jan 26 16:20:35 2012 +0100
medialibrary: Make discovery asynchroneous and show progress
pitivi/mainwindow.py | 4 +-
pitivi/medialibrary.py | 94 ++++++++++++++++++++++--------------------------
2 files changed, 45 insertions(+), 53 deletions(-)
---
diff --git a/pitivi/mainwindow.py b/pitivi/mainwindow.py
index 6904841..3e26265 100644
--- a/pitivi/mainwindow.py
+++ b/pitivi/mainwindow.py
@@ -910,7 +910,7 @@ class PitiviMainWindow(gtk.Window, Loggable):
self.log("User chose a new URI for the missing file")
new_uri = chooser.get_uri()
if new_uri:
- self.project.medialibrary.addUri(new_uri)
+ self.project.medialibrary.addUris([new_uri])
formatter.update_source_uri(tfs, new_uri)
self._missingUriOnLoading = True
else:
@@ -1099,7 +1099,7 @@ class PitiviMainWindow(gtk.Window, Loggable):
try:
info = self.project.medialibrary.getInfoFromUri(uri)
except MediaLibraryError:
- self.project.medialibrary.addUri(uri)
+ self.project.medialibrary.addUris([uri])
# FIXME Add a delay/catch signal when we start doing the discovering
# async
info = self.project.medialibrary.getInfoFromUri(uri)
diff --git a/pitivi/medialibrary.py b/pitivi/medialibrary.py
index 86ae158..832ddd2 100644
--- a/pitivi/medialibrary.py
+++ b/pitivi/medialibrary.py
@@ -137,11 +137,11 @@ class MediaLibrary(Signallable, Loggable):
"""
__signals__ = {
- "ready": [],
- "starting": [],
"source-added": ["info"],
"source-removed": ["uri"],
"discovery-error": ["uri", "reason"],
+ "ready": [],
+ "starting": [],
}
def __init__(self):
@@ -155,29 +155,13 @@ class MediaLibrary(Signallable, Loggable):
self.nb_imported_files = 0
self.discoverer = self.discovererClass(gst.SECOND)
+ self.discoverer.connect("discovered", self.addDiscovererInfo)
+ self.discoverer.connect("finished", self.finishDiscovererCb)
+ self.discoverer.start()
- def addUri(self, uri):
- """
- Add c{uri} to the source list.
-
- The uri will be analyzed before being added.
- """
- # Ensure we really have a correctly encoded URI according to RFC 2396.
- # Otherwise, in some cases we'd get rogue characters that break
- # searching for duplicates
- uri = quote_uri(uri)
- if uri in self._sources:
- # uri is already added. Nothing to do.
- return
- self._sources[uri] = None
-
- try:
- info = self.discoverer.discover_uri(uri)
- except Exception, e:
- self.emit("discovery-error", uri, e, "")
- return
-
- self.addDiscovererInfo(info)
+ def finishDiscovererCb(self, unused_discoverer):
+ self.debug("Got the discoverer's finished signal")
+ self.emit("ready")
def addUris(self, uris):
"""
@@ -185,12 +169,19 @@ class MediaLibrary(Signallable, Loggable):
The uris will be analyzed before being added.
"""
+ self.emit("starting")
+ self.debug("Adding %s", uris)
self.nb_file_to_import = len(uris)
self.nb_imported_files = 0
for uri in uris:
- self.addUri(uri)
- self.debug("Adding %s", uris)
- self.emit("ready")
+ # Ensure we have a correctly encoded URI according to RFC 2396.
+ # Otherwise, in some cases we'd get rogue characters that break
+ # searching for duplicates
+ uri = quote_uri(uri)
+ if uri not in self._sources:
+ self.discoverer.discover_uri_async(uri)
+ self.debug("Added a uri to discoverer async")
+ self.debug("Done adding all URIs to discoverer async")
def removeUri(self, uri):
"""
@@ -225,17 +216,20 @@ class MediaLibrary(Signallable, Loggable):
raise MediaLibraryError("URI not in the medialibrary", uri)
return info
- def addDiscovererInfo(self, info):
+ def addDiscovererInfo(self, discoverer, info, error):
"""
Add the specified SourceFactory to the list of sources.
"""
- uri = info.get_uri()
- if self._sources.get(uri, None) is not None:
- raise MediaLibraryError("We already have info for this URI", uri)
- self._sources[uri] = info
- self._ordered_sources.append(info)
- self.nb_imported_files += 1
- self.emit("source-added", info)
+ if error:
+ self.emit("discovery-error", info.get_uri(), error.message)
+ else:
+ uri = info.get_uri()
+ if self._sources.get(uri, None) is not None:
+ raise MediaLibraryError("We already have info for this URI", uri)
+ self._sources[uri] = info
+ self._ordered_sources.append(info)
+ self.nb_imported_files += 1
+ self.emit("source-added", info)
def getSources(self):
""" Returns the list of sources used.
@@ -645,18 +639,17 @@ class MediaLibraryWidget(gtk.VBox, Loggable):
This first disconnects any handlers connected to an old project.
If project is None, this just disconnects any connected handlers.
-
"""
- self.project_signals.connect(
- project.medialibrary, "source-added", None, self._sourceAddedCb)
- self.project_signals.connect(
- project.medialibrary, "source-removed", None, self._sourceRemovedCb)
- self.project_signals.connect(
- project.medialibrary, "discovery-error", None, self._discoveryErrorCb)
- self.project_signals.connect(
- project.medialibrary, "ready", None, self._sourcesStoppedImportingCb)
- self.project_signals.connect(
- project.medialibrary, "starting", None, self._sourcesStartedImportingCb)
+ self.project_signals.connect(project.medialibrary,
+ "source-added", None, self._sourceAddedCb)
+ self.project_signals.connect(project.medialibrary,
+ "source-removed", None, self._sourceRemovedCb)
+ self.project_signals.connect(project.medialibrary,
+ "discovery-error", None, self._discoveryErrorCb)
+ self.project_signals.connect(project.medialibrary,
+ "ready", None, self._sourcesStoppedImportingCb)
+ self.project_signals.connect(project.medialibrary,
+ "starting", None, self._sourcesStartedImportingCb)
def _setClipView(self, show):
""" Set which clip view to use when medialibrary is showing clips. If
@@ -809,7 +802,7 @@ class MediaLibraryWidget(gtk.VBox, Loggable):
# medialibrary callbacks
- def _sourceAddedCb(self, medialibrary, factory):
+ def _sourceAddedCb(self, unused_medialibrary, factory):
""" a file was added to the medialibrary """
self._updateProgressbar()
self._addDiscovererInfo(factory)
@@ -817,7 +810,7 @@ class MediaLibraryWidget(gtk.VBox, Loggable):
self.infobar.hide_all()
self.search_hbox.show_all()
- def _sourceRemovedCb(self, medialibrary, uri, unused_info):
+ def _sourceRemovedCb(self, unused_medialibrary, uri, unused_info):
""" the given uri was removed from the medialibrary """
# find the good line in the storemodel and remove it
model = self.storemodel
@@ -830,14 +823,13 @@ class MediaLibraryWidget(gtk.VBox, Loggable):
self.search_hbox.hide()
self.debug("Removing %s", uri)
- def _discoveryErrorCb(self, unused_medialibrary, uri, reason, extra):
+ def _discoveryErrorCb(self, unused_medialibrary, uri, reason, extra=None):
""" The given uri isn't a media file """
error = (uri, reason, extra)
self._errors.append(error)
- def _sourcesStartedImportingCb(self, medialibrary):
+ def _sourcesStartedImportingCb(self, unused_medialibrary):
self._progressbar.show()
- self._updateProgressbar()
def _sourcesStoppedImportingCb(self, unused_medialibrary):
self._progressbar.hide()
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]