Hub dei contenuti - tips and tricks#

../../_images/01.png

Hub dei contenuti Pagina di condivisione#

Su Ubuntu Touch le app sono confinate. Il modo di condividere fie tra loro è attraverso il Content Hub, una parte del sistema che si occupa di importare, esportare e condividere file.

Modi diversi di condividere il contenuto#

Come possiamo vedere nella documentazionde del Content Hub, ci sono vari modi di gestire il file da condividere:

  • ContentHandler.Source (L’app selezionata verrà usata come sorgente del file importato)

  • ContentHandler.Destination (L’app selezionata verrà usata come destinazione del file esportato)

  • ContentHandler.Share (L’app selezionata sarà la destinazione per il file esportato, il quale sarà poi condiviso esternamente)

../../_images/12.svg

Importazione#

../../_images/02.png

Webapp Creator sull’OpenStore#

Cercando all’interno del codice di Webapp Creator, troveremo il codice per importare un’immagine da utilizzare come icona. Cliccando sul segnaposto si aprirà l’Hub dei Contenuti, che permetterà di scegliere la posizione dalla quale importare l’immagine (vedi il codice sorgente di Webapp Creator)

ContentPeerPicker {
    anchors { fill: parent; topMargin: picker.header.height }
    visible: parent.visible
    showTitle: false
    contentType: picker.contentType //ContentType.Pictures
    handler: picker.handler //ContentHandler.Source

ContentPeerPicker è l’elemento che mostra le app.

var importPage = mainPageStack.push(Qt.resolvedUrl("ImportPage.qml"),{"contentType": ContentType.Pictures, "handler": ContentHandler.Source})

contentType viene passato in Main.qml come ContentType.Pictures. Quindi, vedremo solo le applicazioni da cui possiamo importare solo immagini. handler viene passato nella stessa riga come ContentHandler.Source. Poiché vogliamo importare un’immagine dall’applicazione selezionata nell’Hub dei contenuti.

Esportazione#

../../_images/04.png

Gelek nell’OpenStore#

In Gelek, finiamo con alcuni giochi salvati che vogliamo salvare nel nostro dispositivo o condividere con noi stessi (in Telegram e poi salvarli al nostro computer).

../../_images/05.png

Cliccando sull’icona di download otterremo un Content Hub per salvare il file del gioco (che in pratica è un esportazione).

Il file del gioco è un file di tipo glksave. Diremo al Content Hub che stiamo inviando un file di tipo All (guardare la pagina di installazione).

ContentPeerPicker {
    anchors { fill: parent; topMargin: picker.header.height }
    visible: parent.visible
    showTitle: false
    contentType: ContentType.All
    handler: ContentHandler.Destination

    onPeerSelected: {

contentType è ContentType.All, quindi vedremo solo app capaci di ricevere file di tipo non definito. handler è ContentHandler.Destination, quindi l’app selezionata dovrebbe memorizzare il gioco salvato.

Cliccando sul File Manager salveremo il gioco nella cartella da noi scelta.

Condivisione#

In maniera simile, cliccando sull’icona di condivisione potremo inviare a noi stessi tramite Telegram il gioco salvato (vedi il codice sorgente di Webapp Creator Import Page). Condividere è simile all’esportazione, con la differenza che l’app di destinazione può condividere il contenuto esternamente (per esempio, attraverso Telegram o messaggi di testo).

ContentPeerPicker {
    anchors { fill: parent; topMargin: picker.header.height }
    visible: parent.visible
    showTitle: false
    contentType: picker.contentType //ContentType.Pictures
    handler: picker.handler //ContentHandler.Source

    onPeerSelected: {

L’unica differenza tra questo e il codice precedente è che handler è ContentHandler.Share.

Aspetta un attimo. Perche app differenti?#

../../_images/08.png

Hub dei contenuti: Esportazione e condivisione#

Ogni sviluppatore può decidere le regole che ogni applicazione deve seguire in relazione al Content Hub. Perché OpenStore è indicato come destinazione di un’esportazione?

Controlliamo il suo manifest.json

"hooks": {
    "openstore": {
        "apparmor": "openstore/openstore.apparmor",
        "desktop": "openstore/openstore.desktop",
        "urls": "openstore/openstore.url-dispatcher",
        "content-hub": "openstore/openstore-contenthub.json"
    }
},

Il codice precedente definisce che gli hook per l’applicazione chiamata "openstore" in relazione al "content-hub" devono seguire le regole definite in openstore-contenthub.json

{
    "destination": [
        "all"
    ]
}

Questo significa che l’OpenStore sarà la destinazione per tutti i ContentTypes.

A proposito di uMatriks? Vediamo il suo content-hub.json

{
    "destination": [
        "pictures",
        "documents",
        "videos",
        "contacts",
        "music"
    ],
    "share": [
        "pictures",
        "documents",
        "videos",
        "contacts",
        "music"
    ],
    "source": [
        "pictures",
        "documents",
        "videos",
        "contacts",
        "music"
    ]
}

Quindi, con questo esempio, uMatriks potrà essere l” app di destinazione, sorgente e consivisione per tutti i tipi di ContentType. Cosa approposito degli altri hooks nel manifest.json? Questo sarà discusso nella prossima guida.