[pitivi: 1/6] Make project loading suck less by calling addFactory every time we rescan a factory.
- From: Edward Hervey <edwardrv src gnome org>
- To: svn-commits-list gnome org
- Subject: [pitivi: 1/6] Make project loading suck less by calling addFactory every time we rescan a factory.
- Date: Tue, 9 Jun 2009 02:16:35 -0400 (EDT)
commit e7c4a8fa3333bc22c2d836d647c8617351985fa7
Author: Alessandro Decina <alessandro d gmail com>
Date: Mon Jun 8 16:31:16 2009 +0200
Make project loading suck less by calling addFactory every time we rescan a factory.
---
pitivi/application.py | 7 +++++++
pitivi/formatters/base.py | 25 ++++++++++---------------
pitivi/formatters/etree.py | 2 ++
pitivi/project.py | 14 --------------
pitivi/projectmanager.py | 7 +++++++
pitivi/ui/mainwindow.py | 4 ----
pitivi/ui/sourcelist.py | 27 +++++++++++++--------------
tests/test_basic.py | 2 +-
8 files changed, 40 insertions(+), 48 deletions(-)
diff --git a/pitivi/application.py b/pitivi/application.py
index ebf3a9a..0561354 100644
--- a/pitivi/application.py
+++ b/pitivi/application.py
@@ -89,6 +89,7 @@ class Pitivi(Loggable, Signallable):
"new-project" : ["project"],
"new-project-loading" : ["uri"],
+ "new-project-created" : ["project"],
"new-project-loaded" : ["project"],
"new-project-failed" : ["uri", "exception"],
"closing-project" : ["project"],
@@ -162,6 +163,8 @@ class Pitivi(Loggable, Signallable):
def _connectToProjectManager(self, projectManager):
projectManager.connect("new-project-loading",
self._projectManagerNewProjectLoading)
+ projectManager.connect("new-project-created",
+ self._projectManagerNewProjectCreated)
projectManager.connect("new-project-loaded",
self._projectManagerNewProjectLoaded)
projectManager.connect("new-project-failed",
@@ -174,6 +177,10 @@ class Pitivi(Loggable, Signallable):
def _projectManagerNewProjectLoading(self, projectManager, uri):
self.emit("new-project-loading", uri)
+ def _projectManagerNewProjectCreated(self, projectManager, project):
+ self.current = project
+ self.emit("new-project-created", project)
+
def _projectManagerNewProjectLoaded(self, projectManager, project):
self.current = project
self.emit("new-project-loaded", project)
diff --git a/pitivi/formatters/base.py b/pitivi/formatters/base.py
index 74016b0..ad9a900 100644
--- a/pitivi/formatters/base.py
+++ b/pitivi/formatters/base.py
@@ -63,6 +63,7 @@ class Formatter(Signallable, Loggable):
"""
__signals__ = {
+ "new-project-created": ["project"],
"new-project-loaded": ["project"],
"new-project-failed": ["uri", "exception"],
"missing-uri" : ["uri"]
@@ -85,9 +86,9 @@ class Formatter(Signallable, Loggable):
def newProject(self):
return self.ProjectClass()
- def loadProject(self, location, project=None):
+ def loadProject(self, location):
try:
- self._loadProjectUnchecked(location, project)
+ self._loadProjectUnchecked(location)
except FormatterError, e:
self.emit("new-project-failed", location, e)
@@ -100,7 +101,7 @@ class Formatter(Signallable, Loggable):
if not uri_is_valid(uri) or not uri_is_reachable(uri):
raise FormatterURIError()
- def _loadProjectUnchecked(self, location, project=None):
+ def _loadProjectUnchecked(self, location):
"""
Loads the project from the given location.
@@ -113,8 +114,8 @@ class Formatter(Signallable, Loggable):
@return: The L{Project}
@raise FormatterLoadError: If the file couldn't be properly loaded.
"""
- if not project:
- project = self.newProject()
+ project = self.newProject()
+ self.emit("new-project-created", project)
project.uri = location
@@ -145,8 +146,8 @@ class Formatter(Signallable, Loggable):
project._formatter = self
# add all factories to the project sourcelist
- for fact in factories:
- project.sources.addFactory(factory=fact)
+ #for fact in factories:
+ # project.sources.addFactory(factory=fact)
# if all sources were discovered, or don't require discovering,
if uris == []:
@@ -154,19 +155,14 @@ class Formatter(Signallable, Loggable):
# then
# .. Fill in the timeline
self._fillTimeline()
- # .. make the project as loaded
- self.project.loaded = True
+ self.emit("new-project-loaded", self.project)
else:
self.debug("Got undiscovered sources, calling discoverer")
# else
# .. connect to the sourcelist 'ready' signal
self.project.sources.connect("ready", self._sourcesReadyCb)
- # .. Add all uris to be discovered to the project sourcelist
- self.project.loaded = False
self.project.sources.addUris(uris)
- self.emit("new-project-loaded", self.project)
-
# finally return the project.
return self.project
@@ -367,8 +363,7 @@ class Formatter(Signallable, Loggable):
def _sourcesReadyCb(self, sources):
self.debug("Sources inspected, calling fillTimeline")
self._fillTimeline()
- self.project.loaded = True
- Project.emit(self.project, 'loaded')
+ self.emit("new-project-loaded", self.project)
class LoadOnlyFormatter(Formatter):
diff --git a/pitivi/formatters/etree.py b/pitivi/formatters/etree.py
index b7db18f..3e249b5 100644
--- a/pitivi/formatters/etree.py
+++ b/pitivi/formatters/etree.py
@@ -623,6 +623,8 @@ class ElementTreeFormatter(Formatter):
new_streams[stream_id] = new_stream
self._context.streams = new_streams
+ project.sources.addFactory(factory=factory)
+
if closure["rediscovered"] == len(sources):
self._finishLoadingProject(project)
return
diff --git a/pitivi/project.py b/pitivi/project.py
index e3eda3b..52f93ae 100644
--- a/pitivi/project.py
+++ b/pitivi/project.py
@@ -66,7 +66,6 @@ class Project(Signallable, Loggable):
__signals__ = {
"settings-changed" : None,
"missing-plugins": ["uri", "detail", "description"],
- "loaded" : None
}
def __init__(self, name="", uri=None, **kwargs):
@@ -96,9 +95,6 @@ class Project(Signallable, Loggable):
self.view_action = ViewAction()
self.view_action.addProducers(self.factory)
- # the loading formatter will set this accordingly
- self.loaded = True
-
def release(self):
self.pipeline.release()
self.pipeline = None
@@ -200,13 +196,3 @@ class Project(Signallable, Loggable):
def hasUnsavedModifications(self):
return self._dirty
-
- def markLoaded(self):
- """
- Mark the project as loaded.
-
- Will emit the 'loaded' signal. Only meant to be used by
- L{Formatter}s.
- """
- self.loaded = True
- self.emit('loaded')
diff --git a/pitivi/projectmanager.py b/pitivi/projectmanager.py
index 8f67486..28e648d 100644
--- a/pitivi/projectmanager.py
+++ b/pitivi/projectmanager.py
@@ -36,6 +36,7 @@ from pitivi.timeline.track import Track
class ProjectManager(Signallable, Loggable):
__signals__ = {
"new-project-loading": ["uri"],
+ "new-project-created": ["project"],
"new-project-failed": ["uri", "exception"],
"new-project-loaded": ["project"],
"closing-project": ["project"],
@@ -118,6 +119,8 @@ class ProjectManager(Signallable, Loggable):
def _connectToFormatter(self, formatter):
formatter.connect("missing-uri", self._formatterMissingURICb)
+ formatter.connect("new-project-created",
+ self._formatterNewProjectCreated)
formatter.connect("new-project-loaded",
self._formatterNewProjectLoaded)
formatter.connect("new-project-failed",
@@ -125,9 +128,13 @@ class ProjectManager(Signallable, Loggable):
def _disconnectFromFormatter(self, formatter):
formatter.disconnect_by_function(self._formatterMissingURICb)
+ formatter.disconnect_by_function(self._formatterNewProjectCreated)
formatter.disconnect_by_function(self._formatterNewProjectLoaded)
formatter.disconnect_by_function(self._formatterNewProjectFailed)
+ def _formatterNewProjectCreated(self, formatter, project):
+ self.emit("new-project-created", project)
+
def _formatterNewProjectLoaded(self, formatter, project):
self._disconnectFromFormatter(formatter)
diff --git a/pitivi/ui/mainwindow.py b/pitivi/ui/mainwindow.py
index 4a11cf7..c3cfd59 100644
--- a/pitivi/ui/mainwindow.py
+++ b/pitivi/ui/mainwindow.py
@@ -645,13 +645,9 @@ class PitiviMainWindow(gtk.Window, Loggable):
def _projectManagerNewProjectLoadedCb(self, projectManager, project):
self.log("A NEW project is loaded, update the UI!")
self.project = project
- # ungrey UI
- self.set_sensitive(True)
def _projectManagerNewProjectLoadingCb(self, projectManager, uri):
self.log("A NEW project is being loaded, deactivate UI")
- # grey UI
- self.set_sensitive(False)
def _projectManagerClosingProjectCb(self, projectManager, project):
if not project.hasUnsavedModifications():
diff --git a/pitivi/ui/sourcelist.py b/pitivi/ui/sourcelist.py
index 3c7b573..31b945b 100644
--- a/pitivi/ui/sourcelist.py
+++ b/pitivi/ui/sourcelist.py
@@ -90,10 +90,7 @@ def beautify_stream(stream):
templ = ngettext("<b>Audio:</b> %d channel at %d <i>Hz</i> (%d <i>bits</i>)",
"<b>Audio:</b> %d channels at %d <i>Hz</i> (%d <i>bits</i>)",
stream.channels)
- try:
- templ = templ % (stream.channels, stream.rate, stream.width)
- except TypeError:
- import pdb; pdb.set_trace()
+ templ = templ % (stream.channels, stream.rate, stream.width)
return templ
return _("<b>Unknown Audio format:</b> %s") % stream.audiotype
@@ -249,6 +246,8 @@ class SourceList(gtk.VBox, Loggable):
# Connect to project. We must remove and reset the callbacks when
# changing project.
self.project_signals = SignalGroup()
+ self.app.connect("new-project-created",
+ self._newProjectCreatedCb)
self.app.connect("new-project-loaded",
self._newProjectLoadedCb)
self.app.connect("new-project-failed",
@@ -653,19 +652,19 @@ class SourceList(gtk.VBox, Loggable):
factory = self.storemodel[path][COL_FACTORY]
self.emit('play', factory)
- def _newProjectLoadedCb(self, unused_pitivi, project):
+ def _newProjectCreatedCb(self, app, project):
# clear the storemodel
self.storemodel.clear()
self._connectToProject(project)
- # synchronize the storemodel with the new project's sourcelist
- if project.loaded:
- for uri, factory in project.sources:
- self.log("loading uri %s", uri)
- self._addFactory(factory)
- else:
- if not self.infostub.showing:
- self.pack_start(self.infostub, expand=False)
- self.infostub.startingImport()
+
+
+ def _newProjectLoadingCb(self, unused_pitivi, uri):
+ if not self.infostub.showing:
+ self.pack_start(self.infostub, expand=False)
+ self.infostub.startingImport()
+
+ def _newProjectLoadedCb(self, unused_pitivi, project):
+ pass
def _newProjectFailedCb(self, unused_pitivi, unused_reason,
unused_uri):
diff --git a/tests/test_basic.py b/tests/test_basic.py
index 7123c26..e23c9a4 100644
--- a/tests/test_basic.py
+++ b/tests/test_basic.py
@@ -14,7 +14,7 @@ class BasicTest(TestCase):
self.assert_(ptv)
# were the contents of pitivi properly created
- self.assert_(ptv.current)
+ self.assertEqual(ptv.current, None)
self.assert_(ptv.effects)
# was the unique instance object properly set
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]