# Caratteristiche avanzate di Amarok

## Scorciatoie da tastiera

&amarok; usa scorciatoie da tastiera come la maggior parte delle altre applicazioni. Sotto trovi una lista di queste scorciatoie e le rispettive azioni. Le scorciatoie globali possono essere configurate facendo clic con il pulsante destro del mouse nella finestra del lettore e selezionando Configura scorciatoie globali.... Le scorciatoie di &amarok; possono essere configurate facendo clic con il pulsante destro del mouse nella finestra del lettore e selezionando Configura scorciatoie....

Puoi programmare i tasti multimediali affinché funzionino come scorciatoie per &amarok; facendo divenire la tua tastiera un centro di controllo di &amarok;.

Le scorciatoie globali sono:

Combinazione tasti | Azione
--- | ---
Win X | Riproduci
Win C | Pausa
Win V | Ferma
Win B | Prossima traccia
Win Z | Traccia precedente
Win tasto + in tast.num. | Aumenta volume
Win tasto - in tast.num. | Riduci volume
Win&Shift;+ in tast.num. | Cerca in avanti
Win&Shift;- in tast.num. | Cerca indietro
Win A | Aggiungi file
Win P | Attiva/disattiva scaletta
Win O | Mostra OSD
Win M | Volume muto

Le scorciatoie di &amarok; sono:

Combinazione tasti | Azione
--- | ---
&Ctrl;C | Copia
&Ctrl;Invio in tast.num | Vai all'attuale
&Ctrl;D | Accoda tracce selezionate
&Ctrl;Q | Chiudi
&Ctrl;&Shift;Z | Ripeti
&Ctrl;S | Salva la scaletta
&Ctrl;A | Seleziona tutto
&Ctrl;M | Mostra la barra dei menu
&Ctrl;H | Mescola
&Ctrl;Z | Annulla

Le scorciatoie per il navigatore della scaletta sono:

Combinazione tasti | Azione
--- | ---
Barra spaziatrice | Carica scaletta
F2 | Rinomina scaletta
&Backspace; | Rimuovi scaletta

## L'interfaccia DCOP

Con l'interfaccia DCOP di Amarok, puoi controllare facilmente Amarok con script personalizzati.

L'interfaccia DCOP di Amarok ha molte funzioni generiche che possono essere trovate in altre applicazioni di KDE. Questa sezione è divisa in sei tabelle e descrive le funzioni DCOP della collezione, navigatore per contesti, lettore, scaletta, navigatore delle scaletta e script. Un esempio della funzione dcop pausa potrebbe essere il seguente:

&percnt;dcop amarok player pause

### dcop amarok collection

Chiamata DCOP | Azione
--- | ---
int totalAlbums() | Restituisce il totale degli album nella collezione.
int totalArtists() | Restituisce il totale degli artisti nella collezione.
int totalCompilations() | Restituisce il totale di compilation nella collezione.
int totalGenres() | Restituisce il totale dei generi nella collezione.
int totalTracks() | Restituisce il totale delle tracce nella collezione.
QString query( QString sql) | Interroga il database attraverso SQL.
QStringList similarArtists( int artists ) | Restituisce artisti simili alla traccia attuale, limitatamente a artisti int.
void migrateFile( QString oldURL, QString newURL ) | Sposta un file nella collezione. mantenendo intatte le statistiche.
void scanCollection() | Analizza la collezione.
void scanCollectionChanges() | Analizza la collezione solo in caso di cambiamenti.

### dcop amarok contextbrowser

Chiamata DCOP | Azione
--- | ---
void showCurrentTrack() | Mostra la traccia attuale nel navigatore per contesti.
void showLyrics() | Mostra la scheda Testi nel navigatore per contesti.
void showWiki() | Mostra la scheda wikipedia nel navigatore per contesti.

### dcop amarok player

