Contenu | Rechercher | Menus

Annonce

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".

#1 Le 18/09/2013, à 23:30

ytreza

installer une webapp perso

Bonjour !

Je suis sous Ubuntu 13.04, j'ai créé une webapp pour le serveur Madsonic d'un ami. La webapp fonctionne parfaitement lorsque le code Javascript est directement inséré dans la console de Firebug. Cependant, je n'arrive pas à installer la webapp sur le système (je suis obligé d’exécuter le code dans la console à chaque visite sur le serveur). J'ai créé une icône au format png, en 4 dimensions (48², 52², 64², 128² pixels), ainsi qu'un manifeste en Json :

{"includes":["http://xxx.yyy.zzz:pppp/*"],
"requires":["utils.js"],
"name":"Madsonic",
"scripts":["Madsonic.user.js"],
"maintainer":"Ytreza <aaaaa@bbb.cc>",
"manifest-version":"1.0",
"integration-version":"0.3",
"package-name":"madsonic",
"icons":{"128":"128/unity-webapps-madsonic.png","48":"48/unity-webapps-madsonic.png","52":"52/unity-webapps-madsonic.png","64":"64/unity-webapps-madsonic.png"},
"domain":"xxx.yyy.zzz",
"homepage":"http://xxx.yyy.zzz:pppp/index.view",
"license":"GPL-3"}

le code de l'appli, Madsonic.js :

// ==UserScript==
// @name          madsonic-unity-integration
// @include       http://xxx.yyy.zzz:pppp/index.view
// @version       0.3
// @author        Ytreza
// @require       utils.js
// ==/UserScript==

console.log("Unity-Madsonic webapp : launch");

window.Unity = external.getUnityObject(1);

var jQuery = null;
var player = null;

function updateUnityPlayerInfos() {
    console.log("Unity-Madsonic webapp : update unity player infos");
    var trackInfo = getTrackInfo();
    if (!trackInfo) {
        return;
    }

    if (player.getConfig()["state"] != "PLAYING") {
        Unity.MediaPlayer.setPlaybackState(Unity.MediaPlayer.PlaybackState.PAUSED);
    } else {
        Unity.MediaPlayer.setPlaybackState(Unity.MediaPlayer.PlaybackState.PLAYING);
    }

    Unity.MediaPlayer.setTrack(trackInfo);
}    

function getTrackInfo() {
    var artist = null;
    var title = document.title;
    var artLocation = null;
    var album = null;
    try {
        artist = jQuery("#playlistBody > tr > td:has(img:visible) + td + td > span")[0].title;
        title = jQuery("#playlistBody > tr > td > img:visible + a")[0].title;
        album = jQuery("#playlistBody > tr > td:has(img:visible) + td > a > span")[0].title;
        //TODO : find album cover
        artLocation = "http://xxx.yyy.zzz:pppp/coverArt.view"
    } catch (x) {}

    if (!title) {
        return null;
    }

    return {
        title: title,
        album: album,
        artist: artist,
        artLocation: artLocation
    };
}


function initWebapp() {
    console.log("Unity-Madsonic webapp : webapp initialisation");
    waitingForPlayer();
}

function waitingForPlayer() {
    try {
        jQuery = window.frames['playQueue'].jQuery;
        player = window.frames['playQueue'].player;
    } catch (x) {}
    if (jQuery == null || player == null) {
        console.log("Unity-Madsonic webapp : waiting for music player");
        setTimeout(waitingForPlayer, 2000);
    }
    musicPlayerSetup();
}

function musicPlayerSetup() {
    console.log("Unity-Madsonic webapp : media player initialisation");

    Unity.MediaPlayer.init("Madsonic");

    setInterval(wrapCallback(updateUnityPlayerInfos), 2000);

    Unity.MediaPlayer.onPlayPause(wrapCallback(function () {
        player.sendEvent('PLAY');
        updateUnityPlayerInfos();
    }));

    Unity.MediaPlayer.onPrevious(wrapCallback(function () {
        window.frames['playQueue'].onPrevious();
        updateUnityPlayerInfos();
    }));

    Unity.MediaPlayer.onNext(wrapCallback(function () {
        window.frames['playQueue'].onNext(false);
        updateUnityPlayerInfos();
    }));
}

Unity.init({ name: "Madsonic",
             domain: 'xxx.yyy.zzz',
             homepage: 'http://xxx.yyy.zzz:pppp/index.view',
             iconUrl: "icon://unity-webapps-madsonic",
             onInit: wrapCallback(initWebapp) });

L'adresse est évidement factice (il s'agit d'un serveur à usage privé dont je ne suis pas propriétaire, je préfère ne pas en divulguer l'adresse publiquement). Cependant, il est à noter que l'adresse est bien constituée de la façon http://xxx.yyy.zzz:pppp/ ou "pppp" est un numéro de port (cela a peut-être de l'importance ?).

J'ai déjà tenté de copier le js et le manifest dans un répertoire "/usr/share/unity-webapps/userscripts/unity-webapps-madsonic/", sans succés.

J'ignore si mon problème vient d'une erreur de ma part dans le code ou le manifest, mais j'ai pu constater que la plupart des docs disponible sur le web semblent ne pas êtres à jour, alors je me tournes vers vous pour m'aider à comprendre. Merci d'avance pour votre aide.

Ytreza

EDIT : J'ai mis à jour de la v0.2 à la v0.3 qui apporte quelques améliorations.

Dernière modification par ytreza (Le 19/09/2013, à 20:10)

Hors ligne

#2 Le 20/09/2013, à 19:04

ytreza

Re : installer une webapp perso

Personne ?
Je viens de tenter de créer un paquet .deb en copiant celui de la webapp pour le launchpad. Toujours le même problème : la creation du paquet et l'installation se passent bien, mais la webapp ne démarre pas. J'ai bien un raccourci dans le dash, mais l’icône disparaît si je la lance. Il me semble que le script n'est jamais exécuté, je ne vois même pas le premier console.log() du script js. Je soupçonne un problème au niveau du nom de domaine et des pages inclues, alors j'ai essayé plusieurs variantes. Mais si il s'agit bien du bon problème, je n'ai pas encore trouvé la combinaison gagnante, et je n'ai pas trouvé d'exemple de webapps qui s'appliquent sur un port spécifique comme dans mon cas de figure. Mais je suis peut-être à côté de la plaque... Si vous avez une solution, une idée, un conseil, une intuition.... n'hésitez pas à la partager. Merci.

Hors ligne

#3 Le 22/09/2013, à 14:10

ytreza

Re : installer une webapp perso

Personne n'a jamais rencontré pareil cas ? Aucune idée d’où peut venir le problème ? Je suis un grand distrait, ça ne m’étonnerait pas que le problème soit une bêtise d’inattention. hmm

Hors ligne

#4 Le 20/10/2013, à 19:33

legz

Re : installer une webapp perso

Je viens de faire une webapp pour Deezer ce WE (la webapp nouvellement dispo ne fonctionne absolument pas) et j'ai remarqué un détail : si il y a une erreur dans le code de ta webapp l'icône n’apparaît plus dans la sidebar et l'entrée n’apparaît pas de le menu de l'indicateur de son.

Essaye déjà d'avoir une app aussi minimaliste que possible (juste une init de l'entrée dans le menu de son avec des données en dur) pour voir si déjà l’icône de l'app apparaît (et l'entrée dans le menu de son), histoire d'éliminer la possibilité d'une erreur dans le js.


Par contre j'aurai une question en retour : Où/Comment est ce que tu vois les logs affichés via console.log() ?
(oui je suis une quiche en dev tongue)


Me suivre sur Twitter ? C'est par ici : http://twitter.com/legz !

Hors ligne

#5 Le 20/10/2013, à 20:12

ytreza

Re : installer une webapp perso

Bonsoir !
Merci pour cette réponse ! smile

legz a écrit :

Essaye déjà d'avoir une app aussi minimaliste que possible

Et bien même en ayant un code ultra-minimaliste (j'ai déjà essayé de créer une webbapp pure, sans aucune fonctionnalité réelle à part l’icône dans le lanceur) elle ne fonctionne toujours pas.

legz a écrit :

Où/Comment est ce que tu vois les logs affichés via console.log() ?

Depuis n'importe quelle console de débogage javascript intégrée au navigateur smile
Personnellement j'utilise Firebug, qui a mon avis, reste l'outils le plus pratique et le plus performant. Il existe déjà une console par défaut sous Firefox (Outis -> Developpeur web -> console web) et sous Chromium (outils -> console javascript).

legz a écrit :

Je viens de faire une webapp pour Deezer ce WE

J'ai moi aussi refais la webapp pour Grooveshark, pour les mêmes raisons. Mais j'ai réutilisé les sources du package d'origine, j'ai juste modifié le JavaScript et j'ai créé une version personnelle du paquet avec un simple "debchange --nmu; debuild". Cela avait fonctionné à merveille ^^. Je ne peux pas en dire autant de ma nouvelle webapp pour Madsonic tongue.

Pourrais-tu me détailler ton mode opératoire pour installer la webapp s'il te plaît ? Histoire de vérifier si je n'ai pas commis une erreur ou oublié une manipulation...
Merci d'avance !

PS : Je suis passé de 0.3 à 0.4 avec quelques améliorations, notamment la recherche de la pochette de l'album, mais je n'ai pas le code à ma disposition pour l'instant, je le remettrai dès que j'en trouverai le temps.

Hors ligne

Haut de page ↑