Content hub - полезные советы¶
Cтраница для публикации¶
В Ubuntu Touch возможности приложении сильно ограничены. Обмен файлами между ними осуществляется через Content Hub, это часть операционной системы, которая занимается импортом, экспортом и совместным использованием файлов.
Несколько способов поделиться контентом¶
Как можно узнать из документации к Content Hub, есть несколько способов совместного доступа к файлам:
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)
Импортирование¶
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, а затем перенести их на настольный ПК).
Удерживая курсор на иконке «Download» , мы заставим 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 is ContentType.All, so we will only see apps which are able to receive unmarked file types. handler is ContentHandler.Destination, so the app selected should store the saved game.
Нажатие вкладки «File Manager» переместит сохраненную игру в папку, которую мы выберем.
Подождите, почему приложения разные?¶
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"
}
},
The above code defines that the hooks for the app named "openstore" in relation to the "content-hub" should follow the rules defined in 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. Что можно сказать о других hooks в файле manifest.json? Об этом рассказывается в следующей части руководства.