Chiamata DCOP | Azione
--- | ---
bool dynamicModeStatus() | Restituisce lo stato della modalità dinamica.
bool equalizerEnabled() | Restituisce lo stato dell'equalizzatore.
bool isPlaying() | Restituisce vero se qualcosa è al momento in riproduzione.
bool randomModeStatus() | Restituisce lo stato della modalità casuale.
bool repeatPlaylistStatus() | Restituisce lo stato di ripetizione della scaletta.
bool repeatTrackStatus() | Restituisce lo stato di ripetizione della traccia.
int getVolume() | Restituisce il volume in un intervallo 0-100%.
int sampleRate() | Restituisce la frequenza di campionamento della traccia in riproduzione.
int score() | Restituisce il punteggio della traccia in riproduzione.
int status() | Restituisce lo stato di riproduzione: 0 - fermato, 1 - in pausa, 2 - in riproduzione.
int trackCurrentTime() | Restituisce la posizione di riproduzione attuale in secondi.
int trackPlayCounter() | Restituisce il contatore di riproduzione per il brano attuale.
int trackTotalTime() | Restituisce la durata della traccia in secondi.
QString album() | Restituisce l'album della traccia in riproduzione.
QString artist() | Restituisce l'artista della traccia in riproduzione.
QString bitrate() | Restituisce il bitrate della traccia in riproduzione (XX kbps).
QString comment() | Restituisce il commento della traccia in riproduzione.
QString coverImage() | Restituisce l'URL codificato della copertina della traccia attuale.
QString currentTime() | Restituisce la posizione della traccia in riproduzione(formato [h:]mm:ss).
QString encodedURL() | Restituisce l'URL codificato della traccia in riproduzione.
QString engine() | Restituisce il motore audio attuale.
QString genre() | Restituisce il genere della traccia in riproduzione.
QString lyrics() | Restituisce i testi della traccia in riproduzione.
QString lyricsByPath( QString path ) | Restituisce i testi di una traccia in base al percorso.
QString nowPlaying() | Il titolo del media in riproduzione al momento.
QString path() | Restituisce il percorso non non codificato della traccia in riproduzione.
QString setContextStyle( QString ) | Imposta lo stile CSS per il navigatore per contesti.
QString title() | Restituisce il titolo della traccia in riproduzione.
QString totalTime() | Restituisce il titolo della traccia in riproduzione (formato [h:]mm:ss).
QString track() | Restituisce il numero di traccia.
QString type() | Restituisce il tipo di file.
QString year() | Restituisce l'anno della traccia in riproduzione.
void configEqualizer() | Commuta la finestra di configurazione dell'equalizzatore.
void enableDynamicMode(bool enable) | Attiva/Disattiva la modalità dinamica.
void enableOSD(bool enable) | Attiva/Disattiva la visualizzazione dell'OSD.
void enableRandomMode(bool enable) | Attiva/Disattiva la modalità casuale.
void enableRepeatPlaylist(bool enable) | Attiva/Disattiva la ripetizione della scaletta.
void enableRepeatTrack(bool enable) | Attiva /Disattiva la ripetizione della traccia.
void mediaDeviceMount() | Imposta il comando usato per montare il dispositivo multimediale.
void mediaDeviceUmount() | Imposta il comando utilizzato per smontare il dispositivo multimediale.
void mute() | Commuta il silenzio.
void next() | Equivale alla pressione del pulsante "Successivo".
void pause() | Equivale alla pressione del pulsante "Pausa".
void play() | Equivale alla pressione del pulsante "Riproduci".
void playPause() | Commuta lo stato riproduzione/pausa (indicato per utenti tastiere mm)
void prev() | Equivale alla pressione del pulsante "Precedente".
void queueForTransfer( KURL url ) | Accoda file per il trasferimento al dispositivo multimediale.
void seek(int s) | Ricerca di una traccia per posizione in secondi.
void seekRelative(int s) | Ricerca di una posizione relativa alla posizione della traccia attuale.
void setEqualizer(int, int, int, int, int, int, int, int, int, int, int) | Imposta le bande dell'equalizzatore
void setEqualizerEnabled( bool active ) | Commuta l'equalizzatore.
void setEqualizerPreset( QString name ) | Configura le preimpostazioni dell'equalizzatore
void setLyricsByPath( QString url, QString lyrics ) | Imposta i testi di una traccia in base al percorso.
void setScore( int score ) | Imposta il punteggio della traccia in riproduzione.
void setScoreByPath( QString url, int score ) | Imposta il punteggio di una traccia in base al percorso.
void setVolume(int volume) | Imposta il volume in un intervallo tra 0-100%.
void showBrowser( QString browser ) | Mostra i navigatori nella finestra della scaletta.
void showOSD() | Mostra la visualizzazione OSD sullo schermo.
void stop() | Equivale alla pressione del pulsante "Interrompi".
void transferDeviceFiles() | Trasferisci i file al dispositivo multimediale.
void volumeDown() | Riduci il volume di una misura ragionevole.
void volumeUp() | Aumenta il volume di una misura ragionevole.

### dcop amarok playlist

