Пример использования QML-модуля Share
Для того, чтобы приложение могло быть отображено в диалоге Поделиться,
необходимо в desktop-файл добавить описания методов обмена данными.
Каждый метод должен быть указан в поле X-Share-Methods
и иметь свой собственный раздел [X-Share Method …]
в desktop-файле.
Название блока [X-Share Method …]
должно соответствовать названию в X-Share-Methods
.
Например, строке X-Share-Methods=images;
соотвествует раздел [X-Share Method images]
.
В блоке [X-Share Method …]
в поле Capabilities
указывается один или несколько mime-типов.
Несколько типов указываются через ";".
Примеры:
Capabilities=image/*
Capabilities=image/;video/
Краткое описание метода совместного доступа,
которое будет отображаться в диалоговом окне Поделиться,
можно указать в строке Description=
блока [X-Share Method …]
.
Например: Description=Image share demo
.
Описание может быть переведено на другие языки с помощью указания локали,
например, [ru_RU]
для русского языка.
Пример перевода: Description[ru]=Демо обмена изображениями
.
По умолчанию используется не локализованная версия из строки Description=
.
Если приложение обрабатывает список файлов,
необходимо в блоке [X-Share Method …]
указать флаг SupportsMultipleFiles=yes
.
Также этот флаг влияет на то, будет ли отображаться приложение в списке диалога Поделиться,
если пользователь хочет поделиться группой файлов.
Пример desktop-файла:
[Desktop Entry]
Type=Application
X-Nemo-Application-Type=silica-qt5
Icon=ru.auroraos.ShareDemo
Exec=/usr/bin/ru.auroraos.ShareDemo
Name=Share Demo
Name[ru]=Демо обмена
X-Share-Methods=images;
X-Maemo-Service=ru.auroraos.ShareDemo
X-Maemo-Method=ru.auroraos.ShareDemo.activateWindow
[X-Application]
Permissions=UserDirs
OrganizationName=ru.auroraos
ApplicationName=ShareDemo
ExecDBus=/usr/bin/org.ShareDemo --dbus-launch
[X-Share Method images]
Description=Image share demo
Description[ru]=Демо обмена изображениями
Capabilities=image/*
SupportsMultipleFiles=yes
Список зарегистрированных провайдеров для Share: /var/lib/sailfish-share/desktopfiles.list.
Ключ ExecDBus
используется для указания команды запуска приложения при запросе к соответствующей службе D-Bus.
Дополнительный аргумент --dbus-launch
позволяет определить, что запуск происходил именно через D-Bus.
Совместно с ключом ExecDBus
используются ключи X-Maemo-Service
и X-Maemo-Method
,
содержащие соответственно название службы и метод, вызываемый при обращении к службе.
Если данные ключи не будут указаны, произойдёт ошибка активации окна, выраженная следующим образом. При первом запуске приложения окно не будет создано, а также не произойдёт вызов совместного доступа. При повторном запуске приложение не будет запущено из-за наличия работающего экземпляра приложения в фоновом режиме (без окна активации).
В функции main
необходимо зарегистрировать службу D-Bus,
которая будет использоваться для активации приложения:
int main(int argc, char *argv[])
{
QScopedPointer<QGuiApplication> application(SailfishApp::application(argc, argv));
application->setOrganizationName(QStringLiteral("ru.auroraos"));
application->setApplicationName(QStringLiteral("ShareDemo"));
QScopedPointer<QQuickView> view(SailfishApp::createView());
view->setSource(SailfishApp::pathTo(QStringLiteral("qml/ShareDemo.qml")));
if (!application.arguments().contains("--dbus-launch"))
view->show();
QDBusConnection::sessionBus().registerService("ru.auroraos.ShareDemo");
return application->exec();
}
В ApplicationWindow
для каждого X-Share Method
необходимо добавить соответствующий ShareProvider
:
ApplicationWindow {
id: applicationWindow
initialPage: Component { ImagesPage { model: imagesModel } }
cover: Qt.resolvedUrl("cover/DefaultCoverPage.qml")
allowedOrientations: defaultAllowedOrientations
ListModel { id: imagesModel }
ShareProvider {
method: "images"
capabilities: ["image/*"]
onTriggered: {
imagesModel.clear()
for (var iResource = 0; iResource < resources.length; ++iResource)
imagesModel.append({ "filePath": resources[iResource].filePath })
applicationWindow.activate()
}
}
}