2017-08-14 8 views
1

Je développe un lecteur multimédia avec Vala et je veux être en mesure d'ouvrir des fichiers audio avec cette application (une fois qu'il est installé).GTK autorise les fichiers ouverts avec une nouvelle application vala

Dans les fichiers .descktop J'ai ajouté les types MIME suivants pour indiquer quels fichiers peuvent ouvrir (ce sont les mêmes types MIME que dans banshee):

MimeType=application/musepack;application/ogg;application/rss+xml;application/vnd.emusic-emusic_list;application/x-ape;application/x-democracy;application/x-extension-m4a;application/x-extension-mp4;application/x-flac;application/x-flash-video;application/x-id3;application/x-linguist;application/x-matroska;application/x-miro;application/x-musepack;application/x-netshow-channel;application/x-ogg;application/x-quicktime-media-link;application/x-quicktimeplayer;application/x-shorten;application/x-troff-msvideo;application/xspf+xml;audio/3gpp;audio/AMR;audio/AMR-WB;audio/ac3;audio/ape;audio/avi;audio/basic;audio/flac;audio/midi;audio/mp;audio/mp2;audio/mp3;audio/mp4;audio/mp4a-latm;audio/mpc;audio/mpeg;audio/mpeg3;audio/mpegurl;audio/musepack;audio/ogg;audio/vorbis;audio/wav;audio/wave;audio/x-amzxml;audio/x-ape;audio/x-flac;audio/x-it;audio/x-m4a;audio/x-matroska;audio/x-mod;audio/x-mp;audio/x-mp3;audio/x-mpc;audio/x-mpeg;audio/x-mpeg-3;audio/x-mpegurl;audio/x-ms-asf;audio/x-ms-asx;audio/x-ms-wax;audio/x-ms-wma;audio/x-musepack;audio/x-ogg;audio/x-pn-aiff;audio/x-pn-au;audio/x-pn-wav;audio/x-pn-windows-acm;audio/x-s3m;audio/x-sbc;audio/x-scpls;audio/x-speex;audio/x-tta;audio/x-vorbis;audio/x-vorbis+ogg;audio/x-wav;audio/x-wavpack;audio/x-xm;image/avi;image/x-pict;misc/ultravox;text/google-video-pointer;text/x-google-video-pointer;text/x-opml+xml;video/3gpp;video/avi;video/dv;video/fli;video/flv;video/mp4;video/mp4v-es;video/mpeg;video/msvideo;video/ogg;video/quicktime;video/vivo;video/vnd.divx;video/vnd.vivo;video/x-anim;video/x-avi;video/x-flc;video/x-fli;video/x-flic;video/x-flv;video/x-m4v;video/x-matroska;video/x-mpeg;video/x-mpg;video/x-ms-asf;video/x-ms-wm;video/x-ms-wmv;video/x-ms-wmx;video/x-ms-wvx;video/x-msvideo;video/x-nsv;video/x-ogm+ogg;video/x-theora;video/x-theora+ogg;x-scheme-handler/lastfm;x-scheme-handler/u1ms; 

Par Donig cette application est représenté dans la boîte de dialogue " Ouvrir avec "quand je clique sur un fichier.

Puis, dans ma classe, je Gtk.Application ajouté dans le constructeur:

class SomeClass (string[] args) { 
    Object (application_id: "some.id", flags: ApplicationFlags.HANDLES_OPEN); 
    // do stuff... 
} 

Et enfin j'ai ajouté la méthode « ouverte » qui est suposed être appelé lorsqu'un fichier est ouvert avec l'aplication:

public override void open (File[] files, string hint) { 
    // do stuff ... 
} 

Cependant, lorsque je tente d'ouvrir un fichier .mp3 avec ma demande apparaît une boîte de dialogue qui dit:

"No es poden obrir els fitxers o uri amb aquesta aplicació"

en anglais:

« Les fichiers ou URIs ne peut pas être ouvert avec cette application »

Ma question est la suivante: Suis-je manque quelque chose?

J'ai ajouté des types MIME dans le fichier descktop, j'ai activé le drapeau "HANDLES_OPEN" et j'ai implémenté la méthode "open".

PD: Je travaille avec elementaryOS et j'installe mon application avec CMake build system.

Répondre

0

Dans la terminologie GLib/C: Vous devez vous connecter votre implémentation de open à l » ::open signal du GApplication.

Dans la terminologie Vala: Voir signals:

class Foo : Object { 
    public signal void some_event(); // definition of the signal 

    public void method() { 
     some_event();     // emitting the signal (callbacks get invoked) 
    } 
} 

void callback_a() { 
    stdout.printf ("Callback A\n"); 
} 

void callback_b() { 
    stdout.printf ("Callback B\n"); 
} 

void main() { 
    var foo = new Foo(); 
    foo.some_event.connect (callback_a);  // connecting the callback functions 
    foo.some_event.connect (callback_b); 
    foo.method(); 
} 

...

Ainsi, en termes Vala: