#ifndef _DBUS_PLAYER_H #define _DBUS_PLAYER_H #include #include #include #include // Uncomment this to show debug messages from dbus-mpris2 and dbus-player modules. //#define DEBUG_PLAYER #if defined(DEBUG_PLAYER) || defined(DEBUG_ALL) #define LOG_PLAYER LOG_MSG #else #define LOG_PLAYER(x, ...) #endif #define DBUS_MPRIS_TIMEOUT 400 // Milliseconds #define PLAYER_STATUS_CLOSED -1 #define PLAYER_STATUS_STOPPED 0 #define PLAYER_STATUS_PAUSED 1 #define PLAYER_STATUS_PLAYING 2 #define PLAYER_STATUS_NOTIFY_MSG 3 // Send notification message to the GUI #define RECORDING_DELETE_FILE 4 #define MPRIS_STRLEN 512 // Function pointers typedef void (*GetTrackInfo)(gpointer player_rec); // player_rec = (MediaPlayerRec*) typedef void (*SignalFunction)(gpointer player_rec, gboolean connect); // player_rec = (MediaPlayerRec*) typedef gboolean (*AppIsRunning)(gpointer player_rec); // player_rec = (MediaPlayerRec*) typedef void (*StartPlayer)(gpointer player_rec); // player_rec = (MediaPlayerRec*) typedef struct { gchar track[MPRIS_STRLEN+1]; // Track name (or GUI message if status==PLAYER_STATUS_NOTIFY_MSG) gchar artist[MPRIS_STRLEN+1]; // Artist gchar album[MPRIS_STRLEN+1]; // Album gint status; // One of the PLAYER_STATUS_* values gint total_secs; // Total track length in seconds gint current_secs; // Currently played length in seconds guint flags; // Possible RECORDING_DELETE_FILE flag } TrackInfo; typedef struct { gint type; // MEDIA_PLAYER or COMM_PROGRAM GDBusProxy *proxy; // Proxy for the "org.mpris.MediaPlayer2.Player" interface GDBusProxy *prop_proxy; // Proxy for the "org.freedesktop.DBus.Properties" interface gchar *exec_name; // Executable name from .desktop file gchar *app_name; // Name of the app, eg. "Amarok 2.3.3", "Banshee 2.1" or "Skype" gchar *icon_name; // Icon name gchar *service_name; // Eg. "name:org.mpris.MediaPlayer2.banshee" or "com.Skype.API" TrackInfo track; // See TrackInfo GetTrackInfo func_get_info; // Function to get track data; name/artist/album/music genre/time etc. SignalFunction func_set_signals; // Function to connect/disconnect DBus signals AppIsRunning func_check_is_running;// Function to check if the app is running StartPlayer func_start_app; // Function to run/start the player } MediaPlayerRec; void dbus_player_init(); void dbus_player_exit(); // Function to be called when media players send a request or data via the DBus. typedef void (*DBusDataCallbackFunc)(MediaPlayerRec *player); void dbus_player_set_callback_func(DBusDataCallbackFunc data_callback_func); GHashTable *dbus_player_get_list_ref(); GHashTable *dbus_player_get_player_list(); MediaPlayerRec *dbus_player_lookup_app_name(gchar *app_name); MediaPlayerRec *dbus_player_lookup_service_name(gchar *service_name); void dbus_player_delete_item(gpointer data); void dbus_player_debug_print(MediaPlayerRec *p); void dbus_player_player_changed(gchar *service_name); // Called by media players when they have new data void dbus_player_process_data(gpointer player); void dbus_player_send_notification(MediaPlayerRec *player, gchar *msg); #endif