[Risolto] aiuto per applet javascript
Inviato: martedì 1 maggio 2012, 18:17
Avrei bisogno dell'auito di un programmatore che ci capisca di javascript.
Spiego un po' la situazione.
Ubuntu 12.04 LTS installata da netinstall.
Per la gestione dell'audio mi sono affidato a alsa+xfce4-volumed+volumeicon+xfce4-mixer.
Tutto funziona.
/etc/xdg/autostart:
org.gnome.settings-daemon.plugins.media-keys:
Volume down → disabilitato (ci pensa xfc4-volumed con tanto di notifica in tema %)
Volume up → disabilitato (ci pensa xfc4-volumed con tanto di notifica in tema %)
Volume mute → disabilitato (ci pensa xfc4-volumed con tanto di notifica in tema e simboletto)
configurazione di volume icon, che appare perfettamente nell'area di notifica di Cinnamon e si comporta come la vecchia applet volume di gnome (volendo si può anche configurarla proprio identica), prima di pulseaudio:
Ora sorge il problema, exaile... si vede quasi mai nell'area di notifica causa grave bug di cinnamon, rhythmbox... dopo che hanno deciso di rimuovere il plugin tray icon non spunta proprio, ho scaricato dei plugin da github per avere rhythmbox nell'area di notifica, stando attento che non mancassero pacchetti necessari, ma non funziona.
L'idea era di modificare la sound-applet, rimuovendo tutto quello che ha a che fare con pulseaudio, nella speranza che si avvii e funzioni perfettamente.
Io faccio da cavia, ma mi serve qualcuno che sia in grado di farlo.
Al momento non funziona affatto, quindi mi basterebbe anche un funzionamento parziale.
I file da modificare sono questi:
il primo è semplice, gli cambio nome e gli metto l'icona di rhythmbox.
Poi c'è questo per il quale mi serve assistenza:
Dovrei abolire tutto ciò che appartiene a pulseaudio e ai controlli di sistema (volume) e lasciare solo la funzione media-player, anche solo per rhythmbox va più che bene.
Al momento tramite tasto XF86AudioMedia rhythmbox ritorna (si ripristina la finestra) e tramite tasti XF86AudioPlay/Pause/Previous/Next riesco a controllarlo, ma mi pare di avere il sistema castrato.
Teoricamente è molto semplice, basterebbe snellire il file, ma non ho mai avuto a che fare con roba del genere.
Se vi servono chiarimenti su qualcosa, che non sia programmazione in javascript, sono a completa disposizione.
Intanto provo a farla io qualche modifica e se ci riesco vi aggiorno.
Spiego un po' la situazione.
Ubuntu 12.04 LTS installata da netinstall.
Per la gestione dell'audio mi sono affidato a alsa+xfce4-volumed+volumeicon+xfce4-mixer.
Tutto funziona.
/etc/xdg/autostart:
Codice: Seleziona tutto
[Desktop Entry]
Type=Application
Exec=volumeicon
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=volumeicon
Comment=
Icon=multimedia-volume-control
Codice: Seleziona tutto
[Desktop Entry]
Type=Application
Exec=xfce4-volumed
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true
Name=xfce4-volumed
Comment=
Icon=xfce4-keyboard
Volume down → disabilitato (ci pensa xfc4-volumed con tanto di notifica in tema %)
Volume up → disabilitato (ci pensa xfc4-volumed con tanto di notifica in tema %)
Volume mute → disabilitato (ci pensa xfc4-volumed con tanto di notifica in tema e simboletto)
configurazione di volume icon, che appare perfettamente nell'area di notifica di Cinnamon e si comporta come la vecchia applet volume di gnome (volendo si può anche configurarla proprio identica), prima di pulseaudio:
Codice: Seleziona tutto
[StatusIcon]
stepsize=1
lmb_slider=false
mmb_mute=false
onclick=xfce4-mixer
theme=White Gnome
[Hotkeys]
up_enabled=false
down_enabled=false
mute_enabled=false
up=XF86AudioRaiseVolume
down=XF86AudioLowerVolume
mute=XF86AudioMute
[Alsa]
card=hw:0
L'idea era di modificare la sound-applet, rimuovendo tutto quello che ha a che fare con pulseaudio, nella speranza che si avvii e funzioni perfettamente.
Io faccio da cavia, ma mi serve qualcuno che sia in grado di farlo.
Al momento non funziona affatto, quindi mi basterebbe anche un funzionamento parziale.
I file da modificare sono questi:
Codice: Seleziona tutto
{
"uuid": "sound@cinnamon.org",
"name": "Sound",
"description": "Cinnamon sound applet",
"icon": "stock_volume"
}
Poi c'è questo per il quale mi serve assistenza:
Codice: Seleziona tutto
_volumeChanged: function(object, param_spec, property) {
if (this[property] == null) return;
if (this[property].volume / this._volumeMax === 0)
this._outputTitle.setIcon("audio-volume-muted");
if (this[property].volume / this._volumeMax > 0)
this._outputTitle.setIcon("audio-volume-low");
if (this[property].volume / this._volumeMax > 0.30)
this._outputTitle.setIcon("audio-volume-medium");
if (this[property].volume / this._volumeMax > 0.80)
this._outputTitle.setIcon("audio-volume-high");
this[property+'Slider'].setValue(this[property].volume / this._volumeMax);
if (property == '_output' && !this._output.is_muted)
this.setIconName(this._volumeToIcon(this._output.volume));
},
_volumeToIcon: function(volume) {
if (volume <= 0) {
return 'audio-volume-muted';
} else {
let n = Math.floor(3 * volume / this._volumeMax) + 1;
if (n < 2)
return 'audio-volume-low';
if (n >= 3)
return 'audio-volume-high';
return 'audio-volume-medium';
}
},
_onControlStateChanged: function() {
if (this._control.get_state() == Gvc.MixerControlState.READY) {
this._readOutput();
this._readInput();
this.actor.show();
} else {
this.actor.hide();
}
},
_readOutput: function() {
if (this._outputVolumeId) {
this._output.disconnect(this._outputVolumeId);
this._output.disconnect(this._outputMutedId);
this._outputVolumeId = 0;
this._outputMutedId = 0;
}
this._output = this._control.get_default_sink();
if (this._output) {
this._outputMutedId = this._output.connect('notify::is-muted', Lang.bind(this, this._mutedChanged, '_output'));
this._outputVolumeId = this._output.connect('notify::volume', Lang.bind(this, this._volumeChanged, '_output'));
this._mutedChanged (null, null, '_output');
this._volumeChanged (null, null, '_output');
let sinks = this._control.get_sinks();
this._selectDeviceItem.menu.removeAll();
for (let i = 0; i < sinks.length; i++) {
let sink = sinks[i];
let menuItem = new PopupMenu.PopupMenuItem(sink.get_description());
if (sinks[i].get_id() == this._output.get_id()) {
menuItem.setShowDot(true);
}
menuItem.connect('activate', Lang.bind(this, function() {
log('Changing default sink to ' + sink.get_description());
this._control.set_default_sink(sink);
}));
this._selectDeviceItem.menu.addMenuItem(menuItem);
}
} else {
this._outputSlider.setValue(0);
this.setIconName('audio-volume-muted-symbolic');
}
},
_readInput: function() {
if (this._inputVolumeId) {
this._input.disconnect(this._inputVolumeId);
this._input.disconnect(this._inputMutedId);
this._inputVolumeId = 0;
this._inputMutedId = 0;
}
this._input = this._control.get_default_source();
if (this._input) {
this._inputMutedId = this._input.connect('notify::is-muted', Lang.bind(this, this._mutedChanged, '_input'));
this._inputVolumeId = this._input.connect('notify::volume', Lang.bind(this, this._volumeChanged, '_input'));
this._mutedChanged (null, null, '_input');
this._volumeChanged (null, null, '_input');
} else {
this._inputTitle.actor.hide();
this._inputSlider.actor.hide();
}
},
_maybeShowInput: function() {
// only show input widgets if any application is recording audio
this._showInput = false;
let recordingApps = this._control.get_source_outputs();
if (this._input && recordingApps) {
for (let i = 0; i < recordingApps.length; i++) {
let outputStream = recordingApps[i];
let id = outputStream.get_application_id();
// but skip gnome-volume-control and pavucontrol
// (that appear as recording because they show the input level)
if (!id || (id != 'org.gnome.VolumeControl' && id != 'org.PulseAudio.pavucontrol')) {
this._showInput = true;
break;
}
}
}
if (this._showInput) {
this._inputTitle.actor.show();
this._inputSlider.actor.show();
} else {
this._inputTitle.actor.hide();
this._inputSlider.actor.hide();
}
}
};
function main(metadata, orientation) {
let myApplet = new MyApplet(orientation);
return myApplet;
}
Al momento tramite tasto XF86AudioMedia rhythmbox ritorna (si ripristina la finestra) e tramite tasti XF86AudioPlay/Pause/Previous/Next riesco a controllarlo, ma mi pare di avere il sistema castrato.
Teoricamente è molto semplice, basterebbe snellire il file, ma non ho mai avuto a che fare con roba del genere.
Se vi servono chiarimenti su qualcosa, che non sia programmazione in javascript, sono a completa disposizione.
Intanto provo a farla io qualche modifica e se ci riesco vi aggiorno.