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
9 * Authors: Mirsal Ennaime <mirsal dot ennaime at gmailcom>
10 * Rafaël Carré <funman at videolanorg>
12 * This program is free software; you can redistribute it and/or modify
13 * it under the terms of the GNU General Public License as published by
14 * the Free Software Foundation; either version 2 of the License, or
15 * (at your option) any later version.
17 * This program is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 * GNU General Public License for more details.
22 * You should have received a copy of the GNU General Public License
23 * along with this program; if not, write to the Free Software
24 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
25 *****************************************************************************/
27 #ifndef _VLC_DBUS_COMMON_H
28 #define _VLC_DBUS_COMMON_H
30 #include <vlc_common.h>
31 #include <vlc_interface.h>
32 #include <dbus/dbus.h>
34 #define DBUS_MPRIS_OBJECT_PATH "/org/mpris/MediaPlayer2"
38 #define INTF ((intf_thread_t *)p_this)
39 #define PL (INTF->p_sys->p_playlist)
41 #define DBUS_METHOD( method_function ) \
42 static DBusHandlerResult method_function \
43 ( DBusConnection *p_conn, DBusMessage *p_from, void *p_this )
45 #define DBUS_SIGNAL( signal_function ) \
46 static DBusHandlerResult signal_function \
47 ( DBusConnection *p_conn, void *p_data )
50 DBusMessage* p_msg = dbus_message_new_method_return( p_from ); \
51 if( !p_msg ) return DBUS_HANDLER_RESULT_NEED_MEMORY; \
54 if( !dbus_connection_send( p_conn, p_msg, NULL ) ) \
55 return DBUS_HANDLER_RESULT_NEED_MEMORY; \
56 dbus_connection_flush( p_conn ); \
57 dbus_message_unref( p_msg ); \
58 return DBUS_HANDLER_RESULT_HANDLED
60 #define SIGNAL_INIT( interface, path, signal ) \
61 DBusMessage *p_msg = dbus_message_new_signal( path, \
62 interface, signal ); \
63 if( !p_msg ) return DBUS_HANDLER_RESULT_NEED_MEMORY; \
66 if( !dbus_connection_send( p_conn, p_msg, NULL ) ) \
67 return DBUS_HANDLER_RESULT_NEED_MEMORY; \
68 dbus_message_unref( p_msg ); \
69 dbus_connection_flush( p_conn ); \
70 return DBUS_HANDLER_RESULT_HANDLED
72 #define OUT_ARGUMENTS \
73 DBusMessageIter args; \
74 dbus_message_iter_init_append( p_msg, &args )
76 #define DBUS_ADD( dbus_type, value ) \
77 if( !dbus_message_iter_append_basic( &args, dbus_type, value ) ) \
78 return DBUS_HANDLER_RESULT_NEED_MEMORY
80 #define ADD_STRING( s ) DBUS_ADD( DBUS_TYPE_STRING, s )
81 #define ADD_DOUBLE( d ) DBUS_ADD( DBUS_TYPE_DOUBLE, d )
82 #define ADD_BOOL( b ) DBUS_ADD( DBUS_TYPE_BOOLEAN, b )
83 #define ADD_INT32( i ) DBUS_ADD( DBUS_TYPE_INT32, i )
84 #define ADD_INT64( i ) DBUS_ADD( DBUS_TYPE_INT64, i )
85 #define ADD_BYTE( b ) DBUS_ADD( DBUS_TYPE_BYTE, b )
87 #define MPRIS_TRACKID_FORMAT "/org/videolan/vlc/playlist/%d"
91 DBusConnection *p_conn;
92 playlist_t *p_playlist;
94 dbus_int32_t i_player_caps;
95 dbus_int32_t i_playing_state;
98 vlc_array_t *p_events;
99 vlc_array_t *p_timeouts;
100 vlc_array_t *p_watches;
103 input_thread_t *p_input;
104 mtime_t i_last_input_pos; /* Only access it from the input thread */
105 mtime_t i_last_input_pos_event; /* idem */
112 SIGNAL_PLAYLIST_ITEM_APPEND,
113 SIGNAL_PLAYLIST_ITEM_DELETED,
114 SIGNAL_INPUT_METADATA,
123 SIGNAL_VOLUME_CHANGE,
130 PLAYBACK_STATE_INVALID = -1,
131 PLAYBACK_STATE_PLAYING = 0,
132 PLAYBACK_STATE_PAUSED = 1,
133 PLAYBACK_STATE_STOPPED = 2
136 int DemarshalSetPropertyValue( DBusMessage *p_msg, void *p_arg );
137 int GetInputMeta ( input_item_t* p_input, DBusMessageIter *args );
139 #endif //dbus-common.h