Ömer Ücel

March 26, 2008

Banshee Müzik Çalarından Çalan Parça Bilgilerini Alma

Filed under: Genel — Tags: , , — Ömer Ücel @ 2:30 am

Pidgin için bir eklenti yazmaya çalışıyorum. Banshee müzik çalıcısında çalan parçanın durum mesajında görünmesini sağlayacağım. Bir eklenti sayesinde bunun nasıl yapılacağı hakkında bir fikir edimdim. Aslında aynısını kopyalayıp bazı bilgileri deiştirip de bunu yapabilirim ancak c++ ile ilgili bir şeyler öğrenebilmek için kendim yazmam gerekiyor :)

Şimdilik konsolda, çalan parça bilgilerini veren bir ufak uygulama geliştirdim:

 
#include <stdlib .h>
#include <string .h>
#include <glib .h>
#include <dbus /dbus-glib>
 
int main()
{
	DBusGConnection *bus;
	DBusGProxy *proxy;
	GError *error = NULL;
	int status = 0;
	gchar *artist = 0;
	gchar *album = 0;
	gchar *track = 0;
 
	g_type_init();
	dbus_g_type_specialized_init();
 
	bus = dbus_g_bus_get(DBUS_BUS_SESSION,&error);
 
	if (error){
		g_log(G_LOG_DOMAIN,G_LOG_LEVEL_ERROR,
				"%s: Error : %s",G_STRLOC,error->message);
		return false;
	}
 
	proxy = dbus_g_proxy_new_for_name(bus,
			"org.gnome.Banshee",
			"/org/gnome/Banshee/Player",
			"org.gnome.Banshee.Core");
 
	if (!dbus_g_proxy_call(proxy,"GetPlayingStatus",&error,
			G_TYPE_INVALID,
			G_TYPE_INT,
			&status,
			G_TYPE_INVALID))
	{
		g_log(G_LOG_DOMAIN,G_LOG_LEVEL_ERROR,
				"%s : Failed : %s",
				G_STRLOC,error->message);
		return false;
	}
 
	if (status==1){
		if (!dbus_g_proxy_call(proxy,"GetPlayingArtist",&error,
				G_TYPE_INVALID,
				G_TYPE_STRING,
				&artist,
				G_TYPE_INVALID))
		{
			g_log(G_LOG_DOMAIN,G_LOG_LEVEL_ERROR,
					"%s : Failed : %s",
					G_STRLOC,error->message);
			return false;
		}
		if (!dbus_g_proxy_call(proxy,"GetPlayingAlbum",&error,
				G_TYPE_INVALID,
				G_TYPE_STRING,
				&album,
				G_TYPE_INVALID))
		{
			g_log(G_LOG_DOMAIN,G_LOG_LEVEL_ERROR,
					"%s : Failed : %s",
					G_STRLOC,error->message);
			return false;
		}
		if (!dbus_g_proxy_call(proxy,"GetPlayingTitle",&error,
				G_TYPE_INVALID,
				G_TYPE_STRING,
				&track,
				G_TYPE_INVALID))
		{
			g_log(G_LOG_DOMAIN,G_LOG_LEVEL_ERROR,
					"%s : Failed : %s",
					G_STRLOC,error->message);
			return false;
		}
 
	}
	g_message(artist);
	g_message(album);
	g_message(track);
	return false;
}
</dbus></glib></string></stdlib>

Yukarıdaki kodları isim.cpp şeklinde kaydedip aşağıdaki şekilde derleyebilirsiniz.

 
[omer@localhost programlama]$ g++ isim.cpp -o isim `pkg-config --libs --cflags gtk+-2.0 dbus-glib-1`
[omer@localhost programlama]$ ./isim
 

No Comments »

No comments yet.

RSS feed for comments on this post. TrackBack URL

Leave a comment

Powered by WordPress