vlc | branch: master | Felix Paul Kühne <[email protected]> | Sun Jul 14 17:35:51 2019 +0200| [86ddf1505501cde66ac02892c468b430048382b7] | committer: Felix Paul Kühne
macosx: handle execution without media library gracefully > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=86ddf1505501cde66ac02892c468b430048382b7 --- modules/gui/macosx/library/VLCLibraryController.h | 2 +- modules/gui/macosx/library/VLCLibraryController.m | 36 ++++++++++++++++++++-- .../gui/macosx/library/VLCLibraryVideoDataSource.m | 3 ++ .../macosx/preferences/VLCSimplePrefsController.m | 6 +++- 4 files changed, 43 insertions(+), 4 deletions(-) diff --git a/modules/gui/macosx/library/VLCLibraryController.h b/modules/gui/macosx/library/VLCLibraryController.h index 0c16554b1c..271112cad1 100644 --- a/modules/gui/macosx/library/VLCLibraryController.h +++ b/modules/gui/macosx/library/VLCLibraryController.h @@ -31,7 +31,7 @@ NS_ASSUME_NONNULL_BEGIN @interface VLCLibraryController : NSObject -@property (readonly) VLCLibraryModel *libraryModel; +@property (readonly, nullable) VLCLibraryModel *libraryModel; - (int)appendItemToPlaylist:(VLCMediaLibraryMediaItem *)mediaItem playImmediately:(BOOL)playImmediately; - (void)showItemInFinder:(VLCMediaLibraryMediaItem *)mediaItem; diff --git a/modules/gui/macosx/library/VLCLibraryController.m b/modules/gui/macosx/library/VLCLibraryController.m index 2a2194b670..3477166a47 100644 --- a/modules/gui/macosx/library/VLCLibraryController.m +++ b/modules/gui/macosx/library/VLCLibraryController.m @@ -47,6 +47,10 @@ float kVLCDefaultThumbnailPosition = .15; self = [super init]; if (self) { _p_libraryInstance = vlc_ml_instance_get(getIntf()); + if (!_p_libraryInstance) { + msg_Info(getIntf(), "VLC runs without media library support"); + return self; + } _libraryModel = [[VLCLibraryModel alloc] initWithLibrary:_p_libraryInstance]; _unsorted = YES; @@ -83,16 +87,23 @@ float kVLCDefaultThumbnailPosition = .15; - (void)applicationWillEnterBackground:(NSNotification *)aNotification { - vlc_ml_resume_background(_p_libraryInstance); + if (_p_libraryInstance) { + vlc_ml_resume_background(_p_libraryInstance); + } } - (void)applicationWillBecomeActive:(NSNotification *)aNotification { - vlc_ml_pause_background(_p_libraryInstance); + if (_p_libraryInstance) { + vlc_ml_pause_background(_p_libraryInstance); + } } - (void)playbackStateChanged:(NSNotification *)aNotification { + if (!_p_libraryInstance) { + return; + } VLCPlayerController *playerController = aNotification.object; if (playerController.playerState == VLC_PLAYER_STATE_PLAYING) { vlc_ml_pause_background(_p_libraryInstance); @@ -103,6 +114,9 @@ float kVLCDefaultThumbnailPosition = .15; - (int)appendItemToPlaylist:(VLCMediaLibraryMediaItem *)mediaItem playImmediately:(BOOL)playImmediately { + if (!_p_libraryInstance) { + return VLC_ENOOBJ; + } input_item_t *p_inputItem = vlc_ml_get_input_item(_p_libraryInstance, mediaItem.libraryID); int ret = [[[VLCMain sharedInstance] playlistController] addInputItem:p_inputItem atPosition:-1 startPlayback:playImmediately]; input_item_Release(p_inputItem); @@ -129,6 +143,9 @@ float kVLCDefaultThumbnailPosition = .15; - (int)attemptToGenerateThumbnailForMediaItem:(VLCMediaLibraryMediaItem *)mediaItem { + if (!_p_libraryInstance) { + return VLC_ENOOBJ; + } return vlc_ml_media_generate_thumbnail(_p_libraryInstance, mediaItem.libraryID, VLC_ML_THUMBNAIL_SMALL, @@ -141,26 +158,41 @@ float kVLCDefaultThumbnailPosition = .15; - (int)addFolderWithFileURL:(NSURL *)fileURL { + if (!_p_libraryInstance) { + return VLC_ENOOBJ; + } return vlc_ml_add_folder(_p_libraryInstance, [[fileURL absoluteString] UTF8String]); } - (int)banFolderWithFileURL:(NSURL *)fileURL { + if (!_p_libraryInstance) { + return VLC_ENOOBJ; + } return vlc_ml_ban_folder(_p_libraryInstance, [[fileURL absoluteString] UTF8String]); } - (int)unbanFolderWithFileURL:(NSURL *)fileURL { + if (!_p_libraryInstance) { + return VLC_ENOOBJ; + } return vlc_ml_unban_folder(_p_libraryInstance, [[fileURL absoluteString] UTF8String]); } - (int)removeFolderWithFileURL:(NSURL *)fileURL { + if (!_p_libraryInstance) { + return VLC_ENOOBJ; + } return vlc_ml_remove_folder(_p_libraryInstance, [[fileURL absoluteString] UTF8String]); } - (int)clearHistory { + if (!_p_libraryInstance) { + return VLC_ENOOBJ; + } return vlc_ml_clear_history(_p_libraryInstance); } diff --git a/modules/gui/macosx/library/VLCLibraryVideoDataSource.m b/modules/gui/macosx/library/VLCLibraryVideoDataSource.m index 7217ff962e..de91928fa7 100644 --- a/modules/gui/macosx/library/VLCLibraryVideoDataSource.m +++ b/modules/gui/macosx/library/VLCLibraryVideoDataSource.m @@ -35,6 +35,9 @@ - (NSInteger)collectionView:(NSCollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { + if (!_libraryModel) { + return 0; + } if (collectionView == self.recentMediaCollectionView) { return [_libraryModel numberOfRecentMedia]; } diff --git a/modules/gui/macosx/preferences/VLCSimplePrefsController.m b/modules/gui/macosx/preferences/VLCSimplePrefsController.m index 66c29ec665..6668940a59 100644 --- a/modules/gui/macosx/preferences/VLCSimplePrefsController.m +++ b/modules/gui/macosx/preferences/VLCSimplePrefsController.m @@ -1596,8 +1596,12 @@ static inline void save_string_list(intf_thread_t * p_intf, id object, const cha - (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView { + VLCLibraryModel *libraryModel = [_libraryController libraryModel]; + if (!libraryModel) { + return 0; + } if (!_cachedFolderList) { - _cachedFolderList = [[_libraryController libraryModel] listOfMonitoredFolders]; + _cachedFolderList = [libraryModel listOfMonitoredFolders]; } return _cachedFolderList.count; } _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