Chiamata DCOP | Azione
--- | ---
int getActiveIndex() | Restituisce l'indice dell'attuale traccia attiva. -1 in mancanza.
int getTotalTrackCount() | Restituisce il numero di tracce nella scaletta. 0 in mancanza.
QString saveCurrentPlaylist() | Salva la scaletta attuale come current.xml e restituisce il percorso.
void addMedia( KURL ) | Aggiungi il media audio specificato dall'url.
void addMediaList( KURL::List ) | Aggiungi alcuni media audio specificato dall'url.
void clearPlaylist() | Svuota la scaletta.
void playByIndex(int) | Inizia la riproduzione della traccia all'indice specificato.
void playMedia( KURL ) | Aggiungi il media audio specificato dall'url.
void popupMessage( QString) | Mostra un messaggio a comparsa temporaneo.
void removeCurrentTrack() | Rimuove la traccia attuale dalla scaletta.
void repopulate() | Ripopola la scaletta con tracce casuali.
void saveM3u( QString path, bool relativePaths) | Salva la scaletta attuale come m3u.
void setStopAfterCurrent( bool ) | Abilita/Disabilita la funzionalità "Interrompi dopo la traccia attuale".
void shortStatusMessage( QString) | Mostra un messaggio temporaneo nella barra di stato.
void shufflePlaylist() | Mescola la scaletta.
void togglePlaylist() | Commuta la finestra della scaletta.

### dcop amarok playlistbrowser

Chiamata DCOP | Azione
--- | ---
void addPodcast( QString ) | Aggiungi una voce podcast al navigatore delle scalette.
void scanPodcasts() | Analizza tutti i podcast per aggiornamenti.
void addPlaylist( QString ) | Aggiungi una scaletta al navigatore delle scalette.

### dcop amarok script

Chiamata DCOP | Azione
--- | ---
bool runScript( QString name) | Avvia lo script con il dato nome. Restituisce vero se avviene correttamente.
bool stopScript( QString name) | Ferma lo script con il dato nome. Restituisce vero se avviene con successo.
QStringList listRunningScripts() | Restituisce un elenco degli script attualmente in esecuzione.
void addCustomMenuItem(QString submenu, QString itemTitle ) | Abilita e imposta il titolo dell'elemento di menu personalizzato.
void removeCustomMenuItem(QString submenu, QString itemTitle ) | Rimuove l'elemento di menu personalizzato.
QString readConfig( QString key) | Restituisce un valore di configurazione AmarokConfig dalla data chiave.

## Opzioni linea di comando

Amarok supporta l'uso delle opzioni standard da linea comando di Qt e kde. Amarok ha inoltre le proprie opzioni specifiche.

Le opzioni Qt e kde:

Opzione | Azione
--- | ---
--help | Mostra l'aiuto sulle opzioni.
--help-qt | Mostra le opzioni specifiche di Qt.
--help-kde | Mostra le opzioni specifiche di KDE.
--help-all | Mostra tutte le opzioni.
--author | Mostra le informazioni dell'autore.
-v, --version | Mostra le informazioni della versione.
--license | Mostra le informazioni della licenza.

Le opzioni di Amarok:

Le opzioni di &amarok; sono pensate per essere usate mentre &amarok; è in funzione.

Opzione | Azione
--- | ---
-r, --previous | Salta alla traccia precedente nella scaletta.
-p, --play | Inizia a riprodurre la scaletta attuale.
-s, --stop | Ferma la riproduzione.
--pause | Mette in pausa la riproduzione.
-f, --next | Salta alla traccia successiva nella scaletta.
-a, --append | Aggiungi file/URL alla scaletta.
-e, --enqueue | Vedi append, disponibile per retro compatibilità.
--queue | Accoda file/URL dopo la traccia in riproduzione.
-m, --toggle-playlist-window | Attiva/disattiva la finestra della scaletta.
--wizard | Lancia l'assistente del primo avvio.
--engine "name" | Avvia &amarok; con il motore "name".

## Scrivere script

Scrivere script permette di estendere facilmente &amarok; senza cambiare il codice principale. Gli script sono simili ai plugin ma, invece di una API dedicata, usano l'interfaccia DCOP di &amarok; per comunicare. Ciò rende possibile scrivere script in quasi qualsiasi linguaggio di programmazione come Ruby, Python o PHP. Non solo si possono creare script nel classico linguaggio di programmazione, ma anche in linguaggi compilati come C++ o C. In aggiunta, &amarok; può notificare agli script eventi speciali e farli reagire di conseguenza. Questo sistema di notifiche verrà spiegato nel seguito di questa sezione.

### Binding

È possibile scrivere semplici script che non necessitano dell'interazione dell'utente ed è anche possibile creare script con comode GUI che funzionino come piccole applicazioni singole. Per la programmazione delle GUI si può usare uno dei molti binding che KDE offre, per esempio RubyQT, una libreria Qt binding per Ruby. Tuttavia, vale la pena notare che non ogni utente ha tutti i binding disponibili installati. Se si decide di usarne uno, provare ad usarne uno di larga diffusione (p.e. RubyQt o PyQt).

Per fornire delle informazioni quando uno script non funziona per una dipendenza mancante, controllare che nel proprio script che il modulo che si vuole includere esista realmente. Se la dipendenza manca, si potrebbe intercettare l'errore e mostrare una finestra di informazione usando lo strumento da linea di comando "kdialog" in modo che l'utente capisca perché lo script fallisce.

