Centro de contenido - consejos y trucos#

../../_images/01.png

Página para compartir del centro de contenido#

Las aplicaciones están confinadas en Ubuntu Touch. La manera de compartir archivos entre ellas es a través del centro de contenido, una parte del sistema que se encarga de importar, exportar y compartir archivos.

Diferentes maneras de compartir contenido#

Como podemos ver en la documentación del centro de contenido, existen varias formas de manejar el archivo que se va a compartir:

  • ContentHandler.Source (The selected app will provide a file to be imported)

  • ContentHandler.Destination (The selected app will be the destination for the exported file)

  • ContentHandler.Share (The selected app will be the destination for the exported file, which will then be shared externally)

../../_images/12.svg

Importar#

../../_images/02.png

Webapp Creator en OpenStore#

Mirando en el código de Webapp Creator, encontraremos el código para importar una imagen para usarla como icono. Pulsando en el marcador de posición se abrirá el centro de contenido que nos permitirá elegir desde dónde importar la imagen (ver el código fuente de 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 es el elemento que muestra las aplicaciones.

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

contentType se pasa en Main.qml como ContentType.Pictures. Así, solo veremos aplicaciones desde las que solo podemos importar imágenes. handler se pasa en la misma línea como ContentHandler.Source. Ya que queremos importar una imagen desde la aplicación seleccionada en el centro de contenido.

Exportar#

../../_images/04.png

Gelek en OpenStore#

En Gelek, vamos a terminar con algunos juegos salvados que queremos guardar en nuestro dispositivo o compartir con nosotros mismos (en Telegram y después guardarlos en nuestro ordenador).

../../_images/05.png

Pulsando en el icono de descarga obtendremos un gestor de contenido para guardar el archivo del juego (que en realidad es una exportación).

El archivo de juego es un archivo del tipo glksave. Diremos al centro de contenido que estamos enviando un archivo del tipo All (ver el código de la página de instalación).

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

    onPeerSelected: {

contentType es ContentType.All, así que solo veremos aplicaciones que pueden recibir tipos de archivos sin marcar. handler es ContentHandler.Destination, así que la aplicación seleccionada debería almacenar el juego guardado.

Pulsando en el gestor de archivos guardaremos los juegos guardados en la carpeta que elijamos.

Compartir#

Similarly, tapping on the share icon will allow us to send the saved game through Telegram to ourselves (see the Webapp Creator Import Page source code). Sharing is similar to exporting, except the destination app may share the content externally (for example, over Telegram or text message).

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

    onPeerSelected: {

La única diferencia entre esto y el código previo es que handler es ContentHandler.Share.

Espera un momento. ¿Por qué aplicaciones diferentes?#

../../_images/08.png

Centro de contenido: Exportar frente a compartir#

Cada desarrollador puede decidir las normas que cada aplicación seguirá en relación con el centro de contenido. ¿Por qué aparece OpenStore como el destino de una exportación?

Comprobemos su manifest.json

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

El código anterior define que los ganchos para la aplicación llamada «openstore» en relación al «content-hub» debería de seguir las reglas definidas en openstore-contenthub.json

{
    "destination": [
        "all"
    ]
}

Esto significa que OpenStore será el destino para todos los ContentTypes.

¿Qué ocurre con uMatriks? Veamos su content-hub.json

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

Así, con este ejemplo, uMatriks podrá ser el destino, origen y aplicación para compartir para toda clase de ContentType. ¿Qué ocurre con los otros ganchos en el manifest.json? Eso se analiza en la siguiente guía.