Content Hub - поради та підказки

../../_images/01.png

Сторінка публікації Content Hub

Програми в Ubuntu Touch мають обмеження. Шлях обміну файлами між ними лежить через Content Hub, частину системи, яка опікується імпортом, експортом та обміном файлів.

Різні шляхи обміну контентом

Як можна побачити з Документації Content Hub, існує декілька шляхів для спільного доступу до файлів:

  • ContentHandler.Source (Обрана програма надасть файл для імпорту)

  • ContentHandler.Destination (Обрана програма буде призначенням для експортованого файлу)

  • ContentHandler.Share (Обрана програма буде призначенням для експортованого файлу, який буде потім експортований назовні)

../../_images/12.svg

Імпорт

../../_images/02.png

Webapp Creator в OpenStore

Дивлячись на код Webapp Creator, можна знайти код для імпорту зображення для значка. Дотиком по ньому відкриє Content Hub, який надасть можливість вибрати зображення (див. джерельний код 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 є елементом, який показує програми.

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

contentType передається до Main.qml як ContentType.Pictures. Отже, ми побачимо тільки ті програми, з яких можна імпортувати файли. handler передається у тому самому рядку як ContentHandler.Source. Тому що ми хочемо імпортувати зображення з програми, вибраної у Content Hub.

Експорт

../../_images/04.png

Gelek в OpenStore

У Gelek ми закінчимо з деякими збереженими іграми, які ми хочемо зберегти на своєму пристрої або поділитися із собою (у Telegram та потім зберегти їх на ПК).

../../_images/05.png

Дотиком на значок завантаження ми накажемо Content Hub зберегти ігровий файл (що насправді є експортом).

Ігровий файл — це файл типу glksave. Ми скажемо Content Hub, що хочемо надіслати файл типу All (всі) (див. код сторінки інсталяції).

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

    onPeerSelected: {

contentType — це ContentType.All, так ми побачимо лише програми, здатні отримувати невказані типи файлів. handler — це ContentHandler.Destination, так обрана програма повинна скопіювати збережену гру.

Дотиком по Файловому менеджеру ми скопіюємо збережену гру в обраній теці.

Спільний доступ

Так само, дотик на значок спільного доступу дозволить нам надіслати збережену гру через Telegram собі (див. початковий код сторінки імпорту Webapp Creator). Спільний доступ схожий на експорт, за виключенням того, що програма призначення може ділитися контентом назовні (наприклад, через Telegram або у текстовому повідомленні).

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

    onPeerSelected: {

Єдина відмінність між цим та попереднім кодом це те, що handler — це ContentHandler.Share.

Зачекайте хвильку. Чому різні програми?

../../_images/08.png

Content Hub: Експорт та Спільний доступ

Кожен розробник може встановити правила, за якими кожна програма може діяти з Content Hub. Чому призначення для експорту — це OpenStore?

Нумо глянемо на його manifest.json

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

Код вище визначає, що перехоплення (хуки) для програми з назвою "openstore", пов’язані з "content-hub" повинні дотримуватися правил, визначених у openstore-contenthub.json

{
    "destination": [
        "all"
    ]
}

Це означає, що OpenStore буде призначенням для усіх ContentTypes.

Що там з uMatriks? Поглянемо на його content-hub.json

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

З цим прикладом uMatriks може бути призначенням, джерелом та програмою для спільного доступу для усіх типів ContentType. Що з іншими хуками у manifest.json? Про це йдеться у наступних поясненнях.