Content Hub - поради та підказки¶
Сторінка публікації Content Hub¶
Програми в Ubuntu Touch мають обмеження. Шлях обміну файлами між ними лежить через Content Hub, частину системи, яка опікується імпортом, експортом та обміном файлів.
Різні шляхи обміну контентом¶
Як можна побачити з Документації Content Hub, існує декілька шляхів для спільного доступу до файлів:
ContentHandler.Source(Обрана програма надасть файл для імпорту)ContentHandler.Destination(Обрана програма буде призначенням для експортованого файлу)ContentHandler.Share(Обрана програма буде призначенням для експортованого файлу, який буде потім експортований назовні)
Імпорт¶
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.
Експорт¶
Gelek в OpenStore¶
У Gelek ми закінчимо з деякими збереженими іграми, які ми хочемо зберегти на своєму пристрої або поділитися із собою (у Telegram та потім зберегти їх на ПК).
Дотиком на значок завантаження ми накажемо 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, так обрана програма повинна скопіювати збережену гру.
Дотиком по Файловому менеджеру ми скопіюємо збережену гру в обраній теці.
Зачекайте хвильку. Чому різні програми?¶
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? Про це йдеться у наступних поясненнях.