def test_loading_project_with_moved_asset(self): """Loads a project with moved asset.""" app = common.create_pitivi(proxyingStrategy=ProxyingStrategy.NOTHING) proj_uri = self.create_project_file_from_xges( app, """<ges version='0.3'> <project properties='properties;' metadatas='metadatas;'> <ressources> <asset id='file://this/is/a/moved/asset.mp4' extractable-type-name='GESUriClip' properties='properties, supported-formats=(int)6, duration=(guint64)1228000000;' metadatas='metadatas' /> </ressources> </project> </ges>""") project_manager = app.project_manager medialib = medialibrary.MediaLibraryWidget(app) mainloop = common.create_main_loop() def new_project_loaded_cb(*args, **kwargs): mainloop.quit() def missing_uri_cb(project_manager, project, unused_error, asset): return common.get_sample_uri("1sec_simpsons_trailer.mp4") project_manager.connect("missing-uri", missing_uri_cb) project_manager.connect("new-project-loaded", new_project_loaded_cb) project_manager.load_project(proj_uri) with common.cloned_sample("1sec_simpsons_trailer.mp4"): mainloop.run() self.assertEqual(medialib._progressbar.get_fraction(), 1.0)
def load_project_with_missing_proxy(self): """Loads a project with missing proxies.""" uris = [common.get_sample_uri("1sec_simpsons_trailer.mp4")] proxy_uri = uris[0] + ".232417.proxy.mkv" PROJECT_STR = """<ges version='0.3'> <project properties='properties;' metadatas='metadatas, name=(string)"New\ Project", author=(string)Unknown, render-scale=(double)100;'> <encoding-profiles> </encoding-profiles> <ressources> <asset id='%(uri)s' extractable-type-name='GESUriClip' properties='properties, supported-formats=(int)6, duration=(guint64)1228000000;' metadatas='metadatas, audio-codec=(string)"MPEG-4\ AAC\ audio", maximum-bitrate=(uint)130625, bitrate=(uint)130625, datetime=(datetime)2007-02-19T05:03:04Z, encoder=(string)Lavf54.6.100, container-format=(string)"ISO\ MP4/M4A", video-codec=(string)"H.264\ /\ AVC", file-size=(guint64)232417;' proxy-id='file:///home/thiblahute/devel/pitivi/flatpak/pitivi/tests/samples/1sec_simpsons_trailer.mp4.232417.proxy.mkv' /> <asset id='%(proxy_uri)s' extractable-type-name='GESUriClip' properties='properties, supported-formats=(int)6, duration=(guint64)1228020833;' metadatas='metadatas, container-format=(string)Matroska, audio-codec=(string)Opus, language-code=(string)en, encoder=(string)Lavf54.6.100, bitrate=(uint)64000, video-codec=(string)"Motion\ JPEG", file-size=(guint64)4695434;' /> </ressources> <timeline properties='properties, auto-transition=(boolean)true, snapping-distance=(guint64)0;' metadatas='metadatas, duration=(guint64)0;'> <track caps='video/x-raw(ANY)' track-type='4' track-id='0' properties='properties, async-handling=(boolean)false, message-forward=(boolean)true, caps=(string)"video/x-raw\(ANY\)", restriction-caps=(string)"video/x-raw\,\ width\=\(int\)720\,\ height\=\(int\)576\,\ framerate\=\(fraction\)25/1", mixing=(boolean)true;' metadatas='metadatas;'/> <track caps='audio/x-raw(ANY)' track-type='2' track-id='1' properties='properties, async-handling=(boolean)false, message-forward=(boolean)true, caps=(string)"audio/x-raw\(ANY\)", restriction-caps=(string)"audio/x-raw\,\ format\=\(string\)S32LE\,\ channels\=\(int\)2\,\ rate\=\(int\)44100\,\ layout\=\(string\)interleaved", mixing=(boolean)true;' metadatas='metadatas;'/> <layer priority='0' properties='properties, auto-transition=(boolean)true;' metadatas='metadatas, volume=(float)1;'> <clip id='0' asset-id='%(proxy_uri)s' type-name='GESUriClip' layer-priority='0' track-types='6' start='0' duration='1228000000' inpoint='0' rate='0' properties='properties, name=(string)uriclip0, mute=(boolean)false, is-image=(boolean)false;' > <source track-id='1' children-properties='properties, GstVolume::mute=(boolean)false, GstVolume::volume=(double)1;'> <binding type='direct' source_type='interpolation' property='volume' mode='1' track_id='1' values =' 0:0.10000000000000001 1228000000:0.10000000000000001 '/> </source> <source track-id='0' children-properties='properties, GstFramePositioner::alpha=(double)1, GstDeinterlace::fields=(int)0, GstFramePositioner::height=(int)720, GstDeinterlace::mode=(int)0, GstFramePositioner::posx=(int)0, GstFramePositioner::posy=(int)0, GstDeinterlace::tff=(int)0, GstFramePositioner::width=(int)1280;'> <binding type='direct' source_type='interpolation' property='alpha' mode='1' track_id='0' values =' 0:1 1228000000:1 '/> </source> </clip> </layer> <groups> </groups> </timeline> </project> </ges>""" % {"uri": uris[0], "proxy_uri": proxy_uri} app = common.create_pitivi(proxyingStrategy=ProxyingStrategy.ALL) proxy_manager = app.proxy_manager project_manager = app.project_manager mainloop = common.create_main_loop() unused, xges_path = tempfile.mkstemp(suffix=".xges") proj_uri = "file://" + os.path.abspath(xges_path) app.project_manager.saveProject(uri=proj_uri) medialib = medialibrary.MediaLibraryWidget(app) with open(proj_uri[len("file://"):], "w") as f: f.write(PROJECT_STR) # Remove proxy common.clean_proxy_samples() def closing_project_cb(*args, **kwargs): # Do not ask whether to save project on closing. return True def proxy_ready_cb(proxy_manager, asset, proxy): self.assertEqual(proxy.props.id, proxy_uri) mainloop.quit() project_manager.connect("closing-project", closing_project_cb) proxy_manager.connect_after("proxy-ready", proxy_ready_cb) app.project_manager.loadProject(proj_uri) return mainloop, app, medialib, proxy_uri
def test_loading_project_with_moved_assets_and_deleted_proxy(self): """Loads a project with moved asset as deleted proxy file.""" mainloop = common.create_main_loop() def proxy_ready_cb(unused_proxy_manager, asset, proxy): mainloop.quit() app = common.create_pitivi(proxyingStrategy=ProxyingStrategy.ALL) app.proxy_manager.connect("proxy-ready", proxy_ready_cb) proj_uri = self.create_project_file_from_xges( app, """<ges version='0.3'> <project properties='properties;' metadatas='metadatas, name=(string)"New\ Project", author=(string)Unknown, render-scale=(double)100, format-version=(string)0.3;'> <ressources> <asset id='file:///nop/1sec_simpsons_trailer.mp4' extractable-type-name='GESUriClip' properties='properties, supported-formats=(int)6, duration=(guint64)1228000000;' metadatas='metadatas, audio-codec=(string)"MPEG-4\ AAC\ audio", maximum-bitrate=(uint)130625, bitrate=(uint)130625, datetime=(datetime)2007-02-19T05:03:04Z, encoder=(string)Lavf54.6.100, container-format=(string)"ISO\ MP4/M4A", video-codec=(string)"H.264\ /\ AVC", file-size=(guint64)232417;' proxy-id='file:///nop/1sec_simpsons_trailer.mp4.232417.proxy.mkv' /> <asset id='file:///nop/tears_of_steel.webm' extractable-type-name='GESUriClip' properties='properties, supported-formats=(int)6, duration=(guint64)2003000000;' metadatas='metadatas, container-format=(string)Matroska, language-code=(string)und, application-name=(string)Lavc56.60.100, encoder=(string)"Xiph.Org\ libVorbis\ I\ 20150105\ \(\342\233\204\342\233\204\342\233\204\342\233\204\)", encoder-version=(uint)0, audio-codec=(string)Vorbis, nominal-bitrate=(uint)80000, bitrate=(uint)80000, video-codec=(string)"VP8\ video", file-size=(guint64)223340;' /> <asset id='file:///nop/1sec_simpsons_trailer.mp4.232417.proxy.mkv' extractable-type-name='GESUriClip' properties='properties, supported-formats=(int)6, duration=(guint64)1228020833;' metadatas='metadatas, container-format=(string)Matroska, audio-codec=(string)Opus, language-code=(string)en, encoder=(string)Lavf54.6.100, bitrate=(uint)64000, video-codec=(string)"Motion\ JPEG", file-size=(guint64)4694708;' /> <asset id='file:///nop/tears_of_steel.webm.223340.proxy.mkv' extractable-type-name='GESUriClip' properties='properties, supported-formats=(int)6, duration=(guint64)2003000000;' metadatas='metadatas, container-format=(string)Matroska, language-code=(string)und, application-name=(string)Lavc56.60.100, encoder=(string)"Xiph.Org\ libVorbis\ I\ 20150105\ \(\342\233\204\342\233\204\342\233\204\342\233\204\)", encoder-version=(uint)0, audio-codec=(string)Vorbis, nominal-bitrate=(uint)80000, bitrate=(uint)80000, video-codec=(string)"VP8\ video", file-size=(guint64)223340;' /> </ressources> </project> </ges>""") project_manager = app.project_manager medialib = medialibrary.MediaLibraryWidget(app) # Remove proxy with common.cloned_sample("1sec_simpsons_trailer.mp4", "tears_of_steel.webm"): def new_project_loaded_cb(*args, **kwargs): mainloop.quit() missing_uris = [] def missing_uri_cb(project_manager, project, unused_error, asset): missing_uris.append(asset.props.id) return common.get_sample_uri(os.path.basename(asset.props.id)) project_manager.connect("missing-uri", missing_uri_cb) project_manager.connect("new-project-loaded", new_project_loaded_cb) project_manager.load_project(proj_uri) mainloop.run() self.assertEqual( len(missing_uris), 1, "missing_uri_cb should be called only once, got %s." % missing_uris) self.assertEqual(medialib._progressbar.get_fraction(), 1.0) mainloop.run() self.assertEqual( len(medialib.storemodel), 2, "We should have one asset displayed in the MediaLibrary.") self.assertEqual( medialib.storemodel[0][medialibrary.COL_THUMB_DECORATOR].state, medialibrary.AssetThumbnail.PROXIED) self.assertEqual( medialib.storemodel[1][medialibrary.COL_THUMB_DECORATOR].state, medialibrary.AssetThumbnail.IN_PROGRESS)
def _customSetUp(self, project_uri=None, **kwargs): # Always make sure we start with a clean medialibrary, and no other # is connected to some assets. self.clean() self.mainloop = common.create_main_loop() self.check_no_transcoding = False self.app = common.create_pitivi_mock(**kwargs) self.app.project_manager = ProjectManager(self.app) self.medialibrary = medialibrary.MediaLibraryWidget(self.app) if project_uri: self.app.project_manager.load_project(project_uri) else: self.app.project_manager.new_blank_project() self.app.project_manager.current_project.connect( "loaded", self.projectLoadedCb) self.mainloop.run()