Content hub - полезные советы¶
В Ubuntu Touch возможности приложении сильно ограничены. Обмен файлами между ними осуществляется через Content Hub, это часть операционной системы, которая занимается импортом, экспортом и совместным использованием файлов.
Несколько способов поделиться контентом¶
Как можно узнать из документации к Content Hub, есть несколько способов совместного доступа к файлам:
``ContentHandler.Source``(Выбранное приложение будет источником импортируемого файла)
``ContentHandler.Destination``(Выбранное приложение будет местом назначения экспортируемого файла)
``ContentHandler.Share``(Выбранное приложение будет местом назначения для экспортированного файла, который будет в общем доступе)
Импортирование¶
Мы изучим исходный текст 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 мы будем работать с некоторыми сохраненными играми, которые нужно хранить в нашем устройстве или поделиться с пользователями (через 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
- это``ContentType.All``, поэтому мы увидим только приложения, которые могут получать файлы с неуказанными типами. handler
- это ContentHandler.Destination
, поэтому выбранное приложение должно сохранять файл игры.
Нажатие вкладки «File Manager» переместит сохраненную игру в папку, которую мы выберем.
Подождите, почему приложения разные?¶
Каждый разработчик может самостоятельно определитьправила, по которым каждое приложение взаимодействует с 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"
}
},
Приведённый выше код показывает, что в приложении есть hooks "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
. Что можно сказать о других hooks в файле manifest.json
? Об этом рассказывается в следующей части руководства.