Giocando con F-Spot, DBus and Gnome-Screensaver

Lavoro duro su F-Spot. Non il solito, banale, “noioso” lavoro si bug-fixing, che in comunque nasconde non poche difficoltà per coloro che, come me, non conoscono a fondo ne il C# ne il codice di F-Spot.

Il gran lavoro di questi giorni è legato al tentativo di fix del bug #427478, che può apparire estremamente semplice a prima vista, ma nasconde una serie di insidie da non sottovalutare.
Scovare il punto del codice di F-Spot dove andare a mettere le mani e lanciare messaggi di “inibizione” e “deinibizione”, è stato piuttosto semplice. Il codice è ben scritto, e con un po’ di ricerche si trova tutto.
Il problema si è posto nel tentativo di comprendere come si potesse parlare con DBus, da Mono. L’unica implementazione di cui ho notizia, è DBus-sharp a cui si fa riferimento anche come “managed D-Bus” in quanto si tratta di una completa riscrittura della libreria, che mal si adattava all’interazione con Mono.

Innanzi tutto sembra che non esistano esempi comprensibili a disposizione. Pullula di casi di test, ma un pezzo di codice d’esempio che faccia la classica cosa stupidissima, non c’è verso di trovarlo. Ci ho bestemmiato dietro per 2 giorni, finché il buon Stephane Delcroix non se n’è uscito con questo sample:

using NDesk.DBus;
using System;

public class ScreenSaver {

        [Interface ("org.gnome.ScreenSaver")]
        public interface IScreenSaver {
                uint Inhibit (string appname, string reason);
                void Lock ();
        }

        public static void Main () {
                IScreenSaver screensaver = Bus.Session.GetObject<IScreenSaver>("org.gnome.ScreenSaver", new ObjectPath ("/org/gnome/ScreenSaver"));
                screensaver.Lock ();
        }
}

da compilare tramite il comando gmcs ScreenSaver.cs -r:NDesk.DBus.dll per ottenere uno stupidissimo programmino che richiede, tramite DBus, l’attivazione dello screensaver di Gnome. Era davvero cosi difficile da ottenere? :/

Una volta capito il meccanismo, inviare la chiamata di inhibit e dehinibit allo screensaver è stato piuttosto semplice, con l’unica difficoltà di dover suddividere il codice in due files, e doverli quindi mettere insieme, inserendo in entrambi tutte le condizioni a contorno per il relativo funzionamento.

Annunci

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...