vlc | branch: master | Felix Paul Kühne <[email protected]> | Wed Mar 27 16:59:28 2019 +0100| [2f6e22aa4d9d67f778cd737a32ec4e4b1e08d466] | committer: Felix Paul Kühne
macosx/player controller: add helpers for media item name, URL and duration > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=2f6e22aa4d9d67f778cd737a32ec4e4b1e08d466 --- .../macosx/coreinteraction/VLCCoreInteraction.m | 59 +----------------- modules/gui/macosx/playlist/VLCPlayerController.h | 15 +++++ modules/gui/macosx/playlist/VLCPlayerController.m | 70 ++++++++++++++++++++++ 3 files changed, 88 insertions(+), 56 deletions(-) diff --git a/modules/gui/macosx/coreinteraction/VLCCoreInteraction.m b/modules/gui/macosx/coreinteraction/VLCCoreInteraction.m index 0295a83c22..1be0dba2d7 100644 --- a/modules/gui/macosx/coreinteraction/VLCCoreInteraction.m +++ b/modules/gui/macosx/coreinteraction/VLCCoreInteraction.m @@ -197,70 +197,17 @@ static int BossCallback(vlc_object_t *p_this, const char *psz_var, - (NSInteger)durationOfCurrentPlaylistItem { - input_item_t *p_item = _playerController.currentMedia; - - if (!p_item) { - return -1; - } - - vlc_tick_t duration = input_item_GetDuration(p_item); - input_item_Release(p_item); - - return SEC_FROM_VLC_TICK(duration); + return SEC_FROM_VLC_TICK(_playerController.durationOfCurrentMediaItem); } - (NSURL*)URLOfCurrentPlaylistItem { - input_item_t *p_item = _playerController.currentMedia; - if (!p_item) { - return nil; - } - - char *psz_url = vlc_uri_decode(input_item_GetURI(p_item)); - if (!psz_url) { - return nil; - } - NSURL *url = [NSURL URLWithString:toNSStr(psz_url)]; - free(psz_url); - input_item_Release(p_item); - - return url; + return _playerController.URLOfCurrentMediaItem; } - (NSString*)nameOfCurrentPlaylistItem { - input_item_t *p_item = _playerController.currentMedia; - if (!p_item) { - return nil; - } - - NSString *name; - static char *tmp_cstr = NULL; - - // Get Title - tmp_cstr = input_item_GetTitleFbName(p_item); - if (tmp_cstr) { - name = toNSStr(tmp_cstr); - FREENULL(tmp_cstr); - } - - if (!name) { - char *psz_uri = input_item_GetURI(p_item); - if (!psz_uri) { - input_item_Release(p_item); - return nil; - } - NSURL *url = [NSURL URLWithString:toNSStr(psz_uri)]; - free(psz_uri); - - if ([url isFileURL]) - name = [[NSFileManager defaultManager] displayNameAtPath:[url path]]; - else - name = [url absoluteString]; - } - - input_item_Release(p_item); - return name; + return _playerController.nameOfCurrentMediaItem; } - (void)forwardExtraShort diff --git a/modules/gui/macosx/playlist/VLCPlayerController.h b/modules/gui/macosx/playlist/VLCPlayerController.h index dfb977b527..a6d66260d4 100644 --- a/modules/gui/macosx/playlist/VLCPlayerController.h +++ b/modules/gui/macosx/playlist/VLCPlayerController.h @@ -273,6 +273,21 @@ extern NSString *VLCPlayerMuteChanged; - (int)setCurrentMedia:(input_item_t *)currentMedia; /** + * returns the duration of the current media in vlc ticks + */ +@property (readonly) vlc_tick_t durationOfCurrentMediaItem; + +/** + * returns the URL of the current media or NULL if there is none + */ +@property (readonly, copy, nullable) NSURL *URLOfCurrentMediaItem; + +/** + * returns the name of the current media or NULL if there is none + */ +@property (readonly, copy, nullable) NSString *nameOfCurrentMediaItem; + +/** * the current player state * @return a value according to the vlc_player_state enum * @note listen to VLCPlayerStateChanged to be notified about changes to this property diff --git a/modules/gui/macosx/playlist/VLCPlayerController.m b/modules/gui/macosx/playlist/VLCPlayerController.m index be2304bccd..bdbac0fd3e 100644 --- a/modules/gui/macosx/playlist/VLCPlayerController.m +++ b/modules/gui/macosx/playlist/VLCPlayerController.m @@ -22,6 +22,8 @@ #import "VLCPlayerController.h" +#import <vlc_url.h> + #import "main/VLCMain.h" #import "os-integration/VLCRemoteControlService.h" #import "os-integration/iTunes.h" @@ -652,6 +654,74 @@ static const struct vlc_player_aout_cbs player_aout_callbacks = { object:self]; } +- (vlc_tick_t)durationOfCurrentMediaItem +{ + input_item_t *p_item = self.currentMedia; + + if (!p_item) { + return -1; + } + + vlc_tick_t duration = input_item_GetDuration(p_item); + input_item_Release(p_item); + + return duration; +} + +- (NSURL *)URLOfCurrentMediaItem; +{ + input_item_t *p_item = self.currentMedia; + if (!p_item) { + return nil; + } + + char *psz_url = vlc_uri_decode(input_item_GetURI(p_item)); + if (!psz_url) { + return nil; + } + NSURL *url = [NSURL URLWithString:toNSStr(psz_url)]; + free(psz_url); + input_item_Release(p_item); + + return url; +} + +- (NSString*)nameOfCurrentMediaItem; +{ + input_item_t *p_item = self.currentMedia; + if (!p_item) { + return nil; + } + + NSString *name; + static char *tmp_cstr = NULL; + + // Get Title + tmp_cstr = input_item_GetTitleFbName(p_item); + if (tmp_cstr) { + name = toNSStr(tmp_cstr); + FREENULL(tmp_cstr); + } + + if (!name) { + char *psz_uri = input_item_GetURI(p_item); + if (!psz_uri) { + input_item_Release(p_item); + return nil; + } + NSURL *url = [NSURL URLWithString:toNSStr(psz_uri)]; + free(psz_uri); + + if ([url isFileURL]) + name = [[NSFileManager defaultManager] displayNameAtPath:[url path]]; + else + name = [url absoluteString]; + } + + input_item_Release(p_item); + return name; +} + - (void)stateChanged:(enum vlc_player_state)state { /* instead of using vlc_player_GetState, we cache the state and provide it through a synthesized getter _______________________________________________ vlc-commits mailing list [email protected] https://mailman.videolan.org/listinfo/vlc-commits
