[app] Register OpenRepos app as a file handler
This commit is contained in:
parent
7378e3982e
commit
fdca2d959e
10 changed files with 261 additions and 22 deletions
38
app/app.pro
38
app/app.pro
|
@ -51,7 +51,7 @@ LIBS += \
|
||||||
|
|
||||||
OTHER_FILES += \
|
OTHER_FILES += \
|
||||||
icons/harbour-books.svg \
|
icons/harbour-books.svg \
|
||||||
harbour-books.desktop \
|
*.desktop \
|
||||||
qml/*.qml \
|
qml/*.qml \
|
||||||
qml/*.js \
|
qml/*.js \
|
||||||
qml/images/* \
|
qml/images/* \
|
||||||
|
@ -134,16 +134,6 @@ SOURCES += \
|
||||||
src/ZLApplication.cpp \
|
src/ZLApplication.cpp \
|
||||||
src/ZLibrary.cpp
|
src/ZLibrary.cpp
|
||||||
|
|
||||||
# Some libraries are not allowed in harbour
|
|
||||||
openrepos {
|
|
||||||
LIBS += -lexpat -lmagic -ludev
|
|
||||||
} else {
|
|
||||||
SOURCES += \
|
|
||||||
stubs/libexpat.c \
|
|
||||||
stubs/libmagic.c \
|
|
||||||
stubs/libudev.c
|
|
||||||
}
|
|
||||||
|
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
src/BooksBook.h \
|
src/BooksBook.h \
|
||||||
src/BooksBookModel.h \
|
src/BooksBookModel.h \
|
||||||
|
@ -174,6 +164,23 @@ HEADERS += \
|
||||||
src/BooksTypes.h \
|
src/BooksTypes.h \
|
||||||
src/BooksUtil.h
|
src/BooksUtil.h
|
||||||
|
|
||||||
|
# Some libraries are not allowed in harbour
|
||||||
|
openrepos {
|
||||||
|
LIBS += -lexpat -lmagic -ludev
|
||||||
|
} else {
|
||||||
|
SOURCES += \
|
||||||
|
stubs/libexpat.c \
|
||||||
|
stubs/libmagic.c \
|
||||||
|
stubs/libudev.c
|
||||||
|
}
|
||||||
|
|
||||||
|
# D-Bus handler is only used in OpenRepos build
|
||||||
|
openrepos {
|
||||||
|
QT += dbus
|
||||||
|
HEADERS += src/BooksDBus.h
|
||||||
|
SOURCES += src/BooksDBus.cpp
|
||||||
|
}
|
||||||
|
|
||||||
# harbour-lib
|
# harbour-lib
|
||||||
|
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
|
@ -245,10 +252,11 @@ settings_images.files = settings/images/*.svg
|
||||||
settings_images.path = /usr/share/$${TARGET}/settings/images/
|
settings_images.path = /usr/share/$${TARGET}/settings/images/
|
||||||
INSTALLS += settings_images
|
INSTALLS += settings_images
|
||||||
|
|
||||||
# Desktop file
|
# File handler
|
||||||
equals(PREFIX, "openrepos") {
|
openrepos {
|
||||||
desktop.extra = sed s/harbour/openrepos/g harbour-$${NAME}.desktop > $${TARGET}.desktop
|
service.files = $${TARGET}.service
|
||||||
desktop.CONFIG += no_check_exist
|
service.path = /usr/share/dbus-1/services/
|
||||||
|
INSTALLS += service
|
||||||
}
|
}
|
||||||
|
|
||||||
# Translations
|
# Translations
|
||||||
|
|
26
app/openrepos-books.desktop
Normal file
26
app/openrepos-books.desktop
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
[Desktop Entry]
|
||||||
|
Type=Application
|
||||||
|
Name=Books
|
||||||
|
Name[de]=Bücher
|
||||||
|
Name[es]=Libros
|
||||||
|
Name[fi]=Kirjat
|
||||||
|
Name[hu]=Könyvek
|
||||||
|
Name[nl]=Boeken
|
||||||
|
Name[pt_BR]=Livros
|
||||||
|
Name[ru]=Книги
|
||||||
|
Name[sv]=Böcker
|
||||||
|
Comment=E-Book Reader
|
||||||
|
Icon=openrepos-books
|
||||||
|
Exec=openrepos-books %f
|
||||||
|
MimeType=application/epub+zip;application/x-fictionbook+xml;
|
||||||
|
X-Nemo-Application-Type=silica-qt5
|
||||||
|
X-Maemo-Service=openrepos.books
|
||||||
|
X-Maemo-Object-Path=/
|
||||||
|
X-Maemo-Method=openrepos.books.Open
|
||||||
|
|
||||||
|
[X-Sailjail]
|
||||||
|
Sandboxing=Disabled
|
||||||
|
|
||||||
|
[X-HarbourBackup]
|
||||||
|
BackupPathList=.local/share/openrepos-books/:Documents/Books/
|
||||||
|
BackupConfigList=/apps/openrepos-books/
|
3
app/openrepos-books.service
Normal file
3
app/openrepos-books.service
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
[D-BUS Service]
|
||||||
|
Name=openrepos.books
|
||||||
|
Exec=/usr/bin/invoker --type=silica-qt5 --desktop-file=openrepos-books.desktop -n -d 5 /usr/bin/openrepos-books
|
122
app/src/BooksDBus.cpp
Normal file
122
app/src/BooksDBus.cpp
Normal file
|
@ -0,0 +1,122 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2021 Jolla Ltd.
|
||||||
|
* Copyright (C) 2021 Slava Monich <slava.monich@jolla.com>
|
||||||
|
*
|
||||||
|
* You may use this file under the terms of the BSD license as follows:
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer
|
||||||
|
* in the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
* 3. Neither the names of the copyright holders nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "BooksDefs.h"
|
||||||
|
#include "BooksDBus.h"
|
||||||
|
|
||||||
|
#include "HarbourDebug.h"
|
||||||
|
|
||||||
|
#include <QDBusConnection>
|
||||||
|
|
||||||
|
// ==========================================================================
|
||||||
|
// BooksDBus::Adaptor
|
||||||
|
// ==========================================================================
|
||||||
|
|
||||||
|
class BooksDBus::Adaptor : public QDBusAbstractAdaptor
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
Q_CLASSINFO("D-Bus Interface", BOOKS_DBUS_INTERFACE)
|
||||||
|
|
||||||
|
public:
|
||||||
|
Adaptor(QObject* aParent);
|
||||||
|
|
||||||
|
void open(QString aPathOrUrl);
|
||||||
|
|
||||||
|
public Q_SLOTS:
|
||||||
|
void Open(QString path);
|
||||||
|
void Open(QStringList args);
|
||||||
|
};
|
||||||
|
|
||||||
|
BooksDBus::Adaptor::Adaptor(QObject* aParent) :
|
||||||
|
QDBusAbstractAdaptor(aParent)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void BooksDBus::Adaptor::open(QString aPathOrUrl)
|
||||||
|
{
|
||||||
|
BooksDBus* publicObject = qobject_cast<BooksDBus*>(parent());
|
||||||
|
if (!aPathOrUrl.isEmpty()) {
|
||||||
|
static const QString fileUrlPrefix("file://");
|
||||||
|
if (aPathOrUrl.startsWith(fileUrlPrefix)) {
|
||||||
|
const QString path(aPathOrUrl.right(aPathOrUrl.length() -
|
||||||
|
fileUrlPrefix.length()));
|
||||||
|
if (!path.isEmpty()) {
|
||||||
|
HDEBUG(qPrintable(path));
|
||||||
|
Q_EMIT publicObject->openBook(path);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Assume it's a path
|
||||||
|
HDEBUG(qPrintable(aPathOrUrl));
|
||||||
|
Q_EMIT publicObject->openBook(aPathOrUrl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Q_EMIT publicObject->activate();
|
||||||
|
}
|
||||||
|
|
||||||
|
void BooksDBus::Adaptor::Open(QString aArg)
|
||||||
|
{
|
||||||
|
HDEBUG(aArg);
|
||||||
|
open(aArg);
|
||||||
|
}
|
||||||
|
|
||||||
|
void BooksDBus::Adaptor::Open(QStringList aArgs)
|
||||||
|
{
|
||||||
|
HDEBUG(aArgs);
|
||||||
|
open(aArgs.isEmpty() ? QString() : aArgs.at(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
// ==========================================================================
|
||||||
|
// BooksDBus
|
||||||
|
// ==========================================================================
|
||||||
|
BooksDBus::BooksDBus(QObject* aParent) :
|
||||||
|
QObject(aParent),
|
||||||
|
iAdaptor(new Adaptor(this))
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
BooksDBus* BooksDBus::create(QObject* aParent)
|
||||||
|
{
|
||||||
|
BooksDBus* handler = new BooksDBus(aParent);
|
||||||
|
QDBusConnection sessionBus(QDBusConnection::sessionBus());
|
||||||
|
if (sessionBus.registerObject("/", handler) &&
|
||||||
|
sessionBus.registerService(BOOKS_DBUS_SERVICE)) {
|
||||||
|
HDEBUG("Registered D-Bus handler");
|
||||||
|
return handler;
|
||||||
|
} else {
|
||||||
|
HDEBUG("Failed to registered D-Bus handler");
|
||||||
|
delete handler;
|
||||||
|
return Q_NULLPTR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#include "BooksDBus.moc"
|
56
app/src/BooksDBus.h
Normal file
56
app/src/BooksDBus.h
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2021 Jolla Ltd.
|
||||||
|
* Copyright (C) 2021 Slava Monich <slava.monich@jolla.com>
|
||||||
|
*
|
||||||
|
* You may use this file under the terms of the BSD license as follows:
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer
|
||||||
|
* in the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
* 3. Neither the names of the copyright holders nor the names of its
|
||||||
|
* contributors may be used to endorse or promote products derived
|
||||||
|
* from this software without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||||
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||||
|
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||||
|
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||||
|
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||||
|
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||||
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||||
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef BOOKS_DBUS_H
|
||||||
|
#define BOOKS_DBUS_H
|
||||||
|
|
||||||
|
#include <QDBusAbstractAdaptor>
|
||||||
|
|
||||||
|
class BooksDBus : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
BooksDBus(QObject* aParent);
|
||||||
|
|
||||||
|
public:
|
||||||
|
static BooksDBus* create(QObject* aParent);
|
||||||
|
|
||||||
|
Q_SIGNALS:
|
||||||
|
void openBook(QString aPath);
|
||||||
|
void activate();
|
||||||
|
|
||||||
|
private:
|
||||||
|
class Adaptor;
|
||||||
|
Adaptor* iAdaptor;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // BOOKS_DBUS_H
|
|
@ -37,12 +37,15 @@
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
|
||||||
#ifdef OPENREPOS
|
#ifdef OPENREPOS
|
||||||
|
# define BOOKS_DBUS_INTERFACE "openrepos.books"
|
||||||
# define BOOKS_APP_NAME "openrepos-books"
|
# define BOOKS_APP_NAME "openrepos-books"
|
||||||
# define BOOKS_SETTINGS_MENU false
|
# define BOOKS_SETTINGS_MENU false
|
||||||
#else
|
#else
|
||||||
# define BOOKS_APP_NAME "harbour-books"
|
# define BOOKS_APP_NAME "harbour-books"
|
||||||
# define BOOKS_SETTINGS_MENU true
|
# define BOOKS_SETTINGS_MENU true
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define BOOKS_DBUS_SERVICE BOOKS_DBUS_INTERFACE
|
||||||
#define BOOKS_DCONF_ROOT "/apps/" BOOKS_APP_NAME "/"
|
#define BOOKS_DCONF_ROOT "/apps/" BOOKS_APP_NAME "/"
|
||||||
#define BOOKS_DATA_ROOT "usr/share/" BOOKS_APP_NAME
|
#define BOOKS_DATA_ROOT "usr/share/" BOOKS_APP_NAME
|
||||||
#define BOOKS_QML_DIR BOOKS_DATA_ROOT "/qml"
|
#define BOOKS_QML_DIR BOOKS_DATA_ROOT "/qml"
|
||||||
|
|
|
@ -837,4 +837,11 @@ BooksSettings::orientation() const
|
||||||
return DEFAULT_ORIENTATION;
|
return DEFAULT_ORIENTATION;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
BooksSettings::setCurrentBookPath(QString aPath)
|
||||||
|
{
|
||||||
|
HDEBUG(aPath);
|
||||||
|
iPrivate->iCurrentBookPathConf->set(aPath);
|
||||||
|
}
|
||||||
|
|
||||||
#include "BooksSettings.moc"
|
#include "BooksSettings.moc"
|
||||||
|
|
|
@ -144,6 +144,9 @@ public:
|
||||||
|
|
||||||
Orientation orientation() const;
|
Orientation orientation() const;
|
||||||
|
|
||||||
|
public Q_SLOTS:
|
||||||
|
void setCurrentBookPath(QString aPath);
|
||||||
|
|
||||||
Q_SIGNALS:
|
Q_SIGNALS:
|
||||||
void fontSizeChanged();
|
void fontSizeChanged();
|
||||||
void nightModeBrightnessChanged();
|
void nightModeBrightnessChanged();
|
||||||
|
|
|
@ -74,6 +74,10 @@
|
||||||
# define TASK_QUEUE_TIMEOUT (10000)
|
# define TASK_QUEUE_TIMEOUT (10000)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef OPENREPOS
|
||||||
|
# include "BooksDBus.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
Q_DECL_EXPORT int main(int argc, char **argv)
|
Q_DECL_EXPORT int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
QGuiApplication* app = SailfishApp::application(argc, argv);
|
QGuiApplication* app = SailfishApp::application(argc, argv);
|
||||||
|
@ -137,15 +141,21 @@ Q_DECL_EXPORT int main(int argc, char **argv)
|
||||||
QVariant::fromValue(BOOKS_SETTINGS_MENU));
|
QVariant::fromValue(BOOKS_SETTINGS_MENU));
|
||||||
root->setContextProperty("Settings", settings.data());
|
root->setContextProperty("Settings", settings.data());
|
||||||
|
|
||||||
|
#ifdef BOOKS_DBUS_INTERFACE
|
||||||
|
BooksDBus* dbusHandler = BooksDBus::create(app);
|
||||||
|
if (dbusHandler) {
|
||||||
|
view->connect(dbusHandler, SIGNAL(activate()), SLOT(raise()));
|
||||||
|
settings->connect(dbusHandler, SIGNAL(openBook(QString)),
|
||||||
|
SLOT(setCurrentBookPath(QString)));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (argc > 1) {
|
if (argc > 1) {
|
||||||
const QString file(QString::fromLocal8Bit(argv[1]));
|
const QString file(QString::fromLocal8Bit(argv[1]));
|
||||||
if (QFile::exists(file)) {
|
if (QFile::exists(file)) {
|
||||||
BooksBook* book = BooksBook::newBook(file);
|
settings->setCurrentBookPath(file);
|
||||||
if (book) {
|
} else {
|
||||||
settings->setCurrentBook(book);
|
HWARN(qPrintable(file) << "doesn't exist");
|
||||||
book->requestCoverImage();
|
|
||||||
book->release();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -55,6 +55,7 @@ desktop-file-install --delete-original \
|
||||||
%{_datadir}/icons/hicolor/*/apps/%{name}.png
|
%{_datadir}/icons/hicolor/*/apps/%{name}.png
|
||||||
%{_datadir}/translations/%{name}*.qm
|
%{_datadir}/translations/%{name}*.qm
|
||||||
%{_datadir}/jolla-settings/entries/%{name}.json
|
%{_datadir}/jolla-settings/entries/%{name}.json
|
||||||
|
%{_datadir}/dbus-1/services/%{name}.service
|
||||||
|
|
||||||
%check
|
%check
|
||||||
make -C test test
|
make -C test test
|
||||||
|
|
Loading…
Reference in a new issue