mirror of
https://github.com/YACReader/yacreader
synced 2025-06-04 01:28:55 -04:00
merged
This commit is contained in:
commit
ef21cf7c73
20
INSTALL.txt
20
INSTALL.txt
@ -8,17 +8,26 @@ make install
|
|||||||
|
|
||||||
from the source dir. For seperate builds of YACReader or YACReaderLibrary, enter their respective subfolders and run the commands from there.
|
from the source dir. For seperate builds of YACReader or YACReaderLibrary, enter their respective subfolders and run the commands from there.
|
||||||
|
|
||||||
|
For the headless version of YACReaderLibrary enter the YACReaderLibrary folder and run:
|
||||||
|
|
||||||
|
qmake-qt5 YACReaderLibraryServer.pro
|
||||||
|
|
||||||
|
This will select the build config for the headless version instead of the gui version. You can then continue the build as described above.
|
||||||
|
|
||||||
|
|
||||||
Dependencies:
|
Dependencies:
|
||||||
-----------------------
|
-----------------------
|
||||||
|
|
||||||
- Qt >= 5.3 with the following modules:
|
- Qt >= 5.3 with the following modules:
|
||||||
- declarative
|
- declarative
|
||||||
|
- quickcontrols
|
||||||
- sql
|
- sql
|
||||||
- script
|
- script
|
||||||
- multimedia
|
- multimedia
|
||||||
- imageformats
|
- imageformats
|
||||||
- opengl
|
- opengl
|
||||||
- sql-sqlite
|
- sql-sqlite
|
||||||
|
- network
|
||||||
|
|
||||||
- poppler-qt5
|
- poppler-qt5
|
||||||
- qrencode
|
- qrencode
|
||||||
@ -26,9 +35,12 @@ Dependencies:
|
|||||||
- glu
|
- glu
|
||||||
- a decompression backend, either 7zip or unarr (see below)
|
- a decompression backend, either 7zip or unarr (see below)
|
||||||
|
|
||||||
|
Please note that not all of these dependencies are needed at build time. A good example for this is YACReaderLibrary's GridView mode which will
|
||||||
|
silently fail and only show a white page if the proper qml modules (declarative, quickcontrols) are not installed.
|
||||||
|
|
||||||
|
|
||||||
Decompression backend:
|
Decompression backend:
|
||||||
---------------------------------------
|
--------------------------------------
|
||||||
|
|
||||||
YACReader supports two decompression backends:
|
YACReader supports two decompression backends:
|
||||||
|
|
||||||
@ -50,8 +62,9 @@ If you chose to build YACReader with p7zip as a backend on Linux/Unix, please ta
|
|||||||
If your system already ships with p7zip > 9.20.1 you can place 7z.so and the Codecs folder with the Rar29.so from p7zip 9.20.1 in /usr/lib/yacreader
|
If your system already ships with p7zip > 9.20.1 you can place 7z.so and the Codecs folder with the Rar29.so from p7zip 9.20.1 in /usr/lib/yacreader
|
||||||
YACReader will check this folder first and can thus continue using 7zip as a backend with p7zip > 9.20.1 installed on your system.
|
YACReader will check this folder first and can thus continue using 7zip as a backend with p7zip > 9.20.1 installed on your system.
|
||||||
|
|
||||||
|
|
||||||
Other build options:
|
Other build options:
|
||||||
---------------------
|
------------------------------
|
||||||
|
|
||||||
You can adjust the installation prefix as well als the path make install uses to install the files.
|
You can adjust the installation prefix as well als the path make install uses to install the files.
|
||||||
Use "qmake PREFIX=DIR" to configure YACReader for your systems default prefix (for example "/", "/usr", "/usr/local").
|
Use "qmake PREFIX=DIR" to configure YACReader for your systems default prefix (for example "/", "/usr", "/usr/local").
|
||||||
@ -67,7 +80,8 @@ On embedded devices that don't support desktop OpenGL, it is recommended to use
|
|||||||
|
|
||||||
qmake CONFIG+=no_opengl
|
qmake CONFIG+=no_opengl
|
||||||
|
|
||||||
This will remove any dependency on desktop OpenGL and hardlock rendering to software.
|
This will remove any dependency on desktop OpenGL and hardlock YACReader's coverflow to software rendering. Please note that it
|
||||||
|
doesn't actually remove OpenGL from the build, the Qt toolkit will still make use of it.
|
||||||
|
|
||||||
|
|
||||||
DO YOU WANT TO HELP YACREADER?
|
DO YOU WANT TO HELP YACREADER?
|
||||||
|
@ -11,25 +11,15 @@ NotificationsLabelWidget::NotificationsLabelWidget(QWidget * parent)
|
|||||||
|
|
||||||
setAttribute(Qt::WA_LayoutUsesWidgetRect,true);
|
setAttribute(Qt::WA_LayoutUsesWidgetRect,true);
|
||||||
effect = new QGraphicsOpacityEffect(this);
|
effect = new QGraphicsOpacityEffect(this);
|
||||||
effect->setOpacity(1.0);
|
effect->setOpacity(1.0);
|
||||||
|
|
||||||
effect2= new QGraphicsOpacityEffect(this);
|
|
||||||
effect->setOpacity(1.0);
|
|
||||||
|
|
||||||
anim = new QPropertyAnimation(effect,"opacity");
|
anim = new QPropertyAnimation(effect,"opacity");
|
||||||
anim->setDuration(500);
|
anim->setDuration(500);
|
||||||
anim->setStartValue(1.0);
|
anim->setStartValue(1.0);
|
||||||
anim->setEndValue(0.0);
|
anim->setEndValue(0.0);
|
||||||
anim->setEasingCurve(QEasingCurve::InExpo);
|
anim->setEasingCurve(QEasingCurve::InExpo);
|
||||||
|
|
||||||
anim2 = new QPropertyAnimation(effect2,"opacity");
|
connect(anim,SIGNAL(finished()),this,SLOT(hide()));
|
||||||
anim2->setDuration(500);
|
|
||||||
anim2->setStartValue(1.0);
|
|
||||||
anim2->setEndValue(0.0);
|
|
||||||
anim2->setEasingCurve(QEasingCurve::InExpo);
|
|
||||||
anim2->start();
|
|
||||||
|
|
||||||
connect(anim,SIGNAL(finished()),this,SLOT(hide()));
|
|
||||||
|
|
||||||
textLabel = new QLabel(this);
|
textLabel = new QLabel(this);
|
||||||
textLabel->setAlignment(Qt::AlignVCenter|Qt::AlignHCenter);
|
textLabel->setAlignment(Qt::AlignVCenter|Qt::AlignHCenter);
|
||||||
@ -41,7 +31,6 @@ NotificationsLabelWidget::NotificationsLabelWidget(QWidget * parent)
|
|||||||
//TODO check if the effects still be broken in OSX yet
|
//TODO check if the effects still be broken in OSX yet
|
||||||
#ifndef Q_OS_MAC
|
#ifndef Q_OS_MAC
|
||||||
this->setGraphicsEffect(effect);
|
this->setGraphicsEffect(effect);
|
||||||
textLabel->setGraphicsEffect(effect2);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
layout->addWidget(textLabel);
|
layout->addWidget(textLabel);
|
||||||
@ -66,9 +55,7 @@ void NotificationsLabelWidget::flash()
|
|||||||
{
|
{
|
||||||
updatePosition();
|
updatePosition();
|
||||||
anim->stop();
|
anim->stop();
|
||||||
anim2->stop();
|
|
||||||
anim->start();
|
anim->start();
|
||||||
anim2->start();
|
|
||||||
|
|
||||||
setVisible(true);
|
setVisible(true);
|
||||||
}
|
}
|
||||||
|
@ -13,9 +13,7 @@ Q_OBJECT
|
|||||||
private:
|
private:
|
||||||
QLabel * textLabel;
|
QLabel * textLabel;
|
||||||
QPropertyAnimation * anim;
|
QPropertyAnimation * anim;
|
||||||
QPropertyAnimation * anim2;
|
|
||||||
QGraphicsOpacityEffect * effect;
|
QGraphicsOpacityEffect * effect;
|
||||||
QGraphicsOpacityEffect * effect2;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void paintEvent(QPaintEvent *);
|
void paintEvent(QPaintEvent *);
|
||||||
|
@ -14,21 +14,8 @@ INCLUDEPATH += ../common \
|
|||||||
DEFINES += SERVER_RELEASE NOMINMAX YACREADER_LIBRARY QT_NO_DEBUG_OUTPUT
|
DEFINES += SERVER_RELEASE NOMINMAX YACREADER_LIBRARY QT_NO_DEBUG_OUTPUT
|
||||||
|
|
||||||
#load default build flags
|
#load default build flags
|
||||||
#TODO include (../config.pri)
|
#do a basic dependency check
|
||||||
!CONFIG(unarr):!CONFIG(7zip) {
|
include(headless_config.pri)
|
||||||
unix {
|
|
||||||
!macx {
|
|
||||||
CONFIG+=unarr
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
CONFIG+=7zip
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
win32 {
|
|
||||||
CONFIG+=7zip
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
win32 {
|
win32 {
|
||||||
LIBS += -L../dependencies/poppler/lib -loleaut32 -lole32 -lshell32 -luser32
|
LIBS += -L../dependencies/poppler/lib -loleaut32 -lole32 -lshell32 -luser32
|
||||||
@ -144,13 +131,13 @@ DATADIR = $$PREFIX/share
|
|||||||
DEFINES += "LIBDIR=\\\"$$LIBDIR\\\"" "DATADIR=\\\"$$DATADIR\\\"" "BINDIR=\\\"$$BINDIR\\\""
|
DEFINES += "LIBDIR=\\\"$$LIBDIR\\\"" "DATADIR=\\\"$$DATADIR\\\"" "BINDIR=\\\"$$BINDIR\\\""
|
||||||
|
|
||||||
#MAKE INSTALL
|
#MAKE INSTALL
|
||||||
INSTALLS += bin icon desktop server translation manpage
|
INSTALLS += bin server translation #manpage
|
||||||
|
|
||||||
bin.path = $$BINDIR
|
bin.path = $$BINDIR
|
||||||
isEmpty(DESTDIR) {
|
isEmpty(DESTDIR) {
|
||||||
bin.files = YACReaderLibrary
|
bin.files = YACReaderLibraryServer
|
||||||
} else {
|
} else {
|
||||||
bin.files = $$DESTDIR/YACReaderLibrary
|
bin.files = $$DESTDIR/YACReaderLibraryServer
|
||||||
}
|
}
|
||||||
|
|
||||||
server.path = $$DATADIR/yacreader
|
server.path = $$DATADIR/yacreader
|
||||||
@ -159,6 +146,6 @@ server.files = ../release/server
|
|||||||
translation.path = $$DATADIR/yacreader/languages
|
translation.path = $$DATADIR/yacreader/languages
|
||||||
translation.files = ../release/languages/yacreaderlibrary_*
|
translation.files = ../release/languages/yacreaderlibrary_*
|
||||||
|
|
||||||
manpage.path = $$DATADIR/man/man1
|
#manpage.path = $$DATADIR/man/man1
|
||||||
manpage.files = ../YACReaderLibrary.1
|
#manpage.files = ../YACReaderLibrary.1
|
||||||
}
|
}
|
||||||
|
@ -10,12 +10,54 @@
|
|||||||
#include "comic_files_manager.h"
|
#include "comic_files_manager.h"
|
||||||
#include "QsLog.h"
|
#include "QsLog.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void testListView(QListView * l)
|
void testListView(QListView * l)
|
||||||
{
|
{
|
||||||
QStringListModel * slm = new QStringListModel(QStringList() << "Lorem ipsum" << "Hailer skualer"<< "Mumbaluba X" << "Finger layden" << "Pacum tactus filer" << "Aposum" << "En" << "Lorem ipsum" << "Hailer skualer" << "Mumbaluba X" << "Finger layden" << "Pacum tactus filer" << "Aposum" << "En" );
|
QStringListModel * slm = new QStringListModel(QStringList() << "Lorem ipsum" << "Hailer skualer"<< "Mumbaluba X" << "Finger layden" << "Pacum tactus filer" << "Aposum" << "En" << "Lorem ipsum" << "Hailer skualer" << "Mumbaluba X" << "Finger layden" << "Pacum tactus filer" << "Aposum" << "En" );
|
||||||
l->setModel(slm);
|
l->setModel(slm);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class ListviewDelegate : public QStyledItemDelegate
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ListviewDelegate() : QStyledItemDelegate() {}
|
||||||
|
|
||||||
|
virtual ~ListviewDelegate() {}
|
||||||
|
|
||||||
|
void paint(QPainter *painter, const QStyleOptionViewItem &option,
|
||||||
|
const QModelIndex &index) const
|
||||||
|
{
|
||||||
|
painter->save();
|
||||||
|
|
||||||
|
QFontMetrics fm(option.font);
|
||||||
|
QString text = qvariant_cast<QString>(index.data(Qt::DisplayRole));
|
||||||
|
|
||||||
|
QRect textRect = option.rect;
|
||||||
|
|
||||||
|
textRect.setLeft(std::max(0, (option.rect.size().width() - fm.width(text)) / 2));
|
||||||
|
|
||||||
|
painter->drawText(textRect,text);
|
||||||
|
|
||||||
|
painter->restore();
|
||||||
|
|
||||||
|
//TODO add mouse hover style ??
|
||||||
|
}
|
||||||
|
|
||||||
|
QSize sizeHint(const QStyleOptionViewItem &option,
|
||||||
|
const QModelIndex &index ) const
|
||||||
|
{
|
||||||
|
QFontMetrics fm(option.font);
|
||||||
|
QString text = qvariant_cast<QString>(index.data(Qt::DisplayRole));
|
||||||
|
|
||||||
|
return QSize(fm.width(text),fm.height());
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
EmptyFolderWidget::EmptyFolderWidget(QWidget *parent) :
|
EmptyFolderWidget::EmptyFolderWidget(QWidget *parent) :
|
||||||
EmptyContainerInfo(parent),subfoldersModel(new QStringListModel())
|
EmptyContainerInfo(parent),subfoldersModel(new QStringListModel())
|
||||||
{
|
{
|
||||||
@ -25,9 +67,8 @@ EmptyFolderWidget::EmptyFolderWidget(QWidget *parent) :
|
|||||||
titleLabel->setText(tr("Subfolders in this folder"));
|
titleLabel->setText(tr("Subfolders in this folder"));
|
||||||
|
|
||||||
foldersView = new QListView();
|
foldersView = new QListView();
|
||||||
foldersView->setMinimumWidth(282);
|
|
||||||
//foldersView->setWrapping(true);
|
|
||||||
foldersView->setAttribute(Qt::WA_MacShowFocusRect,false);
|
foldersView->setAttribute(Qt::WA_MacShowFocusRect,false);
|
||||||
|
foldersView->setItemDelegate(new ListviewDelegate);
|
||||||
#ifdef Q_OS_MAC
|
#ifdef Q_OS_MAC
|
||||||
foldersView->setStyleSheet("QListView {background-color:transparent; border: none; color:#959595; outline:0; font-size: 18px; show-decoration-selected: 0; margin:0}"
|
foldersView->setStyleSheet("QListView {background-color:transparent; border: none; color:#959595; outline:0; font-size: 18px; show-decoration-selected: 0; margin:0}"
|
||||||
"QListView::item:selected {background-color: #EFEFEF; color:#CCCCCC;}"
|
"QListView::item:selected {background-color: #EFEFEF; color:#CCCCCC;}"
|
||||||
@ -65,10 +106,9 @@ EmptyFolderWidget::EmptyFolderWidget(QWidget *parent) :
|
|||||||
|
|
||||||
#endif
|
#endif
|
||||||
foldersView->setSizePolicy(QSizePolicy ::Expanding , QSizePolicy ::Expanding );
|
foldersView->setSizePolicy(QSizePolicy ::Expanding , QSizePolicy ::Expanding );
|
||||||
testListView(foldersView);
|
|
||||||
|
|
||||||
layout->addSpacing(12);
|
layout->addSpacing(12);
|
||||||
layout->addWidget(foldersView,1,Qt::AlignHCenter);
|
layout->addWidget(foldersView,1);
|
||||||
layout->addStretch();
|
layout->addStretch();
|
||||||
layout->setMargin(0);
|
layout->setMargin(0);
|
||||||
layout->setSpacing(0);
|
layout->setSpacing(0);
|
||||||
|
@ -39,7 +39,6 @@ GridComicsView::GridComicsView(QWidget *parent) :
|
|||||||
|
|
||||||
container->setMinimumSize(200, 200);
|
container->setMinimumSize(200, 200);
|
||||||
container->setFocusPolicy(Qt::TabFocus);
|
container->setFocusPolicy(Qt::TabFocus);
|
||||||
view->setSource(QUrl("qrc:/qml/GridComicsView.qml"));
|
|
||||||
|
|
||||||
createCoverSizeSliderWidget();
|
createCoverSizeSliderWidget();
|
||||||
|
|
||||||
@ -81,6 +80,25 @@ GridComicsView::GridComicsView(QWidget *parent) :
|
|||||||
ctxt->setContextProperty("fontSpacing", 0.5);
|
ctxt->setContextProperty("fontSpacing", 0.5);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
ctxt->setContextProperty("backgroundImage", QUrl());
|
||||||
|
ctxt->setContextProperty("backgroundBlurOpacity", 0.0);
|
||||||
|
ctxt->setContextProperty("backgroundBlurRadius", 0.0);
|
||||||
|
ctxt->setContextProperty("backgroundBlurVisible", false);
|
||||||
|
|
||||||
|
ComicModel *model = new ComicModel();
|
||||||
|
QItemSelectionModel *selectionModel = new QItemSelectionModel(model);
|
||||||
|
ctxt->setContextProperty("comicsList", model);
|
||||||
|
ctxt->setContextProperty("comicsSelection", selectionModel);
|
||||||
|
ctxt->setContextProperty("contextMenuHelper",this);
|
||||||
|
ctxt->setContextProperty("comicsSelectionHelper", this);
|
||||||
|
ctxt->setContextProperty("comicRatingHelper", this);
|
||||||
|
ctxt->setContextProperty("dummyValue", true);
|
||||||
|
ctxt->setContextProperty("dragManager", this);
|
||||||
|
ctxt->setContextProperty("dropManager", this);
|
||||||
|
|
||||||
|
view->setSource(QUrl("qrc:/qml/GridComicsView.qml"));
|
||||||
|
|
||||||
|
|
||||||
setShowMarks(true);//TODO save this in settings
|
setShowMarks(true);//TODO save this in settings
|
||||||
|
|
||||||
QVBoxLayout * l = new QVBoxLayout;
|
QVBoxLayout * l = new QVBoxLayout;
|
||||||
@ -179,16 +197,18 @@ void GridComicsView::updateBackgroundConfig()
|
|||||||
float opacity = settings->value(OPACITY_BACKGROUND_IMAGE_IN_GRID_VIEW, 0.2).toFloat();
|
float opacity = settings->value(OPACITY_BACKGROUND_IMAGE_IN_GRID_VIEW, 0.2).toFloat();
|
||||||
float blurRadius = settings->value(BLUR_RADIUS_BACKGROUND_IMAGE_IN_GRID_VIEW, 75).toInt();
|
float blurRadius = settings->value(BLUR_RADIUS_BACKGROUND_IMAGE_IN_GRID_VIEW, 75).toInt();
|
||||||
|
|
||||||
ctxt->setContextProperty("backgroundImage", this->model->data(this->model->index(0, 0), ComicModel::CoverPathRole));
|
int row = settings->value(USE_SELECTED_COMIC_COVER_AS_BACKGROUND_IMAGE_IN_GRID_VIEW, false).toBool() ? currentIndex().row() : 0;
|
||||||
|
|
||||||
|
ctxt->setContextProperty("backgroundImage", this->model->data(this->model->index(row, 0), ComicModel::CoverPathRole));
|
||||||
ctxt->setContextProperty("backgroundBlurOpacity", opacity);
|
ctxt->setContextProperty("backgroundBlurOpacity", opacity);
|
||||||
ctxt->setContextProperty("backgroundBlurRadius", blurRadius);
|
ctxt->setContextProperty("backgroundBlurRadius", blurRadius);
|
||||||
ctxt->setContextProperty("backgroundBlurVisible", true);
|
ctxt->setContextProperty("backgroundBlurVisible", true);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ctxt->setContextProperty("backgroundImage", QVariant());
|
ctxt->setContextProperty("backgroundImage", QUrl());
|
||||||
ctxt->setContextProperty("backgroundBlurOpacity", 0);
|
ctxt->setContextProperty("backgroundBlurOpacity", 0.0);
|
||||||
ctxt->setContextProperty("backgroundBlurRadius", 0);
|
ctxt->setContextProperty("backgroundBlurRadius", 0.0);
|
||||||
ctxt->setContextProperty("backgroundBlurVisible", false);
|
ctxt->setContextProperty("backgroundBlurVisible", false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -206,16 +226,27 @@ void GridComicsView::setCurrentIndex(const QModelIndex &index)
|
|||||||
_selectionModel->clear();
|
_selectionModel->clear();
|
||||||
_selectionModel->select(index, QItemSelectionModel::Select | QItemSelectionModel::Rows);
|
_selectionModel->select(index, QItemSelectionModel::Select | QItemSelectionModel::Rows);
|
||||||
view->rootContext()->setContextProperty("dummyValue", true);
|
view->rootContext()->setContextProperty("dummyValue", true);
|
||||||
|
|
||||||
|
if(settings->value(USE_SELECTED_COMIC_COVER_AS_BACKGROUND_IMAGE_IN_GRID_VIEW, false).toBool())
|
||||||
|
updateBackgroundConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
QModelIndex GridComicsView::currentIndex()
|
QModelIndex GridComicsView::currentIndex()
|
||||||
{
|
{
|
||||||
|
|
||||||
|
if(!_selectionModel)
|
||||||
|
return QModelIndex();
|
||||||
|
|
||||||
QModelIndexList indexes = _selectionModel->selectedRows();
|
QModelIndexList indexes = _selectionModel->selectedRows();
|
||||||
if(indexes.length()>0)
|
if(indexes.length()>0)
|
||||||
return indexes[0];
|
return indexes[0];
|
||||||
|
|
||||||
this->selectIndex(0);
|
this->selectIndex(0);
|
||||||
return _selectionModel->selectedRows()[0];
|
indexes = _selectionModel->selectedRows();
|
||||||
|
if(indexes.length()>0)
|
||||||
|
return indexes[0];
|
||||||
|
else
|
||||||
|
return QModelIndex();
|
||||||
}
|
}
|
||||||
|
|
||||||
QItemSelectionModel *GridComicsView::selectionModel()
|
QItemSelectionModel *GridComicsView::selectionModel()
|
||||||
|
@ -56,6 +56,28 @@ void ConsoleUILibraryCreator::updateLibrary(const QString & path)
|
|||||||
eventLoop.exec();
|
eventLoop.exec();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ConsoleUILibraryCreator::addExistingLibrary(const QString & name, const QString & path)
|
||||||
|
{
|
||||||
|
//TODO add error handling
|
||||||
|
YACReaderLibraries yacreaderLibraries;
|
||||||
|
yacreaderLibraries.load();
|
||||||
|
yacreaderLibraries.addLibrary(name, path);
|
||||||
|
yacreaderLibraries.save();
|
||||||
|
|
||||||
|
std::cout << "Library added : " << name.toUtf8().constData() << " at " << path.toUtf8().constData() << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ConsoleUILibraryCreator::removeLibrary(const QString & name)
|
||||||
|
{
|
||||||
|
//TODO add error handling
|
||||||
|
YACReaderLibraries yacreaderLibraries;
|
||||||
|
yacreaderLibraries.load();
|
||||||
|
yacreaderLibraries.remove(name);
|
||||||
|
yacreaderLibraries.save();
|
||||||
|
|
||||||
|
std::cout << "Library removed : " << name.toUtf8().constData() << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
void ConsoleUILibraryCreator::newComic(const QString & /*relativeComicPath*/, const QString & /*coverPath*/)
|
void ConsoleUILibraryCreator::newComic(const QString & /*relativeComicPath*/, const QString & /*coverPath*/)
|
||||||
{
|
{
|
||||||
numComicsProcessed++;
|
numComicsProcessed++;
|
||||||
|
@ -10,6 +10,8 @@ public:
|
|||||||
explicit ConsoleUILibraryCreator(QObject *parent = 0);
|
explicit ConsoleUILibraryCreator(QObject *parent = 0);
|
||||||
void createLibrary(const QString & name, const QString & path);
|
void createLibrary(const QString & name, const QString & path);
|
||||||
void updateLibrary(const QString & path);
|
void updateLibrary(const QString & path);
|
||||||
|
void addExistingLibrary(const QString & name, const QString & path);
|
||||||
|
void removeLibrary(const QString & name);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
uint numComicsProcessed;
|
uint numComicsProcessed;
|
||||||
|
@ -108,7 +108,7 @@ int main( int argc, char ** argv )
|
|||||||
{
|
{
|
||||||
QCoreApplication *app = new QCoreApplication(argc, argv);
|
QCoreApplication *app = new QCoreApplication(argc, argv);
|
||||||
|
|
||||||
app->setApplicationName("YACReaderLibraryServer");
|
app->setApplicationName("YACReaderLibrary");
|
||||||
app->setOrganizationName("YACReader");
|
app->setOrganizationName("YACReader");
|
||||||
app->setApplicationVersion(VERSION);
|
app->setApplicationVersion(VERSION);
|
||||||
|
|
||||||
@ -119,7 +119,7 @@ int main( int argc, char ** argv )
|
|||||||
parser.setApplicationDescription(QCoreApplication::tr("\nYACReaderLibraryServer is the headless (no gui) version of YACReaderLibrary"));
|
parser.setApplicationDescription(QCoreApplication::tr("\nYACReaderLibraryServer is the headless (no gui) version of YACReaderLibrary"));
|
||||||
parser.addHelpOption();
|
parser.addHelpOption();
|
||||||
parser.addVersionOption();
|
parser.addVersionOption();
|
||||||
parser.addPositionalArgument("command", "The command to execute. [start, create-library, update-library, list-libraries]");
|
parser.addPositionalArgument("command", "The command to execute. [start, create-library, update-library, add-library, remove-library, list-libraries]");
|
||||||
|
|
||||||
parser.parse(QCoreApplication::arguments());
|
parser.parse(QCoreApplication::arguments());
|
||||||
|
|
||||||
@ -128,7 +128,71 @@ int main( int argc, char ** argv )
|
|||||||
|
|
||||||
if(command == "start")
|
if(command == "start")
|
||||||
{
|
{
|
||||||
|
QString destLog = YACReader::getSettingsPath()+"/yacreaderlibrary.log";
|
||||||
|
QDir().mkpath(YACReader::getSettingsPath());
|
||||||
|
|
||||||
|
Logger& logger = Logger::instance();
|
||||||
|
logger.setLoggingLevel(QsLogging::TraceLevel);
|
||||||
|
|
||||||
|
DestinationPtr fileDestination(DestinationFactory::MakeFileDestination(
|
||||||
|
destLog, EnableLogRotation, MaxSizeBytes(1048576), MaxOldLogCount(2)));
|
||||||
|
DestinationPtr debugDestination(DestinationFactory::MakeDebugOutputDestination());
|
||||||
|
logger.addDestination(debugDestination);
|
||||||
|
logger.addDestination(fileDestination);
|
||||||
|
|
||||||
|
QTranslator translator;
|
||||||
|
QString sufix = QLocale::system().name();
|
||||||
|
#if defined Q_OS_UNIX && !defined Q_OS_MAC
|
||||||
|
translator.load(QString(DATADIR)+"/yacreader/languages/yacreaderlibrary_"+sufix);
|
||||||
|
#else
|
||||||
|
translator.load(QCoreApplication::applicationDirPath()+"/languages/yacreaderlibrary_"+sufix);
|
||||||
|
#endif
|
||||||
|
app->installTranslator(&translator);
|
||||||
|
|
||||||
|
QTranslator viewerTranslator;
|
||||||
|
#if defined Q_OS_UNIX && !defined Q_OS_MAC
|
||||||
|
viewerTranslator.load(QString(DATADIR)+"/yacreader/languages/yacreader_"+sufix);
|
||||||
|
#else
|
||||||
|
viewerTranslator.load(QCoreApplication::applicationDirPath()+"/languages/yacreader_"+sufix);
|
||||||
|
#endif
|
||||||
|
app->installTranslator(&viewerTranslator);
|
||||||
|
|
||||||
|
qRegisterMetaType<ComicDB>("ComicDB");
|
||||||
|
|
||||||
|
QSettings * settings = new QSettings(YACReader::getSettingsPath()+"/"+QCoreApplication::applicationName()+".ini",QSettings::IniFormat);
|
||||||
|
settings->beginGroup("libraryConfig");
|
||||||
|
|
||||||
|
//server
|
||||||
|
Startup *s = new Startup();
|
||||||
|
s->start();
|
||||||
|
|
||||||
|
QLOG_INFO() << "YACReaderLibraryServer attempting to start";
|
||||||
|
|
||||||
|
logSystemAndConfig();
|
||||||
|
|
||||||
|
if(YACReaderLocalServer::isRunning()) //s�lo se permite una instancia de YACReaderLibrary
|
||||||
|
{
|
||||||
|
QLOG_WARN() << "another instance of YACReaderLibrary is running";
|
||||||
|
QsLogging::Logger::destroyInstance();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
QLOG_INFO() << "YACReaderLibrary starting";
|
||||||
|
|
||||||
|
YACReaderLocalServer * localServer = new YACReaderLocalServer();
|
||||||
|
|
||||||
|
int ret = app->exec();
|
||||||
|
|
||||||
|
QLOG_INFO() << "YACReaderLibrary closed with exit code :" << ret;
|
||||||
|
|
||||||
|
//shutdown
|
||||||
|
s->stop();
|
||||||
|
delete s;
|
||||||
|
localServer->close();
|
||||||
|
delete localServer;
|
||||||
|
|
||||||
|
QsLogging::Logger::destroyInstance();
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
else if(command == "create-library")
|
else if(command == "create-library")
|
||||||
{
|
{
|
||||||
@ -185,6 +249,61 @@ int main( int argc, char ** argv )
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
else if(command == "add-library")
|
||||||
|
{
|
||||||
|
QCommandLineParser parser;
|
||||||
|
|
||||||
|
parser.addHelpOption();
|
||||||
|
|
||||||
|
parser.parse(QCoreApplication::arguments());
|
||||||
|
|
||||||
|
parser.clearPositionalArguments();
|
||||||
|
parser.addPositionalArgument("add-library", "Adds an exiting library named \"name\" at the specified origin <path>");
|
||||||
|
parser.addPositionalArgument("name", "Library name", "\"name\"");
|
||||||
|
parser.addPositionalArgument("path", "Path to the folder where the library is", "<path>");
|
||||||
|
parser.process(*app);
|
||||||
|
|
||||||
|
const QStringList args = parser.positionalArguments();
|
||||||
|
if(args.length() != 3)
|
||||||
|
{
|
||||||
|
parser.showHelp();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
const QStringList addArgs = parser.positionalArguments();
|
||||||
|
|
||||||
|
ConsoleUILibraryCreator * libraryCreatorUI = new ConsoleUILibraryCreator;
|
||||||
|
libraryCreatorUI->addExistingLibrary(addArgs.at(1), addArgs.at(2));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
else if(command == "remove-library")
|
||||||
|
{
|
||||||
|
QCommandLineParser parser;
|
||||||
|
|
||||||
|
parser.addHelpOption();
|
||||||
|
|
||||||
|
parser.parse(QCoreApplication::arguments());
|
||||||
|
|
||||||
|
parser.clearPositionalArguments();
|
||||||
|
parser.addPositionalArgument("remove-library", "Removes a library named \"name\" from the list of libraries");
|
||||||
|
parser.addPositionalArgument("name", "Library name", "\"name\"");
|
||||||
|
parser.process(*app);
|
||||||
|
|
||||||
|
const QStringList args = parser.positionalArguments();
|
||||||
|
if(args.length() != 2)
|
||||||
|
{
|
||||||
|
parser.showHelp();
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
const QStringList removeArgs = parser.positionalArguments();
|
||||||
|
|
||||||
|
ConsoleUILibraryCreator * libraryCreatorUI = new ConsoleUILibraryCreator;
|
||||||
|
libraryCreatorUI->removeLibrary(removeArgs.at(1));
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
else if(command == "list-libraries")
|
else if(command == "list-libraries")
|
||||||
{
|
{
|
||||||
YACReaderLibraries libraries = DBHelper::getLibraries();
|
YACReaderLibraries libraries = DBHelper::getLibraries();
|
||||||
@ -196,71 +315,7 @@ int main( int argc, char ** argv )
|
|||||||
else //error
|
else //error
|
||||||
{
|
{
|
||||||
parser.showHelp();
|
parser.showHelp();
|
||||||
}
|
|
||||||
|
|
||||||
QString destLog = YACReader::getSettingsPath()+"/yacreaderlibrary.log";
|
|
||||||
QDir().mkpath(YACReader::getSettingsPath());
|
|
||||||
|
|
||||||
Logger& logger = Logger::instance();
|
|
||||||
logger.setLoggingLevel(QsLogging::TraceLevel);
|
|
||||||
|
|
||||||
DestinationPtr fileDestination(DestinationFactory::MakeFileDestination(
|
|
||||||
destLog, EnableLogRotation, MaxSizeBytes(1048576), MaxOldLogCount(2)));
|
|
||||||
DestinationPtr debugDestination(DestinationFactory::MakeDebugOutputDestination());
|
|
||||||
logger.addDestination(debugDestination);
|
|
||||||
logger.addDestination(fileDestination);
|
|
||||||
|
|
||||||
QTranslator translator;
|
|
||||||
QString sufix = QLocale::system().name();
|
|
||||||
#if defined Q_OS_UNIX && !defined Q_OS_MAC
|
|
||||||
translator.load(QString(DATADIR)+"/yacreader/languages/yacreaderlibrary_"+sufix);
|
|
||||||
#else
|
|
||||||
translator.load(QCoreApplication::applicationDirPath()+"/languages/yacreaderlibrary_"+sufix);
|
|
||||||
#endif
|
|
||||||
app->installTranslator(&translator);
|
|
||||||
|
|
||||||
QTranslator viewerTranslator;
|
|
||||||
#if defined Q_OS_UNIX && !defined Q_OS_MAC
|
|
||||||
viewerTranslator.load(QString(DATADIR)+"/yacreader/languages/yacreader_"+sufix);
|
|
||||||
#else
|
|
||||||
viewerTranslator.load(QCoreApplication::applicationDirPath()+"/languages/yacreader_"+sufix);
|
|
||||||
#endif
|
|
||||||
app->installTranslator(&viewerTranslator);
|
|
||||||
|
|
||||||
qRegisterMetaType<ComicDB>("ComicDB");
|
|
||||||
|
|
||||||
QSettings * settings = new QSettings(YACReader::getSettingsPath()+"/"+QCoreApplication::applicationName()+".ini",QSettings::IniFormat);
|
|
||||||
settings->beginGroup("libraryConfig");
|
|
||||||
|
|
||||||
//server
|
|
||||||
Startup *s = new Startup();
|
|
||||||
s->start();
|
|
||||||
|
|
||||||
QLOG_INFO() << "YACReaderLibraryServer attempting to start";
|
|
||||||
|
|
||||||
logSystemAndConfig();
|
|
||||||
|
|
||||||
if(YACReaderLocalServer::isRunning()) //s�lo se permite una instancia de YACReaderLibrary
|
|
||||||
{
|
|
||||||
QLOG_WARN() << "another instance of YACReaderLibrary is running";
|
|
||||||
QsLogging::Logger::destroyInstance();
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
QLOG_INFO() << "YACReaderLibrary starting";
|
|
||||||
|
|
||||||
YACReaderLocalServer * localServer = new YACReaderLocalServer();
|
|
||||||
|
|
||||||
int ret = app->exec();
|
|
||||||
|
|
||||||
QLOG_INFO() << "YACReaderLibrary closed with exit code :" << ret;
|
|
||||||
|
|
||||||
//shutdown
|
|
||||||
s->stop();
|
|
||||||
delete s;
|
|
||||||
localServer->close();
|
|
||||||
delete localServer;
|
|
||||||
|
|
||||||
QsLogging::Logger::destroyInstance();
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
71
YACReaderLibrary/headless_config.pri
Normal file
71
YACReaderLibrary/headless_config.pri
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
#functions to automatically initialize some of YACReader's build options to
|
||||||
|
#default values if they're not set on build time
|
||||||
|
#for a more detailed description, see INSTALL.TXT
|
||||||
|
|
||||||
|
#check Qt version
|
||||||
|
QT_VERSION = $$[QT_VERSION]
|
||||||
|
QT_VERSION = $$split(QT_VERSION, ".")
|
||||||
|
QT_VER_MAJ = $$member(QT_VERSION, 0)
|
||||||
|
QT_VER_MIN = $$member(QT_VERSION, 1)
|
||||||
|
|
||||||
|
lessThan(QT_VER_MAJ, 5) {
|
||||||
|
error(YACReader requires Qt 5 or newer but Qt $$[QT_VERSION] was detected.)
|
||||||
|
}
|
||||||
|
lessThan(QT_VER_MIN, 3){
|
||||||
|
error ("You need at least Qt 5.3 to build YACReader or YACReaderLibrary")
|
||||||
|
}
|
||||||
|
!CONFIG(unarr):!CONFIG(7zip) {
|
||||||
|
unix {
|
||||||
|
!macx {
|
||||||
|
CONFIG+=unarr
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
CONFIG+=7zip
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
win32 {
|
||||||
|
CONFIG+=7zip
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
unix {
|
||||||
|
!macx {
|
||||||
|
packagesExist(QtCore) {
|
||||||
|
message("Found QtCore")
|
||||||
|
}
|
||||||
|
else: {
|
||||||
|
error("Missing dependency: QtCore")
|
||||||
|
}
|
||||||
|
packagesExist(QtGui) {
|
||||||
|
message("Found QtGui")
|
||||||
|
}
|
||||||
|
else: {
|
||||||
|
error("Missing dependency: QtGui")
|
||||||
|
}
|
||||||
|
packagesExist(poppler-qt5) {
|
||||||
|
message("Found poppler-qt5")
|
||||||
|
}
|
||||||
|
else: {
|
||||||
|
error("Missing dependency: poppler-qt5")
|
||||||
|
}
|
||||||
|
packagesExist(QtNetwork) {
|
||||||
|
message("Found QtNetwork")
|
||||||
|
}
|
||||||
|
else: {
|
||||||
|
error("Missing dependency: QtNetwork")
|
||||||
|
}
|
||||||
|
packagesExist(QtSql) {
|
||||||
|
message("Found QtSql")
|
||||||
|
}
|
||||||
|
else: {
|
||||||
|
error("Missing dependency: QtSql")
|
||||||
|
}
|
||||||
|
packagesExist(sqlite3) {
|
||||||
|
message("Found sqlite3")
|
||||||
|
}
|
||||||
|
else: {
|
||||||
|
error("Missing dependency: sqlite3")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -155,7 +155,7 @@ int main( int argc, char ** argv )
|
|||||||
|
|
||||||
app.setApplicationName("YACReaderLibrary");
|
app.setApplicationName("YACReaderLibrary");
|
||||||
app.setOrganizationName("YACReader");
|
app.setOrganizationName("YACReader");
|
||||||
app.setApplicationName(VERSION);
|
app.setApplicationVersion(VERSION);
|
||||||
|
|
||||||
app.setAttribute(Qt::AA_UseHighDpiPixmaps);
|
app.setAttribute(Qt::AA_UseHighDpiPixmaps);
|
||||||
|
|
||||||
|
@ -63,12 +63,18 @@ OptionsDialog::OptionsDialog(QWidget * parent)
|
|||||||
backgroundImageBlurRadiusSlider = new QSlider(Qt::Horizontal);
|
backgroundImageBlurRadiusSlider = new QSlider(Qt::Horizontal);
|
||||||
backgroundImageBlurRadiusSlider->setRange(0,100);
|
backgroundImageBlurRadiusSlider->setRange(0,100);
|
||||||
|
|
||||||
|
useCurrentComicCoverCheck = new QCheckBox(tr("Use selectec comic cover as background"));
|
||||||
|
|
||||||
|
resetButton = new QPushButton(tr("Restore defautls"));
|
||||||
|
|
||||||
QVBoxLayout * gridBackgroundLayout = new QVBoxLayout();
|
QVBoxLayout * gridBackgroundLayout = new QVBoxLayout();
|
||||||
gridBackgroundLayout->addWidget(useBackgroundImageCheck);
|
gridBackgroundLayout->addWidget(useBackgroundImageCheck);
|
||||||
gridBackgroundLayout->addWidget(opacityLabel);
|
gridBackgroundLayout->addWidget(opacityLabel);
|
||||||
gridBackgroundLayout->addWidget(backgroundImageOpacitySlider);
|
gridBackgroundLayout->addWidget(backgroundImageOpacitySlider);
|
||||||
gridBackgroundLayout->addWidget(blurLabel);
|
gridBackgroundLayout->addWidget(blurLabel);
|
||||||
gridBackgroundLayout->addWidget(backgroundImageBlurRadiusSlider);
|
gridBackgroundLayout->addWidget(backgroundImageBlurRadiusSlider);
|
||||||
|
gridBackgroundLayout->addWidget(useCurrentComicCoverCheck);
|
||||||
|
gridBackgroundLayout->addWidget(resetButton,0,Qt::AlignRight);
|
||||||
|
|
||||||
QGroupBox * gridBackgroundGroup = new QGroupBox(tr("Background"));
|
QGroupBox * gridBackgroundGroup = new QGroupBox(tr("Background"));
|
||||||
gridBackgroundGroup->setLayout(gridBackgroundLayout);
|
gridBackgroundGroup->setLayout(gridBackgroundLayout);
|
||||||
@ -79,6 +85,8 @@ OptionsDialog::OptionsDialog(QWidget * parent)
|
|||||||
connect(useBackgroundImageCheck, SIGNAL(clicked(bool)), this, SLOT(useBackgroundImageCheckClicked(bool)));
|
connect(useBackgroundImageCheck, SIGNAL(clicked(bool)), this, SLOT(useBackgroundImageCheckClicked(bool)));
|
||||||
connect(backgroundImageOpacitySlider, SIGNAL(valueChanged(int)), this, SLOT(backgroundImageOpacitySliderChanged(int)));
|
connect(backgroundImageOpacitySlider, SIGNAL(valueChanged(int)), this, SLOT(backgroundImageOpacitySliderChanged(int)));
|
||||||
connect(backgroundImageBlurRadiusSlider, SIGNAL(valueChanged(int)), this, SLOT(backgroundImageBlurRadiusSliderChanged(int)));
|
connect(backgroundImageBlurRadiusSlider, SIGNAL(valueChanged(int)), this, SLOT(backgroundImageBlurRadiusSliderChanged(int)));
|
||||||
|
connect(useCurrentComicCoverCheck, &QCheckBox::clicked, this, &OptionsDialog::useCurrentComicCoverCheckClicked);
|
||||||
|
connect(resetButton, &QPushButton::clicked, this, &OptionsDialog::resetToDefaults);
|
||||||
//end grid view background config
|
//end grid view background config
|
||||||
|
|
||||||
QWidget * comicFlowW = new QWidget;
|
QWidget * comicFlowW = new QWidget;
|
||||||
@ -125,11 +133,13 @@ void OptionsDialog::restoreOptions(QSettings * settings)
|
|||||||
useBackgroundImageCheck->setChecked(useBackgroundImage);
|
useBackgroundImageCheck->setChecked(useBackgroundImage);
|
||||||
backgroundImageOpacitySlider->setValue(settings->value(OPACITY_BACKGROUND_IMAGE_IN_GRID_VIEW, 0.2).toFloat()*100);
|
backgroundImageOpacitySlider->setValue(settings->value(OPACITY_BACKGROUND_IMAGE_IN_GRID_VIEW, 0.2).toFloat()*100);
|
||||||
backgroundImageBlurRadiusSlider->setValue(settings->value(BLUR_RADIUS_BACKGROUND_IMAGE_IN_GRID_VIEW, 75).toInt());
|
backgroundImageBlurRadiusSlider->setValue(settings->value(BLUR_RADIUS_BACKGROUND_IMAGE_IN_GRID_VIEW, 75).toInt());
|
||||||
|
useCurrentComicCoverCheck->setChecked(settings->value(USE_SELECTED_COMIC_COVER_AS_BACKGROUND_IMAGE_IN_GRID_VIEW, false).toBool());
|
||||||
|
|
||||||
backgroundImageOpacitySlider->setVisible(useBackgroundImage);
|
backgroundImageOpacitySlider->setVisible(useBackgroundImage);
|
||||||
backgroundImageBlurRadiusSlider->setVisible(useBackgroundImage);
|
backgroundImageBlurRadiusSlider->setVisible(useBackgroundImage);
|
||||||
opacityLabel->setVisible(useBackgroundImage);
|
opacityLabel->setVisible(useBackgroundImage);
|
||||||
blurLabel->setVisible(useBackgroundImage);
|
blurLabel->setVisible(useBackgroundImage);
|
||||||
|
useCurrentComicCoverCheck->setVisible(useBackgroundImage);
|
||||||
}
|
}
|
||||||
|
|
||||||
void OptionsDialog::useBackgroundImageCheckClicked(bool checked)
|
void OptionsDialog::useBackgroundImageCheckClicked(bool checked)
|
||||||
@ -140,6 +150,7 @@ void OptionsDialog::useBackgroundImageCheckClicked(bool checked)
|
|||||||
backgroundImageBlurRadiusSlider->setVisible(checked);
|
backgroundImageBlurRadiusSlider->setVisible(checked);
|
||||||
opacityLabel->setVisible(checked);
|
opacityLabel->setVisible(checked);
|
||||||
blurLabel->setVisible(checked);
|
blurLabel->setVisible(checked);
|
||||||
|
useCurrentComicCoverCheck->setVisible(checked);
|
||||||
|
|
||||||
emit optionsChanged();
|
emit optionsChanged();
|
||||||
}
|
}
|
||||||
@ -157,3 +168,21 @@ void OptionsDialog::backgroundImageBlurRadiusSliderChanged(int value)
|
|||||||
|
|
||||||
emit optionsChanged();
|
emit optionsChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void OptionsDialog::useCurrentComicCoverCheckClicked(bool checked)
|
||||||
|
{
|
||||||
|
settings->setValue(USE_SELECTED_COMIC_COVER_AS_BACKGROUND_IMAGE_IN_GRID_VIEW, checked);
|
||||||
|
|
||||||
|
emit optionsChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void OptionsDialog::resetToDefaults()
|
||||||
|
{
|
||||||
|
settings->setValue(OPACITY_BACKGROUND_IMAGE_IN_GRID_VIEW, 0.2);
|
||||||
|
settings->setValue(BLUR_RADIUS_BACKGROUND_IMAGE_IN_GRID_VIEW, 75);
|
||||||
|
settings->setValue(USE_SELECTED_COMIC_COVER_AS_BACKGROUND_IMAGE_IN_GRID_VIEW, false);
|
||||||
|
|
||||||
|
restoreOptions(settings);
|
||||||
|
|
||||||
|
emit optionsChanged();
|
||||||
|
}
|
||||||
|
@ -23,12 +23,16 @@ Q_OBJECT
|
|||||||
void useBackgroundImageCheckClicked(bool checked);
|
void useBackgroundImageCheckClicked(bool checked);
|
||||||
void backgroundImageOpacitySliderChanged(int value);
|
void backgroundImageOpacitySliderChanged(int value);
|
||||||
void backgroundImageBlurRadiusSliderChanged(int value);
|
void backgroundImageBlurRadiusSliderChanged(int value);
|
||||||
|
void useCurrentComicCoverCheckClicked(bool checked);
|
||||||
|
void resetToDefaults();
|
||||||
private:
|
private:
|
||||||
QCheckBox * useBackgroundImageCheck;
|
QCheckBox * useBackgroundImageCheck;
|
||||||
|
QCheckBox * useCurrentComicCoverCheck;
|
||||||
QSlider * backgroundImageOpacitySlider;
|
QSlider * backgroundImageOpacitySlider;
|
||||||
QSlider * backgroundImageBlurRadiusSlider;
|
QSlider * backgroundImageBlurRadiusSlider;
|
||||||
QLabel * opacityLabel;
|
QLabel * opacityLabel;
|
||||||
QLabel * blurLabel;
|
QLabel * blurLabel;
|
||||||
|
QPushButton * resetButton;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -314,10 +314,10 @@ Rectangle {
|
|||||||
}
|
}
|
||||||
|
|
||||||
YACReaderScrollView {
|
YACReaderScrollView {
|
||||||
|
__wheelAreaScrollSpeed: grid.cellHeight * 0.30
|
||||||
id: scrollView
|
id: scrollView
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
anchors.margins: 0
|
anchors.margins: 0
|
||||||
|
|
||||||
//QTBUG-39453
|
//QTBUG-39453
|
||||||
//Another fu%$·#& bug in Qt
|
//Another fu%$·#& bug in Qt
|
||||||
//https://bugreports.qt.io/browse/QTBUG-39453
|
//https://bugreports.qt.io/browse/QTBUG-39453
|
||||||
@ -373,7 +373,7 @@ Rectangle {
|
|||||||
objectName: "grid"
|
objectName: "grid"
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
cellHeight: cellCustomHeight
|
cellHeight: cellCustomHeight
|
||||||
highlight: appHighlight
|
//highlight: appHighlight
|
||||||
focus: true
|
focus: true
|
||||||
model: comicsList
|
model: comicsList
|
||||||
delegate: appDelegate
|
delegate: appDelegate
|
||||||
@ -432,7 +432,7 @@ Rectangle {
|
|||||||
var rest = width - (cWidth * wholeCells)
|
var rest = width - (cWidth * wholeCells)
|
||||||
|
|
||||||
grid.cellWidth = cWidth + Math.floor(rest / wholeCells);
|
grid.cellWidth = cWidth + Math.floor(rest / wholeCells);
|
||||||
console.log("cWidth",cWidth,"wholeCells=",wholeCells,"rest=",rest,"cellWidth=",cellWidth,"width=",width);
|
//console.log("cWidth",cWidth,"wholeCells=",wholeCells,"rest=",rest,"cellWidth=",cellWidth,"width=",width);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,38 +1,34 @@
|
|||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
**
|
**
|
||||||
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
|
** Copyright (C) 2015 The Qt Company Ltd.
|
||||||
** Contact: http://www.qt-project.org/legal
|
** Contact: http://www.qt.io/licensing/
|
||||||
**
|
**
|
||||||
** This file is part of the Qt Quick Controls module of the Qt Toolkit.
|
** This file is part of the Qt Quick Controls module of the Qt Toolkit.
|
||||||
**
|
**
|
||||||
** $QT_BEGIN_LICENSE:BSD$
|
** $QT_BEGIN_LICENSE:LGPL3$
|
||||||
** You may use this file under the terms of the BSD license as follows:
|
** Commercial License Usage
|
||||||
|
** Licensees holding valid commercial Qt licenses may use this file in
|
||||||
|
** accordance with the commercial license agreement provided with the
|
||||||
|
** Software or, alternatively, in accordance with the terms contained in
|
||||||
|
** a written agreement between you and The Qt Company. For licensing terms
|
||||||
|
** and conditions see http://www.qt.io/terms-conditions. For further
|
||||||
|
** information use the contact form at http://www.qt.io/contact-us.
|
||||||
**
|
**
|
||||||
** "Redistribution and use in source and binary forms, with or without
|
** GNU Lesser General Public License Usage
|
||||||
** modification, are permitted provided that the following conditions are
|
** Alternatively, this file may be used under the terms of the GNU Lesser
|
||||||
** met:
|
** General Public License version 3 as published by the Free Software
|
||||||
** * Redistributions of source code must retain the above copyright
|
** Foundation and appearing in the file LICENSE.LGPLv3 included in the
|
||||||
** notice, this list of conditions and the following disclaimer.
|
** packaging of this file. Please review the following information to
|
||||||
** * Redistributions in binary form must reproduce the above copyright
|
** ensure the GNU Lesser General Public License version 3 requirements
|
||||||
** notice, this list of conditions and the following disclaimer in
|
** will be met: https://www.gnu.org/licenses/lgpl.html.
|
||||||
** the documentation and/or other materials provided with the
|
|
||||||
** distribution.
|
|
||||||
** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
|
|
||||||
** of its contributors may be used to endorse or promote products derived
|
|
||||||
** from this software without specific prior written permission.
|
|
||||||
**
|
**
|
||||||
**
|
** GNU General Public License Usage
|
||||||
** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
** Alternatively, this file may be used under the terms of the GNU
|
||||||
** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
** General Public License version 2.0 or later as published by the Free
|
||||||
** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
** Software Foundation and appearing in the file LICENSE.GPL included in
|
||||||
** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
** the packaging of this file. Please review the following information to
|
||||||
** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
** ensure the GNU General Public License version 2.0 requirements will be
|
||||||
** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
** met: http://www.gnu.org/licenses/gpl-2.0.html.
|
||||||
** 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."
|
|
||||||
**
|
**
|
||||||
** $QT_END_LICENSE$
|
** $QT_END_LICENSE$
|
||||||
**
|
**
|
||||||
@ -50,6 +46,8 @@ import QtQuick.Controls.Styles 1.1
|
|||||||
\ingroup views
|
\ingroup views
|
||||||
\brief Provides a scrolling view within another Item.
|
\brief Provides a scrolling view within another Item.
|
||||||
|
|
||||||
|
\image scrollview.png
|
||||||
|
|
||||||
A ScrollView can be used either to replace a \l Flickable or decorate an
|
A ScrollView can be used either to replace a \l Flickable or decorate an
|
||||||
existing \l Flickable. Depending on the platform, it will add scroll bars and
|
existing \l Flickable. Depending on the platform, it will add scroll bars and
|
||||||
a content frame.
|
a content frame.
|
||||||
@ -81,7 +79,7 @@ import QtQuick.Controls.Styles 1.1
|
|||||||
\l flickableItem.
|
\l flickableItem.
|
||||||
|
|
||||||
You can create a custom appearance for a ScrollView by
|
You can create a custom appearance for a ScrollView by
|
||||||
assigning a \l {QtQuick.Controls.Styles::ScrollViewStyle}{ScrollViewStyle}.
|
assigning a \l {ScrollViewStyle}.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
FocusScope {
|
FocusScope {
|
||||||
@ -98,6 +96,36 @@ FocusScope {
|
|||||||
*/
|
*/
|
||||||
property bool frameVisible: false
|
property bool frameVisible: false
|
||||||
|
|
||||||
|
/*! \qmlproperty enumeration ScrollView::horizontalScrollBarPolicy
|
||||||
|
\since QtQuick.Controls 1.3
|
||||||
|
|
||||||
|
This property holds the policy for showing the horizontal scrollbar.
|
||||||
|
It can be any of the following values:
|
||||||
|
\list
|
||||||
|
\li Qt.ScrollBarAsNeeded
|
||||||
|
\li Qt.ScrollBarAlwaysOff
|
||||||
|
\li Qt.ScrollBarAlwaysOn
|
||||||
|
\endlist
|
||||||
|
|
||||||
|
The default policy is \c Qt.ScrollBarAsNeeded.
|
||||||
|
*/
|
||||||
|
property alias horizontalScrollBarPolicy: scroller.horizontalScrollBarPolicy
|
||||||
|
|
||||||
|
/*! \qmlproperty enumeration ScrollView::verticalScrollBarPolicy
|
||||||
|
\since QtQuick.Controls 1.3
|
||||||
|
|
||||||
|
This property holds the policy for showing the vertical scrollbar.
|
||||||
|
It can be any of the following values:
|
||||||
|
\list
|
||||||
|
\li Qt.ScrollBarAsNeeded
|
||||||
|
\li Qt.ScrollBarAlwaysOff
|
||||||
|
\li Qt.ScrollBarAlwaysOn
|
||||||
|
\endlist
|
||||||
|
|
||||||
|
The default policy is \c Qt.ScrollBarAsNeeded.
|
||||||
|
*/
|
||||||
|
property alias verticalScrollBarPolicy: scroller.verticalScrollBarPolicy
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
This property controls if there should be a highlight
|
This property controls if there should be a highlight
|
||||||
around the frame when the ScrollView has input focus.
|
around the frame when the ScrollView has input focus.
|
||||||
@ -152,7 +180,7 @@ FocusScope {
|
|||||||
\sa {Qt Quick Controls Styles QML Types}
|
\sa {Qt Quick Controls Styles QML Types}
|
||||||
|
|
||||||
*/
|
*/
|
||||||
property Component style: Qt.createComponent(Settings.style + "/ScrollViewStyle.qml", root)
|
property Component style: Settings.styleComponent(Settings.style, "ScrollViewStyle.qml", root)
|
||||||
|
|
||||||
/*! \internal */
|
/*! \internal */
|
||||||
property Style __style: styleLoader.item
|
property Style __style: styleLoader.item
|
||||||
@ -160,7 +188,7 @@ FocusScope {
|
|||||||
activeFocusOnTab: true
|
activeFocusOnTab: true
|
||||||
|
|
||||||
onContentItemChanged: {
|
onContentItemChanged: {
|
||||||
//console.log("onContentItemChanged");
|
|
||||||
if (contentItem.hasOwnProperty("contentY") && // Check if flickable
|
if (contentItem.hasOwnProperty("contentY") && // Check if flickable
|
||||||
contentItem.hasOwnProperty("contentHeight")) {
|
contentItem.hasOwnProperty("contentHeight")) {
|
||||||
internal.flickableItem = contentItem // "Use content if it is a flickable
|
internal.flickableItem = contentItem // "Use content if it is a flickable
|
||||||
@ -208,14 +236,12 @@ FocusScope {
|
|||||||
target: flickableItem
|
target: flickableItem
|
||||||
|
|
||||||
onContentYChanged: {
|
onContentYChanged: {
|
||||||
//console.log("onContentYChanged2");
|
|
||||||
scroller.blockUpdates = true
|
scroller.blockUpdates = true
|
||||||
scroller.verticalScrollBar.value = flickableItem.contentY
|
scroller.verticalScrollBar.value = flickableItem.contentY
|
||||||
scroller.blockUpdates = false
|
scroller.blockUpdates = false
|
||||||
}
|
}
|
||||||
|
|
||||||
onContentXChanged: {
|
onContentXChanged: {
|
||||||
//console.log("onContentXChanged2");
|
|
||||||
scroller.blockUpdates = true
|
scroller.blockUpdates = true
|
||||||
scroller.horizontalScrollBar.value = flickableItem.contentX
|
scroller.horizontalScrollBar.value = flickableItem.contentX
|
||||||
scroller.blockUpdates = false
|
scroller.blockUpdates = false
|
||||||
@ -233,13 +259,11 @@ FocusScope {
|
|||||||
WheelArea {
|
WheelArea {
|
||||||
id: wheelArea
|
id: wheelArea
|
||||||
parent: flickableItem
|
parent: flickableItem
|
||||||
|
z: -1
|
||||||
// ### Note this is needed due to broken mousewheel behavior in Flickable.
|
// ### Note this is needed due to broken mousewheel behavior in Flickable.
|
||||||
|
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
|
||||||
property int stepSize: 295
|
|
||||||
|
|
||||||
property int acceleration: 40
|
property int acceleration: 40
|
||||||
property int flickThreshold: Settings.dragThreshold
|
property int flickThreshold: Settings.dragThreshold
|
||||||
property real speedThreshold: 3
|
property real speedThreshold: 3
|
||||||
@ -255,17 +279,21 @@ FocusScope {
|
|||||||
verticalMinimumValue: flickableItem ? flickableItem.originY : 0
|
verticalMinimumValue: flickableItem ? flickableItem.originY : 0
|
||||||
verticalMaximumValue: flickableItem ? flickableItem.originY + flickableItem.contentHeight - viewport.height + __viewTopMargin : 0
|
verticalMaximumValue: flickableItem ? flickableItem.originY + flickableItem.contentHeight - viewport.height + __viewTopMargin : 0
|
||||||
|
|
||||||
|
// The default scroll speed for typical angle-based mouse wheels. The value
|
||||||
|
// comes originally from QTextEdit, which sets 20px steps by default, as well as
|
||||||
|
// QQuickWheelArea.
|
||||||
|
// TODO: centralize somewhere, QPlatformTheme?
|
||||||
|
scrollSpeed: 20 * (__style.__wheelScrollLines || 1)
|
||||||
|
|
||||||
Connections {
|
Connections {
|
||||||
target: flickableItem
|
target: flickableItem
|
||||||
|
|
||||||
onContentYChanged: {
|
onContentYChanged: {
|
||||||
//console.log("onContentYChanged");
|
|
||||||
wheelArea.verticalRecursionGuard = true
|
wheelArea.verticalRecursionGuard = true
|
||||||
wheelArea.verticalValue = flickableItem.contentY
|
wheelArea.verticalValue = flickableItem.contentY
|
||||||
wheelArea.verticalRecursionGuard = false
|
wheelArea.verticalRecursionGuard = false
|
||||||
}
|
}
|
||||||
onContentXChanged: {
|
onContentXChanged: {
|
||||||
//console.log("onContentXChanged");
|
|
||||||
wheelArea.horizontalRecursionGuard = true
|
wheelArea.horizontalRecursionGuard = true
|
||||||
wheelArea.horizontalValue = flickableItem.contentX
|
wheelArea.horizontalValue = flickableItem.contentX
|
||||||
wheelArea.horizontalRecursionGuard = false
|
wheelArea.horizontalRecursionGuard = false
|
||||||
@ -280,14 +308,8 @@ FocusScope {
|
|||||||
- flickThreshold - viewport.height && verticalDelta < -speedThreshold) {
|
- flickThreshold - viewport.height && verticalDelta < -speedThreshold) {
|
||||||
flickableItem.flick(ignored, Math.max(-maxFlick, acceleration * verticalDelta))
|
flickableItem.flick(ignored, Math.max(-maxFlick, acceleration * verticalDelta))
|
||||||
} else {
|
} else {
|
||||||
var absDelta = Math.abs(verticalDelta);
|
flickableItem.contentY = verticalValue
|
||||||
|
|
||||||
if(verticalDelta < 0)
|
|
||||||
flickableItem.contentY = Math.min(verticalMaximumValue, verticalValue + Math.min(98,0.93*absDelta+4.5));
|
|
||||||
else
|
|
||||||
flickableItem.contentY = Math.max(0, verticalValue - Math.min(98,0.93*absDelta+4.5));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
flickableItem.contentY = Math.min(verticalMaximumValue, Math.max(0, flickableItem.contentY));
|
flickableItem.contentY = Math.min(verticalMaximumValue, Math.max(0, flickableItem.contentY));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -10,10 +10,10 @@
|
|||||||
#include <QNetworkRequest>
|
#include <QNetworkRequest>
|
||||||
#include <QNetworkReply>
|
#include <QNetworkReply>
|
||||||
|
|
||||||
#define PREVIOUS_VERSION "6.0.0"
|
#define PREVIOUS_VERSION_TESTING "6.0.0"
|
||||||
|
|
||||||
HttpVersionChecker::HttpVersionChecker()
|
HttpVersionChecker::HttpVersionChecker()
|
||||||
:HttpWorker("https://bitbucket.org/luisangelsm/yacreader/wiki/Home")
|
:HttpWorker("https://bitbucket.org/luisangelsm/yacreader/wiki/Home")
|
||||||
{
|
{
|
||||||
connect(this,SIGNAL(dataReady(const QByteArray &)),this,SLOT(checkNewVersion(const QByteArray &)));
|
connect(this,SIGNAL(dataReady(const QByteArray &)),this,SLOT(checkNewVersion(const QByteArray &)));
|
||||||
}
|
}
|
||||||
@ -26,15 +26,15 @@ void HttpVersionChecker::checkNewVersion(const QByteArray & data)
|
|||||||
bool HttpVersionChecker::checkNewVersion(QString sourceContent)
|
bool HttpVersionChecker::checkNewVersion(QString sourceContent)
|
||||||
{
|
{
|
||||||
#ifdef Q_OS_WIN32
|
#ifdef Q_OS_WIN32
|
||||||
QRegExp rx(".*YACReader\\-([0-9]+).([0-9]+).([0-9]+)\\.?([0-9]+)?.{0,5}win32.*");
|
QRegExp rx("YACReader\\-([0-9]+).([0-9]+).([0-9]+)\\.?([0-9]+)?.{0,5}win32");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined Q_OS_UNIX && !defined Q_OS_MAC
|
#if defined Q_OS_UNIX && !defined Q_OS_MAC
|
||||||
QRegExp rx(".*YACReader\\-([0-9]+).([0-9]+).([0-9]+)\\.?([0-9]+)?.{0,5}X11.*");
|
QRegExp rx("YACReader\\-([0-9]+).([0-9]+).([0-9]+)\\.?([0-9]+)?.{0,5}X11");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef Q_OS_MAC
|
#ifdef Q_OS_MAC
|
||||||
QRegExp rx(".*YACReader\\-([0-9]+).([0-9]+).([0-9]+)\\.?([0-9]+)?.{0,5}Mac.*");
|
QRegExp rx("YACReader\\-([0-9]+).([0-9]+).([0-9]+)\\.?([0-9]+)?.{0,5}Mac");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int index = 0;
|
int index = 0;
|
||||||
@ -42,9 +42,9 @@ bool HttpVersionChecker::checkNewVersion(QString sourceContent)
|
|||||||
bool sameVersion = true;
|
bool sameVersion = true;
|
||||||
//bool currentVersionIsNewer = false;
|
//bool currentVersionIsNewer = false;
|
||||||
#ifdef QT_DEBUG
|
#ifdef QT_DEBUG
|
||||||
QString version(PREVIOUS_VERSION);
|
QString version(PREVIOUS_VERSION_TESTING);
|
||||||
#else
|
#else
|
||||||
QString version(VERSION);
|
QString version(VERSION);
|
||||||
#endif
|
#endif
|
||||||
QStringList sl = version.split(".");
|
QStringList sl = version.split(".");
|
||||||
if((index = rx.indexIn(sourceContent))!=-1)
|
if((index = rx.indexIn(sourceContent))!=-1)
|
||||||
@ -68,8 +68,6 @@ bool HttpVersionChecker::checkNewVersion(QString sourceContent)
|
|||||||
if((sl.size()==3)&&(rx.cap(4)!=""))
|
if((sl.size()==3)&&(rx.cap(4)!=""))
|
||||||
newVersion = true;
|
newVersion = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(newVersion == true)
|
if(newVersion == true)
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#define USE_BACKGROUND_IMAGE_IN_GRID_VIEW "USE_BACKGROUND_IMAGE_IN_GRID_VIEW"
|
#define USE_BACKGROUND_IMAGE_IN_GRID_VIEW "USE_BACKGROUND_IMAGE_IN_GRID_VIEW"
|
||||||
#define OPACITY_BACKGROUND_IMAGE_IN_GRID_VIEW "OPACITY_BACKGROUND_IMAGE_IN_GRID_VIEW"
|
#define OPACITY_BACKGROUND_IMAGE_IN_GRID_VIEW "OPACITY_BACKGROUND_IMAGE_IN_GRID_VIEW"
|
||||||
#define BLUR_RADIUS_BACKGROUND_IMAGE_IN_GRID_VIEW "BLUR_RADIUS_BACKGROUND_IMAGE_IN_GRID_VIEW"
|
#define BLUR_RADIUS_BACKGROUND_IMAGE_IN_GRID_VIEW "BLUR_RADIUS_BACKGROUND_IMAGE_IN_GRID_VIEW"
|
||||||
|
#define USE_SELECTED_COMIC_COVER_AS_BACKGROUND_IMAGE_IN_GRID_VIEW "USE_SELECTED_COMIC_COVER_AS_BACKGROUND_IMAGE_IN_GRID_VIEW"
|
||||||
|
|
||||||
#define NUM_DAYS_BETWEEN_VERSION_CHECKS "NUM_DAYS_BETWEEN_VERSION_CHECKS"
|
#define NUM_DAYS_BETWEEN_VERSION_CHECKS "NUM_DAYS_BETWEEN_VERSION_CHECKS"
|
||||||
#define LAST_VERSION_CHECK "LAST_VERSION_CHECK"
|
#define LAST_VERSION_CHECK "LAST_VERSION_CHECK"
|
||||||
|
@ -20,7 +20,7 @@ HEADERS+=$$PWD/unarr-master/common/allocator.h\
|
|||||||
$$PWD/unarr-master/lzmasdk/Ppmd.h\
|
$$PWD/unarr-master/lzmasdk/Ppmd.h\
|
||||||
$$PWD/unarr-master/lzmasdk/LzmaDec.h\
|
$$PWD/unarr-master/lzmasdk/LzmaDec.h\
|
||||||
$$PWD/unarr-master/lzmasdk/Ppmd8.h\
|
$$PWD/unarr-master/lzmasdk/Ppmd8.h\
|
||||||
$$PWD/unarr-master/lzmasdk/Types.h\
|
$$PWD/unarr-master/lzmasdk/7zTypes.h\
|
||||||
$$PWD/unarr-master/tar/tar.h\
|
$$PWD/unarr-master/tar/tar.h\
|
||||||
$$PWD/unarr-master/_7z/_7z.h\
|
$$PWD/unarr-master/_7z/_7z.h\
|
||||||
$$PWD/unarr-master/unarr.h
|
$$PWD/unarr-master/unarr.h
|
||||||
|
Loading…
x
Reference in New Issue
Block a user