Pages : 1
#1 Le 18/09/2013, à 22: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, à 19:10)
Hors ligne
#2 Le 20/09/2013, à 18: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, à 13: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.
Hors ligne
#4 Le 20/10/2013, à 18: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 )
Me suivre sur Twitter ? C'est par ici : http://twitter.com/legz !
Hors ligne
#5 Le 20/10/2013, à 19:12
- ytreza
Re : installer une webapp perso
Bonsoir !
Merci pour cette réponse !
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.
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
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).
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 .
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
Pages : 1