Der Content-Hub - Tipps und Tricks#

../../_images/01.png

Content Hub: Teilen-Seite#

In Ubuntu Touch sind alle Apps eingeschränkt. Um Dateien zwischen ihnen auszutauschen gibt es den Content-Hub, ein Teil des Betriebssystems der sich um Datei-Import, -Export und -Teilen kümmert.

Verschiedene Möglichkeiten um Inhalte zu teilen#

Wie wir in der Content Hub-Dokumentation sehen können, gibt es verschiedene Möglichkeiten, wie die Datei geteilt werden kann:

  • ContentHandler.Source (Die ausgewählte App stellt eine zu importierende Datei bereit)

  • ContentHandler.Destination (Die ausgewählte App ist das Ziel der exportierten Datei)

  • ContentHandler.Share (Die ausgewählte App ist das Ziel der exportierten Datei, welche dann extern freigegeben wird)

../../_images/12.svg

Importieren#

../../_images/02.png

Webapp Ersteller im OpenStore#

Wenn wir uns den Code von Webapp Creator ansehen, finden wir den Code zum Importieren eines Bildes, das als Symbol verwendet werden soll. Wenn Sie auf den Platzhalter tippen, öffnet sich der Content Hub, über den wir auswählen können, woher das Bild importiert werden soll (siehe Quellcode des Webapp Creators <https://gitlab.com/cibersheep/webapp-creator/blob/master/webapp-creator/app/ImportPage.qml#L38>``_)

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

ContentPeerPicker ist das Element, das die App zeigt.

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

contentType wird in Main.qml als ContentType.Pictures übergeben. Wir werden also nur Apps sehen, aus denen wir nur Bilder importieren können. handler wird in der gleichen Zeile wie ContentHandler.Source übergeben. Da wir ein Bild aus der im Content Hub ausgewählten App importieren wollen.

Exportieren#

../../_images/04.png

Gelek im OpenStore#

In Gelek werden wir mit einigen gespeicherten Spielen enden, die wir auf unserem Gerät speichern oder mit uns selbst teilen wollen (in Telegram und dann auf unserem Computer speichern).

../../_images/05.png

Wenn Sie auf das Download-Symbol tippen, erhalten Sie einen Content Hub zum Speichern der Spieldatei (das eigentlich ein Export ist).

Die Spieldatei ist eine Datei vom Typ glksave. Wir werden Content Hub mitteilen, dass wir eine Datei vom Typ Alle senden (``Siehe den Code der Installationsseite <https://gitlab.com/cibersheep/gelek/blob/master/app/InstallPage.qml#L38>``_).

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

    onPeerSelected: {

contentType ist ContentType.All, daher werden wir nur Anwendungen sehen, die in der Lage sind, nicht markierte Dateitypen zu empfangen. handler ist ContentHandler.Destination, daher sollte die ausgewählte App das gespeicherte Spiel speichern.

Wenn wir auf den Dateimanager tippen, speichern wir das gespeicherte Spiel in dem von uns gewählten Ordner.

Teilen#

Ebenso können Sie das gespeicherte Spiel per Telegram an uns senden (siehe Quellcode der Webapp Creator Import Page <https://gitlab.com/cibersheep/webapp-creator/blob/master/webapp-creator/app/ImportPage.qml#L38>``_). Das Teilen ist gleichbedeutend dem Exportieren, außer dass die Ziel-App den Inhalt möglicherweise extern freigibt (über Telegram oder Textnachricht, zum Beispiel).

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

    onPeerSelected: {

Der einzige Unterschied zwischen diesem und dem vorherigen Code besteht darin, dass handler jetzt ContentHandler.Share ist.

Warte einen Moment. Warum die verschiedenen Apps?#

../../_images/08.png

Content Hub: Exportieren vs. Teilen#

Jeder Entwickler kann die Regeln festlegen, die jede App in Bezug auf den Content Hub befolgen würde. Warum wird der OpenStore als Ziel eines Exports angezeigt?

Schauen wir uns die manifest.json an

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

Der obige Code definiert, dass die Hooks für die App mit dem Namen "openstore"` in Bezug auf den "content-hub"` die Regeln befolgen sollen, die in openstore-contenthub.json definiert sind

{
    "destination": [
        "all"
    ]
}

Das bedeutet, dass der OpenStore das Ziel für alle ContentTypes ist.

Was ist mit uMatriks? Betrachten wir das content-hub.json

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

Mit diesem Beispiel können uMatriks also das Ziel, die Quelle und die Freigabe der App für alle Arten von „ContentType“ sein. Was ist mit den anderen Haken in der manifest.json? Das wird im nächsten Guide erläutert.