VLC  4.0.0-dev
notify.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * playlist/notify.h
3  *****************************************************************************
4  * Copyright (C) 2018 VLC authors and VideoLAN
5  *
6  * This program is free software; you can redistribute it and/or modify it
7  * under the terms of the GNU Lesser General Public License as published by
8  * the Free Software Foundation; either version 2.1 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
19  *****************************************************************************/
20 
21 #ifndef VLC_PLAYLIST_NOTIFY_H
22 #define VLC_PLAYLIST_NOTIFY_H
23 
24 #include <vlc_common.h>
25 #include <vlc_list.h>
26 
28 
30 {
31  const struct vlc_playlist_callbacks *cbs;
32  void *userdata;
33  struct vlc_list node; /**< node of vlc_playlist.listeners */
34 };
35 
37  ssize_t current;
38  bool has_prev;
39  bool has_next;
40 };
41 
42 #define vlc_playlist_listener_foreach(listener, playlist) \
43  vlc_list_foreach(listener, &(playlist)->listeners, node)
44 
45 #define vlc_playlist_NotifyListener(playlist, listener, event, ...) \
46 do { \
47  if (listener->cbs->event) \
48  listener->cbs->event(playlist, ##__VA_ARGS__, listener->userdata); \
49 } while (0)
50 
51 #define vlc_playlist_Notify(playlist, event, ...) \
52 do { \
53  vlc_playlist_AssertLocked(playlist); \
54  vlc_playlist_listener_id *listener; \
55  vlc_playlist_listener_foreach(listener, playlist) \
56  vlc_playlist_NotifyListener(playlist, listener, event, ##__VA_ARGS__); \
57 } while(0)
58 
59 void
61  struct vlc_playlist_state *state);
62 
63 void
65  struct vlc_playlist_state *saved_state);
66 
67 void
69 
70 #endif
vlc_playlist::player
vlc_player_t * player
Definition: playlist.h:50
vlc_playlist_view
Definition: export.c:37
vlc_playlist_state::current
ssize_t current
Definition: notify.h:37
vlc_playlist
Definition: playlist.h:48
vlc_playlist_NotifyListener
#define vlc_playlist_NotifyListener(playlist, listener, event,...)
Definition: notify.h:45
vlc_playlist::listeners
struct vlc_list listeners
list of vlc_playlist_listener_id.node
Definition: playlist.h:60
vlc_playlist_view_Count
size_t vlc_playlist_view_Count(struct vlc_playlist_view *view)
Return the number of items in the view.
Definition: export.c:43
unlikely
#define unlikely(p)
Predicted false condition.
Definition: vlc_common.h:227
vlc_playlist_state_NotifyChanges
void vlc_playlist_state_NotifyChanges(vlc_playlist_t *playlist, struct vlc_playlist_state *saved_state)
Definition: notify.c:91
vlc_common.h
vlc_playlist_export::file
FILE * file
Definition: vlc_playlist_export.h:67
notify.h
input_item_t
Describes an input and is used to spawn input_thread_t objects.
Definition: vlc_input_item.h:77
vlc_playlist_callbacks::on_items_updated
void(* on_items_updated)(vlc_playlist_t *playlist, size_t index, vlc_playlist_item_t *const items[], size_t count, void *userdata)
Called when an item has been updated via (pre-)parsing.
Definition: vlc_playlist.h:227
vlc_playlist_listener_id
Definition: notify.h:29
item.h
vlc_playlist_state::has_prev
bool has_prev
Definition: notify.h:38
vlc_playlist_view::playlist
vlc_playlist_t * playlist
Definition: export.c:57
vlc_playlist_item::media
input_item_t * media
Definition: item.h:31
VLC_EGENERIC
#define VLC_EGENERIC
Unspecified error.
Definition: vlc_common.h:474
vlc_playlist_item
Definition: item.h:29
vlc_list
Doubly-linked list node.
Definition: vlc_list.h:43
vlc_playlist_listener_id::node
struct vlc_list node
node of vlc_playlist.listeners
Definition: notify.h:33
playlist_item_vector_t::size
size_t size
Definition: playlist.h:46
vlc_playlist_state::has_next
bool has_next
Definition: notify.h:39
vlc_playlist_AddListener
vlc_playlist_listener_id * vlc_playlist_AddListener(vlc_playlist_t *playlist, const struct vlc_playlist_callbacks *cbs, void *userdata, bool notify_current_state)
Add a playlist listener.
Definition: notify.c:49
vlc_path2uri
char * vlc_path2uri(const char *path, const char *scheme)
Converts local path to URL.
Definition: url.c:143
vlc_playlist::has_prev
bool has_prev
Definition: playlist.h:58
vlc_fopen
FILE * vlc_fopen(const char *filename, const char *mode)
Opens a FILE pointer.
Definition: filesystem.c:49
vlc_playlist_export::playlist_view
struct vlc_playlist_view * playlist_view
Definition: vlc_playlist_export.h:68
vlc_playlist_export
Structure received by playlist export module.
Definition: vlc_playlist_export.h:63
vlc_playlist_listener_id::cbs
const struct vlc_playlist_callbacks * cbs
Definition: notify.h:31
vlc_playlist_RemoveListener
void vlc_playlist_RemoveListener(vlc_playlist_t *playlist, vlc_playlist_listener_id *listener)
Remove a player listener.
Definition: notify.c:70
vlc_playlist::current
ssize_t current
Definition: playlist.h:57
module_t
Internal module descriptor.
Definition: modules.h:78
vlc_playlist_export.h
vlc_list_remove
static void vlc_list_remove(struct vlc_list *restrict node)
Removes an element from a list.
Definition: vlc_list.h:135
vlc_playlist_state
Definition: notify.h:36
vlc_list_append
static void vlc_list_append(struct vlc_list *restrict node, struct vlc_list *head)
Appends an element into a list.
Definition: vlc_list.h:110
vlc_playlist_IndexOfMedia
ssize_t vlc_playlist_IndexOfMedia(vlc_playlist_t *playlist, const input_item_t *media)
Return the index of a given media.
Definition: content.c:206
vlc_playlist_state_Save
void vlc_playlist_state_Save(vlc_playlist_t *playlist, struct vlc_playlist_state *state)
Definition: notify.c:82
vlc_strerror_c
const char * vlc_strerror_c(int errnum)
Definition: error.c:34
vlc_playlist_NotifyCurrentState
static void vlc_playlist_NotifyCurrentState(vlc_playlist_t *playlist, vlc_playlist_listener_id *listener)
Definition: notify.c:31
vlc_list.h
vlc_playlist::order
enum vlc_playlist_playback_order order
Definition: playlist.h:62
vlc_playlist_AssertLocked
static void vlc_playlist_AssertLocked(vlc_playlist_t *playlist)
Definition: playlist.h:69
vlc_playlist_state_NotifyChanges
void vlc_playlist_state_NotifyChanges(vlc_playlist_t *playlist, struct vlc_playlist_state *saved_state)
Definition: notify.c:91
vlc_playlist_Notify
#define vlc_playlist_Notify(playlist, event,...)
Definition: notify.h:51
vlc_fs.h
vlc_playlist_listener_id::userdata
void * userdata
Definition: notify.h:32
vlc_url.h
vlc_playlist_Get
vlc_playlist_item_t * vlc_playlist_Get(vlc_playlist_t *playlist, size_t index)
Return the item at a given index.
Definition: content.c:189
playlist_item_vector_t::data
vlc_playlist_item_t ** data
Definition: playlist.h:46
vlc_playlist_view_Get
vlc_playlist_item_t * vlc_playlist_view_Get(struct vlc_playlist_view *view, size_t index)
Return the item at a given index.
Definition: export.c:49
vlc_playlist_HasItemUpdatedListeners
static bool vlc_playlist_HasItemUpdatedListeners(vlc_playlist_t *playlist)
Definition: notify.c:103
VLC_ENOMEM
#define VLC_ENOMEM
Not enough memory.
Definition: vlc_common.h:476
VLC_UNUSED
#define VLC_UNUSED(x)
Definition: vlc_common.h:1105
VLC_SUCCESS
#define VLC_SUCCESS
No error.
Definition: vlc_common.h:472
vlc_playlist_NotifyMediaUpdated
void vlc_playlist_NotifyMediaUpdated(vlc_playlist_t *playlist, input_item_t *media)
Definition: notify.c:113
vlc_playlist::has_next
bool has_next
Definition: playlist.h:59
vlc_custom_create
#define vlc_custom_create(o, s, n)
Definition: libvlc.h:117
vlc_playlist_NotifyMediaUpdated
void vlc_playlist_NotifyMediaUpdated(vlc_playlist_t *playlist, input_item_t *media)
Definition: notify.c:113
vlc_playlist_state_Save
void vlc_playlist_state_Save(vlc_playlist_t *playlist, struct vlc_playlist_state *state)
Definition: notify.c:82
vlc_playlist_export::base_url
char * base_url
Definition: vlc_playlist_export.h:66
vlc_player_GetObject
vlc_object_t * vlc_player_GetObject(vlc_player_t *player)
Definition: player.c:2036
libvlc.h
vlc_playlist_listener_foreach
#define vlc_playlist_listener_foreach(listener, playlist)
Definition: notify.h:42
vlc_object_delete
#define vlc_object_delete(obj)
Definition: vlc_objects.h:136
vlc_playlist_Export
int vlc_playlist_Export(struct vlc_playlist *playlist, const char *filename, const char *type)
Export the playlist to a file.
Definition: export.c:55
playlist.h
vlc_playlist::items
playlist_item_vector_t items
Definition: playlist.h:55
vlc_playlist::repeat
enum vlc_playlist_playback_repeat repeat
Definition: playlist.h:61
module_unneed
#define module_unneed(a, b)
Definition: vlc_modules.h:126
state
static thread_local struct @76 state
vlc_playlist_callbacks
Playlist callbacks.
Definition: vlc_playlist.h:164
msg_Err
#define msg_Err(p_this,...)
Definition: vlc_messages.h:102
vlc_playlist_Count
size_t vlc_playlist_Count(vlc_playlist_t *playlist)
Return the number of items.
Definition: content.c:182
module_need
#define module_need(a, b, c, d)
Definition: vlc_modules.h:111
vlc_modules.h