qml: fix scrollbar in NetworkHomeDisplay
[vlc.git] / modules / control / dbus / dbus_common.h
1 /*****************************************************************************
2  * dbus_common.h : Common header for D-Bus control modules
3  *****************************************************************************
4  * Copyright © 2006-2008 Rafaël Carré
5  * Copyright © 2007-2010 Mirsal Ennaime
6  * Copyright © 2009-2010 The VideoLAN team
7  * Copyright © 2013      Alex Merry
8  *
9  * Authors:    Mirsal Ennaime <mirsal dot ennaime at gmailcom>
10  *             Rafaël Carré <funman at videolanorg>
11  *             Alex Merry <dev at randomguy3 me uk>
12  *
13  * This program is free software; you can redistribute it and/or modify
14  * it under the terms of the GNU General Public License as published by
15  * the Free Software Foundation; either version 2 of the License, or
16  * (at your option) any later version.
17  *
18  * This program is distributed in the hope that it will be useful,
19  * but WITHOUT ANY WARRANTY; without even the implied warranty of
20  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
21  * GNU General Public License for more details.
22  *
23  * You should have received a copy of the GNU General Public License
24  * along with this program; if not, write to the Free Software
25  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
26  *****************************************************************************/
27
28 #ifndef VLC_DBUS_DBUS_COMMON_H_
29 #define VLC_DBUS_DBUS_COMMON_H_
30
31 #include <vlc_common.h>
32 #include <vlc_interface.h>
33 #include <vlc_player.h>
34 #include <vlc_playlist.h>
35 #include <dbus/dbus.h>
36
37 #define DBUS_MPRIS_OBJECT_PATH "/org/mpris/MediaPlayer2"
38
39 /* MACROS */
40
41 #define INTF ((intf_thread_t *)p_this)
42 #define PL   (INTF->p_sys->playlist)
43
44 #define DBUS_METHOD( method_function ) \
45     static DBusHandlerResult method_function \
46             ( DBusConnection *p_conn, DBusMessage *p_from, void *p_this )
47
48 #define DBUS_SIGNAL( signal_function ) \
49     static DBusHandlerResult signal_function \
50             ( DBusConnection *p_conn, void *p_data )
51
52 #define REPLY_INIT \
53     DBusMessage* p_msg = dbus_message_new_method_return( p_from ); \
54     if( !p_msg ) return DBUS_HANDLER_RESULT_NEED_MEMORY; \
55
56 #define REPLY_SEND \
57     if( !dbus_connection_send( p_conn, p_msg, NULL ) ) \
58         return DBUS_HANDLER_RESULT_NEED_MEMORY; \
59     dbus_connection_flush( p_conn ); \
60     dbus_message_unref( p_msg ); \
61     return DBUS_HANDLER_RESULT_HANDLED
62
63 #define SIGNAL_INIT( interface, path, signal ) \
64     DBusMessage *p_msg = dbus_message_new_signal( path, \
65         interface, signal ); \
66     if( !p_msg ) return DBUS_HANDLER_RESULT_NEED_MEMORY; \
67
68 #define SIGNAL_SEND \
69     if( !dbus_connection_send( p_conn, p_msg, NULL ) ) \
70         return DBUS_HANDLER_RESULT_NEED_MEMORY; \
71     dbus_message_unref( p_msg ); \
72     dbus_connection_flush( p_conn ); \
73     return DBUS_HANDLER_RESULT_HANDLED
74
75 #define OUT_ARGUMENTS \
76     DBusMessageIter args; \
77     dbus_message_iter_init_append( p_msg, &args )
78
79 #define DBUS_ADD( dbus_type, value ) \
80     if( !dbus_message_iter_append_basic( &args, dbus_type, value ) ) \
81         return DBUS_HANDLER_RESULT_NEED_MEMORY
82
83 #define ADD_STRING( s ) DBUS_ADD( DBUS_TYPE_STRING, s )
84 #define ADD_DOUBLE( d ) DBUS_ADD( DBUS_TYPE_DOUBLE, d )
85 #define ADD_BOOL( b ) DBUS_ADD( DBUS_TYPE_BOOLEAN, b )
86 #define ADD_INT32( i ) DBUS_ADD( DBUS_TYPE_INT32, i )
87 #define ADD_INT64( i ) DBUS_ADD( DBUS_TYPE_INT64, i )
88 #define ADD_BYTE( b ) DBUS_ADD( DBUS_TYPE_BYTE, b )
89
90 #define MPRIS_TRACKID_FORMAT "/org/videolan/vlc/playlist/%lu"
91
92 struct intf_sys_t
93 {
94     vlc_playlist_t              *playlist;
95     vlc_playlist_listener_id    *playlist_listener;
96     vlc_player_listener_id      *player_listener;
97     vlc_player_aout_listener_id *player_aout_listener;
98     vlc_player_vout_listener_id *player_vout_listener;
99     vlc_player_timer_id         *player_timer;
100
101     DBusConnection *p_conn;
102     bool            b_meta_read;
103     dbus_int32_t    i_player_caps;
104     dbus_int32_t    i_playing_state;
105     bool            b_can_play;
106     bool            b_dead;
107     vlc_array_t     events;
108     vlc_array_t     timeouts;
109     vlc_array_t     watches;
110     int             p_pipe_fds[2];
111     vlc_mutex_t     lock;
112     vlc_thread_t    thread;
113     bool            has_input;
114 };
115
116 enum
117 {
118     SIGNAL_NONE=0,
119     SIGNAL_ITEM_CURRENT,
120     SIGNAL_PLAYLIST_ITEM_APPEND,
121     SIGNAL_PLAYLIST_ITEM_DELETED,
122     SIGNAL_INPUT_METADATA,
123     SIGNAL_RANDOM,
124     SIGNAL_REPEAT,
125     SIGNAL_LOOP,
126     SIGNAL_STATE,
127     SIGNAL_RATE,
128     SIGNAL_SEEK,
129     SIGNAL_CAN_SEEK,
130     SIGNAL_CAN_PAUSE,
131     SIGNAL_VOLUME_CHANGE,
132     SIGNAL_VOLUME_MUTED,
133     SIGNAL_FULLSCREEN
134 };
135
136 enum
137 {
138     PLAYBACK_STATE_INVALID = -1,
139     PLAYBACK_STATE_PLAYING = 0,
140     PLAYBACK_STATE_PAUSED  = 1,
141     PLAYBACK_STATE_STOPPED = 2
142 };
143
144 int DemarshalSetPropertyValue( DBusMessage *p_msg, void *p_arg );
145 int GetInputMeta( vlc_playlist_t *, vlc_playlist_item_t *,
146                   DBusMessageIter *args );
147 int AddProperty ( intf_thread_t *p_intf,
148                   DBusMessageIter *p_container,
149                   const char* psz_property_name,
150                   const char* psz_signature,
151                   int (*pf_marshaller) (intf_thread_t*, DBusMessageIter*) );
152
153 #endif /* include-guard */