Questo esempio mostra come intercettare una dipendenza mancante in Ruby:

    begin
           require 'Korundum'
    rescue LoadError
           error = 'Korundum (KDE bindings for ruby) from kdebindings v3.4 is required for this script.'
           `kdialog --sorry '#{error}'`
           exit
    end

### Per iniziare: i modelli

&amarok; fornisce modelli di script per numerose linguaggi nella cartella `script/templates/`. Si possono usare come base per propri script ed estenderli con le funzionalità di cui si necessita. Si noterà che lo scripting è attualmente abbastanza diretto. Se ad esempio si conosce un po' di programmazione in python, realizzare il proprio script non richiederà molto tempo.

### Controllare &amarok; con DCOP

Gli script possono controllare Amarok richiamando alcune delle sue funzioni DCOP. Il modo più semplice per invocare una funzione DCOP è usare lo strumento da linea di comando "dcop", che fa parte di ogni distribuzione KDE.

Questo è un esempio per aumentare il volume principale:

    dcop amarok player volumeUp

La maggior parte dei linguaggi di scripting permette di eseguire programmi esterni con una funzione tipo exec(). In questa maniera lo strumento "dcop" può essere invocato facilmente. Questo è un semplice esempio in Python:

    import os
     os.system("dcop amarok player volumeDown")

### Notifiche

&amarok; invia notifiche a tutti gli script attivi scrivendo stringhe sui loro canale stdin. Lo script dovrebbe quindi costantemente controllare stdin e reagire di conseguenza a ciascuno degli eventi possibili. Gli script possono anche scegliere ignorare tutti gli eventi che per cui non hanno funzioni.

Le seguenti notifiche vengono inviate a &amarok;:

    configure
    Dice allo script di mostrare la propria finestra di configurazione. Lo script
    deve gestire archiviazione e caricamento delle opzioni di configurazione
    in proprio. Quando uno script viene avviato, Amarok imposta la propria
    cartella di lavoro in quella dove tutti i dati dovrebbero essere archiviati.

    engineStateChange:empty|idle|paused|playing
    Segnala una variazione nello stato del motore.

    trackChange
    Segnala l'inizio di una nuova traccia. Lo script può allora usare le funzioni
    DCOP per richiedere ulteriori informazioni sulla traccia, es. meta-informazioni
    e lunghezza.

    volumeChangenewVolume
    Segnala un cambiamento nel livello del volume principale. Il volume è un intero compreso
    tra 0 e 100.

    customMenuClicked:submenu itemTitle paths
    Restituisce il percorso dei file selezionati nella scaletta quando l'elemento del menu
    contestuale della scaletta personalizzato viene premuto. submenu e itemTitle
    vengono anche restituiti per scopi di identificazione nel caso in cui uno
    script stia in ascolto per notifiche multiple.
    Per inserire una voce nel menu contestuale bisogna usare la funzione DCOP
    'dcop amarok script addCustomMenuItem( submenu itemTitle )'. Per rimuovere
    una voce del menu contestuale bisogna usare la funzione DCOP
    'dcop amarok script removeCustomMenuItem( submenu itemTitle )'.

### Interruzione script

Prima che &amarok; si chiuda, o quando l'utente ferma uno script con il gestore degli script, &amarok; invia il segnale SIGTERM allo script. Il segnale può essere usato per fare pulizia, come salvataggio di dati o impostazioni di configurazione.

### Pacchetti

Il gestore degli script di &amarok; è in grado di installare pacchetti di script scaricati dall'utente da un web server. Normalmente si tratta di pacchetti tarball (.tar), opzionalmente compressi con bzip2 (.bz2). Si raccomanda caldamente di usare un nome file del tipo myscript.amarokscript.tar.bz2, in modo che l'utente possa facilmente identificare il pacchetto come uno script per Amarok.

&amarok; 1.3 accetterà solamente pacchetti di script con l'estensione amarokscript, in modo da usarlo più facilmente fin da subito.

Il contenuto dei pacchetti tarball deve essere organizzato come segue:

    myscript/
       README
       myscript.py (executable)
       somemodule.py
       foo.data
       ...

### Permessi dei file

Lo script principale deve avere i permessi di esecuzione (+x) impostati, mentre moduli addizionali che vengono caricati dallo script possono non esserlo. Per preservare i permessi dei file nel tarball bisogna usare tar con l'opzione -p:

    tar -cf myscript.amarokscript.tar -p myscript

&amarok; non sarà in grado di installare lo script se i permessi non sono correttamente impostati.

### Distribuzione

Quando il pacchetto è terminato, si può inviarlo a www.kde-apps.org, ed aggiungere il collegamento nella Pagina Wiki degli script di &amarok;. Per la voce in kde-apps si dovrebbe usare la categoria &amarok; Scripts.