[app] A better way to use Permissions and MediaKey
It has a better chance to survive a Qt upgrade
This commit is contained in:
parent
6c75817c55
commit
fb8841294e
5 changed files with 162 additions and 101 deletions
|
@ -193,12 +193,10 @@ openrepos {
|
||||||
# harbour-lib
|
# harbour-lib
|
||||||
|
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
|
$$HARBOUR_INCLUDE_DIR/HarbourBase45.h \
|
||||||
$$HARBOUR_INCLUDE_DIR/HarbourColorEditorModel.h \
|
$$HARBOUR_INCLUDE_DIR/HarbourColorEditorModel.h \
|
||||||
$$HARBOUR_INCLUDE_DIR/HarbourDisplayBlanking.h \
|
$$HARBOUR_INCLUDE_DIR/HarbourDisplayBlanking.h \
|
||||||
$$HARBOUR_INCLUDE_DIR/HarbourJson.h \
|
$$HARBOUR_INCLUDE_DIR/HarbourJson.h \
|
||||||
$$HARBOUR_INCLUDE_DIR/HarbourMediaPlugin.h \
|
|
||||||
$$HARBOUR_INCLUDE_DIR/HarbourPluginLoader.h \
|
|
||||||
$$HARBOUR_INCLUDE_DIR/HarbourPolicyPlugin.h \
|
|
||||||
$$HARBOUR_INCLUDE_DIR/HarbourSystem.h \
|
$$HARBOUR_INCLUDE_DIR/HarbourSystem.h \
|
||||||
$$HARBOUR_INCLUDE_DIR/HarbourTask.h \
|
$$HARBOUR_INCLUDE_DIR/HarbourTask.h \
|
||||||
$$HARBOUR_INCLUDE_DIR/HarbourUtil.h
|
$$HARBOUR_INCLUDE_DIR/HarbourUtil.h
|
||||||
|
@ -207,13 +205,11 @@ HEADERS += \
|
||||||
$$HARBOUR_SRC_DIR/HarbourMce.h
|
$$HARBOUR_SRC_DIR/HarbourMce.h
|
||||||
|
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
|
$$HARBOUR_SRC_DIR/HarbourBase45.cpp \
|
||||||
$$HARBOUR_SRC_DIR/HarbourColorEditorModel.cpp \
|
$$HARBOUR_SRC_DIR/HarbourColorEditorModel.cpp \
|
||||||
$$HARBOUR_SRC_DIR/HarbourDisplayBlanking.cpp \
|
$$HARBOUR_SRC_DIR/HarbourDisplayBlanking.cpp \
|
||||||
$$HARBOUR_SRC_DIR/HarbourJson.cpp \
|
$$HARBOUR_SRC_DIR/HarbourJson.cpp \
|
||||||
$$HARBOUR_SRC_DIR/HarbourMce.cpp \
|
$$HARBOUR_SRC_DIR/HarbourMce.cpp \
|
||||||
$$HARBOUR_SRC_DIR/HarbourMediaPlugin.cpp \
|
|
||||||
$$HARBOUR_SRC_DIR/HarbourPluginLoader.cpp \
|
|
||||||
$$HARBOUR_SRC_DIR/HarbourPolicyPlugin.cpp \
|
|
||||||
$$HARBOUR_SRC_DIR/HarbourSystem.cpp \
|
$$HARBOUR_SRC_DIR/HarbourSystem.cpp \
|
||||||
$$HARBOUR_SRC_DIR/HarbourTask.cpp \
|
$$HARBOUR_SRC_DIR/HarbourTask.cpp \
|
||||||
$$HARBOUR_SRC_DIR/HarbourUtil.cpp
|
$$HARBOUR_SRC_DIR/HarbourUtil.cpp
|
||||||
|
|
|
@ -37,9 +37,6 @@ import Sailfish.Silica 1.0
|
||||||
import org.nemomobile.notifications 1.0
|
import org.nemomobile.notifications 1.0
|
||||||
import harbour.books 1.0
|
import harbour.books 1.0
|
||||||
|
|
||||||
//import Sailfish.Media 1.0 // Not allowed
|
|
||||||
//import org.nemomobile.policy 1.0 // Not allowed
|
|
||||||
|
|
||||||
import "harbour"
|
import "harbour"
|
||||||
|
|
||||||
Item {
|
Item {
|
||||||
|
@ -69,17 +66,42 @@ Item {
|
||||||
property bool isCurrentView
|
property bool isCurrentView
|
||||||
property bool pageActive
|
property bool pageActive
|
||||||
|
|
||||||
readonly property bool viewActive: pageActive && Qt.application.active && !!book
|
|
||||||
readonly property bool haveVolumeUpAction: Settings.volumeUpAction !== BooksSettings.ActionNone
|
|
||||||
readonly property bool haveVolumeDownAction: Settings.volumeDownAction !== BooksSettings.ActionNone
|
|
||||||
readonly property bool haveKeyAction: haveVolumeUpAction || haveVolumeDownAction
|
|
||||||
|
|
||||||
property var hapticFeedback
|
property var hapticFeedback
|
||||||
property var linkMenu
|
property var linkMenu
|
||||||
property var imageView
|
property var imageView
|
||||||
property var footnoteView
|
property var footnoteView
|
||||||
property var settingsComponent
|
property var settingsComponent
|
||||||
|
|
||||||
|
readonly property bool viewActive: pageActive && Qt.application.active && !!book
|
||||||
|
readonly property bool haveVolumeUpAction: Settings.volumeUpAction !== BooksSettings.ActionNone
|
||||||
|
readonly property bool haveVolumeDownAction: Settings.volumeDownAction !== BooksSettings.ActionNone
|
||||||
|
readonly property bool haveKeyAction: haveVolumeUpAction || haveVolumeDownAction
|
||||||
|
|
||||||
|
readonly property string mediaKeyQml: BooksUtil.mediaKeyQml
|
||||||
|
readonly property var permissions: Qt.createQmlObject(BooksUtil.permissionsQml, root, "Permissions")
|
||||||
|
readonly property var volumeUp: Qt.createQmlObject(mediaKeyQml, root, "VolumeKey")
|
||||||
|
readonly property var volumeDown: Qt.createQmlObject(mediaKeyQml, root, "VolumeKey")
|
||||||
|
|
||||||
|
Binding { target: permissions; property: "enabled"; value: viewActive && haveKeyAction }
|
||||||
|
Binding { target: volumeUp; property: "enabled"; value: viewActive && haveVolumeUpAction }
|
||||||
|
Binding { target: volumeUp; property: "key"; value: Qt.Key_VolumeUp }
|
||||||
|
Binding { target: volumeDown; property: "enabled"; value: viewActive && haveVolumeDownAction }
|
||||||
|
Binding { target: volumeDown; property: "key"; value: Qt.Key_VolumeDown }
|
||||||
|
|
||||||
|
Connections {
|
||||||
|
target: volumeUp
|
||||||
|
ignoreUnknownSignals: true
|
||||||
|
onPressed: performAction(Settings.volumeUpAction)
|
||||||
|
onRepeat: performAction(Settings.volumeUpAction)
|
||||||
|
}
|
||||||
|
|
||||||
|
Connections {
|
||||||
|
target: volumeDown
|
||||||
|
ignoreUnknownSignals: true
|
||||||
|
onPressed: performAction(Settings.volumeDownAction)
|
||||||
|
onRepeat: performAction(Settings.volumeDownAction)
|
||||||
|
}
|
||||||
|
|
||||||
function hideViews() {
|
function hideViews() {
|
||||||
if (linkMenu) linkMenu.hide()
|
if (linkMenu) linkMenu.hide()
|
||||||
if (imageView) imageView.hide()
|
if (imageView) imageView.hide()
|
||||||
|
@ -495,41 +517,4 @@ Item {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
MediaKey {
|
|
||||||
enabled: viewActive && haveVolumeUpAction
|
|
||||||
key: Qt.Key_VolumeUp
|
|
||||||
|
|
||||||
onPressed: volumeUpAction()
|
|
||||||
onRepeat: volumeUpAction()
|
|
||||||
|
|
||||||
function volumeUpAction() {
|
|
||||||
performAction(Settings.volumeUpAction)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
MediaKey {
|
|
||||||
enabled: viewActive && haveVolumeDownAction
|
|
||||||
key: Qt.Key_VolumeDown
|
|
||||||
|
|
||||||
onPressed: volumeDownAction()
|
|
||||||
onRepeat: volumeDownAction()
|
|
||||||
|
|
||||||
function volumeDownAction() {
|
|
||||||
performAction(Settings.volumeDownAction)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Permissions {
|
|
||||||
enabled: viewActive && haveKeyAction
|
|
||||||
autoRelease: true
|
|
||||||
applicationClass: "camera"
|
|
||||||
|
|
||||||
Resource {
|
|
||||||
id: volumeKeysResource
|
|
||||||
|
|
||||||
type: Resource.ScaleButton
|
|
||||||
optional: true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2015-2018 Jolla Ltd.
|
* Copyright (C) 2015-2022 Jolla Ltd.
|
||||||
* Copyright (C) 2015-2018 Slava Monich <slava.monich@jolla.com>
|
* Copyright (C) 2015-2022 Slava Monich <slava.monich@jolla.com>
|
||||||
*
|
*
|
||||||
* You may use this file under the terms of the BSD license as follows:
|
* You may use this file under the terms of the BSD license as follows:
|
||||||
*
|
*
|
||||||
|
@ -8,15 +8,15 @@
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
* are met:
|
* are met:
|
||||||
*
|
*
|
||||||
* * Redistributions of source code must retain the above copyright
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer.
|
* notice, this list of conditions and the following disclaimer.
|
||||||
* * Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in
|
* notice, this list of conditions and the following disclaimer
|
||||||
* the documentation and/or other materials provided with the
|
* in the documentation and/or other materials provided with the
|
||||||
* distribution.
|
* distribution.
|
||||||
* * Neither the name of Jolla Ltd nor the names of its contributors
|
* 3. Neither the names of the copyright holders nor the names of its
|
||||||
* may be used to endorse or promote products derived from this
|
* contributors may be used to endorse or promote products derived
|
||||||
* software without specific prior written permission.
|
* from this software without specific prior written permission.
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
@ -34,6 +34,7 @@
|
||||||
#include "BooksUtil.h"
|
#include "BooksUtil.h"
|
||||||
#include "BooksDefs.h"
|
#include "BooksDefs.h"
|
||||||
|
|
||||||
|
#include "HarbourBase45.h"
|
||||||
#include "HarbourDebug.h"
|
#include "HarbourDebug.h"
|
||||||
#include "HarbourTask.h"
|
#include "HarbourTask.h"
|
||||||
|
|
||||||
|
@ -52,7 +53,49 @@
|
||||||
#define DIGEST_TYPE (QCryptographicHash::Md5)
|
#define DIGEST_TYPE (QCryptographicHash::Md5)
|
||||||
#define DIGEST_SIZE (16)
|
#define DIGEST_SIZE (16)
|
||||||
|
|
||||||
shared_ptr<Book> BooksUtil::bookFromFile(std::string aPath)
|
// import Sailfish.Media 1.0; MediaKey{}
|
||||||
|
#define MEDIA_KEY_BASE45 \
|
||||||
|
"YEDS9E5LE+347ECUVD+EDU7DDZ9AVCOCCZ96H46DZ9AVCMDCC$CNRF"
|
||||||
|
|
||||||
|
// import org.nemomobile.policy 1.0;Permissions{
|
||||||
|
// autoRelease:true;applicationClass:"camera";
|
||||||
|
// Resource{type:Resource.ScaleButton;optional:true}}
|
||||||
|
#define PERMISSIONS_BASE45 \
|
||||||
|
"YEDS9E5LEN44$KE6*50$C+3ET3EXEDRZCS9EXVD+PC634Y$5JM75$CJ$DZQE EDF/" \
|
||||||
|
"D+QF8%ED3E: CX CLQEOH76LE+ZCEECP9EOEDIEC EDC.DPVDZQEWF7GPCF$DVKEX" \
|
||||||
|
"E4XIAVQE6%EKPCERF%FF*ZCXIAVQE6%EKPCO%5GPCTVD3I8MWE-3E5N7X9E ED..D" \
|
||||||
|
"VUDKWE%$E+%F"
|
||||||
|
|
||||||
|
BooksUtil::BooksUtil(
|
||||||
|
QObject* aParent) :
|
||||||
|
QObject(aParent)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
// Callback for qmlRegisterSingletonType<BooksUtil>
|
||||||
|
QObject*
|
||||||
|
BooksUtil::createSingleton(
|
||||||
|
QQmlEngine*,
|
||||||
|
QJSEngine*)
|
||||||
|
{
|
||||||
|
return new BooksUtil();
|
||||||
|
}
|
||||||
|
|
||||||
|
QString
|
||||||
|
BooksUtil::mediaKeyQml()
|
||||||
|
{
|
||||||
|
return HarbourBase45::fromBase45(QString::fromLatin1(MEDIA_KEY_BASE45));
|
||||||
|
}
|
||||||
|
|
||||||
|
QString
|
||||||
|
BooksUtil::permissionsQml()
|
||||||
|
{
|
||||||
|
return HarbourBase45::fromBase45(QString::fromLatin1(PERMISSIONS_BASE45));
|
||||||
|
}
|
||||||
|
|
||||||
|
shared_ptr<Book>
|
||||||
|
BooksUtil::bookFromFile(
|
||||||
|
const std::string& aPath)
|
||||||
{
|
{
|
||||||
shared_ptr<Book> book;
|
shared_ptr<Book> book;
|
||||||
const ZLFile file(aPath);
|
const ZLFile file(aPath);
|
||||||
|
@ -91,7 +134,10 @@ shared_ptr<Book> BooksUtil::bookFromFile(std::string aPath)
|
||||||
return book;
|
return book;
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray BooksUtil::computeFileHash(QString aPath, const HarbourTask* aTask)
|
QByteArray
|
||||||
|
BooksUtil::computeFileHash(
|
||||||
|
const QString aPath,
|
||||||
|
const HarbourTask* aTask)
|
||||||
{
|
{
|
||||||
QByteArray result;
|
QByteArray result;
|
||||||
QFile file(aPath);
|
QFile file(aPath);
|
||||||
|
@ -110,10 +156,10 @@ QByteArray BooksUtil::computeFileHash(QString aPath, const HarbourTask* aTask)
|
||||||
ptr += DIGEST_SIZE;
|
ptr += DIGEST_SIZE;
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
while (bytesLeft > DIGEST_SIZE) {
|
while (bytesLeft > (qint64)INT_MAX) {
|
||||||
hash.addData(ptr, DIGEST_SIZE);
|
hash.addData(ptr, INT_MAX);
|
||||||
bytesLeft -= DIGEST_SIZE;
|
bytesLeft -= INT_MAX;
|
||||||
ptr += DIGEST_SIZE;
|
ptr += INT_MAX;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!aTask || !aTask->isCanceled()) {
|
if (!aTask || !aTask->isCanceled()) {
|
||||||
|
@ -133,10 +179,12 @@ QByteArray BooksUtil::computeFileHash(QString aPath, const HarbourTask* aTask)
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray BooksUtil::fileHashAttr(QString aPath)
|
QByteArray
|
||||||
|
BooksUtil::fileHashAttr(
|
||||||
|
const QString aPath)
|
||||||
{
|
{
|
||||||
QByteArray hash;
|
QByteArray hash;
|
||||||
QByteArray fname(aPath.toLocal8Bit());
|
const QByteArray fname(aPath.toLocal8Bit());
|
||||||
char attr[DIGEST_SIZE];
|
char attr[DIGEST_SIZE];
|
||||||
if (getxattr(fname, DIGEST_XATTR, attr, sizeof(attr)) == DIGEST_SIZE) {
|
if (getxattr(fname, DIGEST_XATTR, attr, sizeof(attr)) == DIGEST_SIZE) {
|
||||||
hash = QByteArray(attr, sizeof(attr));
|
hash = QByteArray(attr, sizeof(attr));
|
||||||
|
@ -145,7 +193,10 @@ QByteArray BooksUtil::fileHashAttr(QString aPath)
|
||||||
return hash;
|
return hash;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BooksUtil::setFileHashAttr(QString aPath, QByteArray aHash)
|
bool
|
||||||
|
BooksUtil::setFileHashAttr(
|
||||||
|
const QString aPath,
|
||||||
|
const QByteArray aHash)
|
||||||
{
|
{
|
||||||
if (aHash.size() == DIGEST_SIZE) {
|
if (aHash.size() == DIGEST_SIZE) {
|
||||||
QByteArray fname(aPath.toLocal8Bit());
|
QByteArray fname(aPath.toLocal8Bit());
|
||||||
|
@ -158,7 +209,10 @@ bool BooksUtil::setFileHashAttr(QString aPath, QByteArray aHash)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
QByteArray BooksUtil::computeFileHashAndSetAttr(QString aPath, const HarbourTask* aTask)
|
QByteArray
|
||||||
|
BooksUtil::computeFileHashAndSetAttr(
|
||||||
|
const QString aPath,
|
||||||
|
const HarbourTask* aTask)
|
||||||
{
|
{
|
||||||
QByteArray hash = computeFileHash(aPath, aTask);
|
QByteArray hash = computeFileHash(aPath, aTask);
|
||||||
if (!hash.isEmpty()) {
|
if (!hash.isEmpty()) {
|
||||||
|
@ -167,7 +221,9 @@ QByteArray BooksUtil::computeFileHashAndSetAttr(QString aPath, const HarbourTask
|
||||||
return hash;
|
return hash;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool BooksUtil::isValidFileName(QString aName)
|
bool
|
||||||
|
BooksUtil::isValidFileName(
|
||||||
|
const QString aName)
|
||||||
{
|
{
|
||||||
return !aName.isEmpty() &&
|
return !aName.isEmpty() &&
|
||||||
aName != QStringLiteral(".") &&
|
aName != QStringLiteral(".") &&
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/*
|
/*
|
||||||
* Copyright (C) 2015-2018 Jolla Ltd.
|
* Copyright (C) 2015-2022 Jolla Ltd.
|
||||||
* Copyright (C) 2015-2018 Slava Monich <slava.monich@jolla.com>
|
* Copyright (C) 2015-2022 Slava Monich <slava.monich@jolla.com>
|
||||||
*
|
*
|
||||||
* You may use this file under the terms of the BSD license as follows:
|
* You may use this file under the terms of the BSD license as follows:
|
||||||
*
|
*
|
||||||
|
@ -8,15 +8,15 @@
|
||||||
* modification, are permitted provided that the following conditions
|
* modification, are permitted provided that the following conditions
|
||||||
* are met:
|
* are met:
|
||||||
*
|
*
|
||||||
* * Redistributions of source code must retain the above copyright
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer.
|
* notice, this list of conditions and the following disclaimer.
|
||||||
* * Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in
|
* notice, this list of conditions and the following disclaimer
|
||||||
* the documentation and/or other materials provided with the
|
* in the documentation and/or other materials provided with the
|
||||||
* distribution.
|
* distribution.
|
||||||
* * Neither the name of Jolla Ltd nor the names of its contributors
|
* 3. Neither the names of the copyright holders nor the names of its
|
||||||
* may be used to endorse or promote products derived from this
|
* contributors may be used to endorse or promote products derived
|
||||||
* software without specific prior written permission.
|
* from this software without specific prior written permission.
|
||||||
*
|
*
|
||||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
@ -38,21 +38,49 @@
|
||||||
|
|
||||||
#include "library/Book.h"
|
#include "library/Book.h"
|
||||||
|
|
||||||
|
#include <QByteArray>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
class HarbourTask;
|
class HarbourTask;
|
||||||
|
class QQmlEngine;
|
||||||
|
class QJSEngine;
|
||||||
|
|
||||||
namespace BooksUtil {
|
class BooksUtil : public QObject
|
||||||
shared_ptr<Book> bookFromFile(std::string aPath);
|
{
|
||||||
shared_ptr<Book> bookFromFile(QString aPath);
|
Q_OBJECT
|
||||||
bool isValidFileName(QString aName);
|
Q_DISABLE_COPY(BooksUtil)
|
||||||
QByteArray fileHashAttr(QString aPath);
|
Q_PROPERTY(QString mediaKeyQml READ mediaKeyQml CONSTANT)
|
||||||
bool setFileHashAttr(QString aPath, QByteArray aHash);
|
Q_PROPERTY(QString permissionsQml READ permissionsQml CONSTANT)
|
||||||
QByteArray computeFileHash(QString aPath, const HarbourTask* aTask = NULL);
|
Q_PROPERTY(qreal opacityFaint READ opacityFaint CONSTANT)
|
||||||
QByteArray computeFileHashAndSetAttr(QString aPath, const HarbourTask* aTask = NULL);
|
Q_PROPERTY(qreal opacityLow READ opacityLow CONSTANT)
|
||||||
}
|
Q_PROPERTY(qreal opacityHigh READ opacityHigh CONSTANT)
|
||||||
|
Q_PROPERTY(qreal opacityOverlay READ opacityOverlay CONSTANT)
|
||||||
|
class Private;
|
||||||
|
|
||||||
inline shared_ptr<Book> BooksUtil::bookFromFile(QString aPath)
|
public:
|
||||||
{ return BooksUtil::bookFromFile(aPath.toStdString()); }
|
explicit BooksUtil(QObject* aParent = Q_NULLPTR);
|
||||||
|
|
||||||
|
// Callback for qmlRegisterSingletonType<BooksUtil>
|
||||||
|
static QObject* createSingleton(QQmlEngine*, QJSEngine*);
|
||||||
|
|
||||||
|
// Getters
|
||||||
|
static QString mediaKeyQml();
|
||||||
|
static QString permissionsQml();
|
||||||
|
static qreal opacityFaint() { return 0.2; }
|
||||||
|
static qreal opacityLow() { return 0.4; }
|
||||||
|
static qreal opacityHigh() { return 0.6; }
|
||||||
|
static qreal opacityOverlay() { return 0.8; }
|
||||||
|
|
||||||
|
// Static utilities
|
||||||
|
static shared_ptr<Book> bookFromFile(const std::string&);
|
||||||
|
static shared_ptr<Book> bookFromFile(const QString aPath)
|
||||||
|
{ return BooksUtil::bookFromFile(aPath.toStdString()); }
|
||||||
|
static bool isValidFileName(const QString);
|
||||||
|
static QByteArray fileHashAttr(const QString);
|
||||||
|
static bool setFileHashAttr(const QString, const QByteArray);
|
||||||
|
static QByteArray computeFileHash(const QString, const HarbourTask* aTask = NULL);
|
||||||
|
static QByteArray computeFileHashAndSetAttr(const QString, const HarbourTask* aTask = NULL);
|
||||||
|
};
|
||||||
|
|
||||||
#endif // BOOKS_UTIL_H
|
#endif // BOOKS_UTIL_H
|
||||||
|
|
|
@ -50,12 +50,11 @@
|
||||||
#include "BooksCoverWidget.h"
|
#include "BooksCoverWidget.h"
|
||||||
#include "BooksTaskQueue.h"
|
#include "BooksTaskQueue.h"
|
||||||
#include "BooksHints.h"
|
#include "BooksHints.h"
|
||||||
|
#include "BooksUtil.h"
|
||||||
|
|
||||||
#include "HarbourColorEditorModel.h"
|
#include "HarbourColorEditorModel.h"
|
||||||
#include "HarbourDisplayBlanking.h"
|
#include "HarbourDisplayBlanking.h"
|
||||||
#include "HarbourDebug.h"
|
#include "HarbourDebug.h"
|
||||||
#include "HarbourMediaPlugin.h"
|
|
||||||
#include "HarbourPolicyPlugin.h"
|
|
||||||
#include "HarbourUtil.h"
|
#include "HarbourUtil.h"
|
||||||
|
|
||||||
#include "ZLibrary.h"
|
#include "ZLibrary.h"
|
||||||
|
@ -107,6 +106,7 @@ Q_DECL_EXPORT int main(int argc, char **argv)
|
||||||
BOOKS_QML_REGISTER(BooksPageStack);
|
BOOKS_QML_REGISTER(BooksPageStack);
|
||||||
BOOKS_QML_REGISTER_SINGLETON(HarbourUtil);
|
BOOKS_QML_REGISTER_SINGLETON(HarbourUtil);
|
||||||
BOOKS_QML_REGISTER_SINGLETON(BooksHints);
|
BOOKS_QML_REGISTER_SINGLETON(BooksHints);
|
||||||
|
BOOKS_QML_REGISTER_SINGLETON(BooksUtil);
|
||||||
BOOKS_QML_REGISTER_UNCREATABLE(BooksSettings);
|
BOOKS_QML_REGISTER_UNCREATABLE(BooksSettings);
|
||||||
|
|
||||||
QLocale locale;
|
QLocale locale;
|
||||||
|
@ -139,10 +139,6 @@ Q_DECL_EXPORT int main(int argc, char **argv)
|
||||||
QQmlContext* root = view->rootContext();
|
QQmlContext* root = view->rootContext();
|
||||||
QQmlEngine* engine = root->engine();
|
QQmlEngine* engine = root->engine();
|
||||||
QSharedPointer<BooksSettings> settings = BooksSettings::sharedInstance();
|
QSharedPointer<BooksSettings> settings = BooksSettings::sharedInstance();
|
||||||
HarbourPolicyPlugin::registerTypes(engine, BOOKS_QML_PLUGIN,
|
|
||||||
BOOKS_QML_PLUGIN_V1, BOOKS_QML_PLUGIN_V2);
|
|
||||||
HarbourMediaPlugin::registerTypes(engine, BOOKS_QML_PLUGIN,
|
|
||||||
BOOKS_QML_PLUGIN_V1, BOOKS_QML_PLUGIN_V2);
|
|
||||||
engine->addImageProvider(BooksImageProvider::PROVIDER_ID,
|
engine->addImageProvider(BooksImageProvider::PROVIDER_ID,
|
||||||
new BooksImageProvider(root));
|
new BooksImageProvider(root));
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue