mirror of
https://github.com/Quill-OS/quill.git
synced 2024-12-26 07:37:21 -08:00
Folders in local library: W.-I.-P.
This commit is contained in:
parent
6ac7d4c006
commit
cff3c2c69d
15 changed files with 864 additions and 320 deletions
|
@ -15,6 +15,8 @@
|
|||
<file>resources/close.png</file>
|
||||
<file>resources/chevron-left.png</file>
|
||||
<file>resources/chevron-right.png</file>
|
||||
<file>resources/chevron-down.png</file>
|
||||
<file>resources/chevron-up.png</file>
|
||||
<file>resources/christie.png</file>
|
||||
<file>resources/exit.png</file>
|
||||
<file>resources/usbms.png</file>
|
||||
|
@ -103,5 +105,7 @@
|
|||
<file>resources/checkbox-checked-small.png</file>
|
||||
<file>resources/checkbox-x-small.png</file>
|
||||
<file>resources/checkbox-x.png</file>
|
||||
<file>resources/folder.png</file>
|
||||
<file>resources/question-mark.png</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
|
|
|
@ -141,12 +141,16 @@ namespace global {
|
|||
static inline QString pinnedBooksDatabasePath = databaseDirectoryPath + "PinnedBooks.db";
|
||||
static inline QString highlightsDatabasePath = databaseDirectoryPath + "Highlights.db";
|
||||
static inline QString todoDatabasePath = databaseDirectoryPath + "ToDo.db";
|
||||
// Maximum signed integer value for 32-bit systems
|
||||
static inline int folderID = 2147483647;
|
||||
inline bool headless;
|
||||
namespace bookOptionsDialog {
|
||||
inline int bookID;
|
||||
inline bool deleteOption = true;
|
||||
inline bool bookDeleted;
|
||||
inline bool bookPinAction;
|
||||
inline QString folderPath;
|
||||
inline bool isFolder = false;
|
||||
}
|
||||
}
|
||||
namespace localStorage {
|
||||
|
|
|
@ -16,11 +16,14 @@ localLibraryWidget::localLibraryWidget(QWidget *parent) :
|
|||
ui->previousPageBtn->setProperty("type", "borderless");
|
||||
ui->previousPageBtn->setEnabled(false);
|
||||
ui->nextPageBtn->setProperty("type", "borderless");
|
||||
ui->goUpBtn->setProperty("type", "borderless");
|
||||
ui->pathBtn->setProperty("type", "borderless");
|
||||
ui->previousPageBtn->setIcon(QIcon(":/resources/chevron-left.png"));
|
||||
ui->nextPageBtn->setIcon(QIcon(":/resources/chevron-right.png"));
|
||||
ui->pageNumberLabel->setFont(QFont("Source Serif Pro"));
|
||||
ui->pageNumberLabel->setStyleSheet("color: black; background-color: white; border-radius: 10px; padding-left: 10px; padding-right: 10px");
|
||||
ui->verticalLayout->setSpacing(4);
|
||||
|
||||
ui->goUpBtn->setEnabled(false);
|
||||
|
||||
if(global::deviceID == "n705\n") {
|
||||
buttonsNumber = 3;
|
||||
|
@ -119,6 +122,17 @@ localLibraryWidget::localLibraryWidget(QWidget *parent) :
|
|||
showToast("Generating database");
|
||||
}
|
||||
QTimer::singleShot(100, this, SLOT(setupDisplay()));
|
||||
|
||||
if(checkconfig("/mnt/onboard/.adds/inkbox/.config/21-local_library/folders") == false) {
|
||||
folderFeatureEnabled = true;
|
||||
ui->goUpBtn->hide();
|
||||
ui->pathBtn->hide();
|
||||
ui->goUpBtn->deleteLater();
|
||||
ui->pathBtn->deleteLater();
|
||||
}
|
||||
else {
|
||||
folderFeatureEnabled = false;
|
||||
}
|
||||
}
|
||||
|
||||
localLibraryWidget::~localLibraryWidget()
|
||||
|
@ -178,7 +192,12 @@ void localLibraryWidget::setupDatabase() {
|
|||
databaseJsonArrayList = databaseJsonObject["database"].toArray();
|
||||
// Determine maximum page number
|
||||
booksNumber = databaseJsonArrayList.size();
|
||||
pagesNumber = std::ceil((double)booksNumber / buttonsNumber);
|
||||
if(folderFeatureEnabled == false) {
|
||||
pagesNumber = std::ceil((double)booksNumber / buttonsNumber);
|
||||
}
|
||||
else {
|
||||
calculateMaximumPagesNumberForFolders();
|
||||
}
|
||||
if(databaseJsonArrayList.isEmpty()) {
|
||||
log("Database is empty", className);
|
||||
noBooksInDatabase = true;
|
||||
|
@ -278,8 +297,19 @@ void localLibraryWidget::setupBooksList(int pageNumber) {
|
|||
|
||||
void localLibraryWidget::on_previousPageBtn_clicked()
|
||||
{
|
||||
log("Previous button clicked", className);
|
||||
|
||||
if(folderFeatureEnabled == true) {
|
||||
log("Decreasing bookIndexVector by buttonsNumber", className);
|
||||
bookIndexVector = (bookIndexVector - goBackInIndex) - buttonsNumber;
|
||||
if(bookIndexVector < 0) {
|
||||
log("Error: Shouldn't be possible to get here", className);
|
||||
bookIndexVector = 0;
|
||||
}
|
||||
}
|
||||
|
||||
currentPageNumber--;
|
||||
setupBooksList(currentPageNumber);
|
||||
setupBooksListToggle(currentPageNumber);
|
||||
|
||||
pagesTurned = pagesTurned + 1;
|
||||
if(pagesTurned >= 3) {
|
||||
|
@ -292,7 +322,7 @@ void localLibraryWidget::on_previousPageBtn_clicked()
|
|||
void localLibraryWidget::on_nextPageBtn_clicked()
|
||||
{
|
||||
currentPageNumber++;
|
||||
setupBooksList(currentPageNumber);
|
||||
setupBooksListToggle(currentPageNumber);
|
||||
|
||||
pagesTurned = pagesTurned + 1;
|
||||
if(pagesTurned >= 3) {
|
||||
|
@ -309,9 +339,22 @@ void localLibraryWidget::openBook(int bookID) {
|
|||
}
|
||||
|
||||
void localLibraryWidget::btnOpenBook(int buttonNumber) {
|
||||
log("Book/directory button clicked, buttonNumber is " + QString::number(buttonNumber), className);
|
||||
int id = idList.at(buttonNumber - 1);
|
||||
openBook(id);
|
||||
localLibraryWidget::close();
|
||||
if(id == global::localLibrary::folderID) {
|
||||
if(folderFeatureEnabled == true) {
|
||||
log("A folder was selected", className);
|
||||
QString directory = bookBtnArray[buttonNumber]->text();
|
||||
log("Chosen directory is '" + directory + "'", className);
|
||||
ui->goUpBtn->setEnabled(true);
|
||||
changePathAndRefresh(directory);
|
||||
}
|
||||
}
|
||||
else {
|
||||
log("A book was selected", className);
|
||||
openBook(id);
|
||||
localLibraryWidget::close();
|
||||
}
|
||||
}
|
||||
|
||||
void localLibraryWidget::openGoToPageDialog() {
|
||||
|
@ -328,8 +371,11 @@ void localLibraryWidget::goToPage(int page) {
|
|||
showToast("Request is beyond page range");
|
||||
}
|
||||
else {
|
||||
if(folderFeatureEnabled == true) {
|
||||
calculateIndexForPage(page);
|
||||
}
|
||||
log("Going to page " + QString::number(page), className);
|
||||
setupBooksList(page);
|
||||
setupBooksListToggle(page);
|
||||
emit refreshScreen();
|
||||
}
|
||||
}
|
||||
|
@ -343,10 +389,10 @@ void localLibraryWidget::setupDisplay() {
|
|||
if(noBooksInDatabase == false) {
|
||||
// Prevent segmentation fault if a book was the last of its page
|
||||
if(currentPageNumber > pagesNumber) {
|
||||
setupBooksList(currentPageNumber - 1);
|
||||
setupBooksListToggle(currentPageNumber - 1);
|
||||
}
|
||||
else {
|
||||
setupBooksList(currentPageNumber);
|
||||
setupBooksListToggle(currentPageNumber);
|
||||
}
|
||||
}
|
||||
else {
|
||||
|
@ -366,7 +412,26 @@ void localLibraryWidget::showToast(QString messageToDisplay) {
|
|||
|
||||
void localLibraryWidget::openBookOptionsDialog(int pseudoBookID) {
|
||||
// Determine book ID from the book's button number
|
||||
// pseudoBookID represents the button's number
|
||||
int bookID = ((currentPageNumber * buttonsNumber) - (buttonsNumber - 1)) + (pseudoBookID - 1);
|
||||
log("BookID is " + QString::number(bookID), className);
|
||||
int id = idList.at(pseudoBookID - 1);
|
||||
log("ID from database is " + QString::number(id), className);
|
||||
|
||||
if(id == global::localLibrary::folderID) {
|
||||
if(folderFeatureEnabled == true) {
|
||||
bookID = id;
|
||||
log("Opening options dialog for directory", className);
|
||||
QString directoryPath = bookBtnArray[pseudoBookID]->text();
|
||||
log("Directory path is '" + directoryPath + "'", className);
|
||||
global::localLibrary::bookOptionsDialog::isFolder = true;
|
||||
global::localLibrary::bookOptionsDialog::folderPath = pathForFolders + directoryPath;
|
||||
}
|
||||
}
|
||||
else {
|
||||
global::localLibrary::bookOptionsDialog::isFolder = false;
|
||||
global::localLibrary::bookOptionsDialog::folderPath = "";
|
||||
}
|
||||
|
||||
log("Opening book options dialog for book with pseudo-ID " + QString::number(pseudoBookID) + ", ID " + QString::number(bookID), className);
|
||||
global::localLibrary::bookOptionsDialog::bookID = bookID;
|
||||
|
@ -374,6 +439,7 @@ void localLibraryWidget::openBookOptionsDialog(int pseudoBookID) {
|
|||
QObject::connect(bookOptionsDialogWindow, &bookOptionsDialog::openLocalBookInfoDialog, this, &localLibraryWidget::openLocalBookInfoDialog);
|
||||
QObject::connect(bookOptionsDialogWindow, &bookOptionsDialog::showToast, this, &localLibraryWidget::showToast);
|
||||
QObject::connect(bookOptionsDialogWindow, &bookOptionsDialog::destroyed, this, &localLibraryWidget::handlePossibleBookDeletion);
|
||||
QObject::connect(bookOptionsDialogWindow, &bookOptionsDialog::removedFolder, this, &localLibraryWidget::refreshFolders);
|
||||
bookOptionsDialogWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
bookOptionsDialogWindow->setWindowFlags(Qt::FramelessWindowHint | Qt::Popup);
|
||||
bookOptionsDialogWindow->show();
|
||||
|
@ -397,3 +463,299 @@ void localLibraryWidget::openLocalBookInfoDialog() {
|
|||
bookInfoDialogWindow->setAttribute(Qt::WA_DeleteOnClose);
|
||||
bookInfoDialogWindow->show();
|
||||
}
|
||||
|
||||
void localLibraryWidget::setupBooksListToggle(int pageNumber) {
|
||||
if(checkconfig("/mnt/onboard/.adds/inkbox/.config/21-local_library/folders") == true) {
|
||||
setupBooksListFolders(pageNumber);
|
||||
}
|
||||
else {
|
||||
setupBooksList(pageNumber);
|
||||
}
|
||||
}
|
||||
|
||||
void localLibraryWidget::setupBooksListFolders(int pageNumber) {
|
||||
log("Showing local library with folders", className);
|
||||
QStringList dirList = QDir(pathForFolders).entryList(QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name);
|
||||
log("Full directory list: "+ dirList.join(","), className);
|
||||
|
||||
// This part is calculating which folders to show per page
|
||||
QStringList directoryListFront = dirList;
|
||||
QStringList directoryListBack = dirList;
|
||||
int pageNumberAbove = pageNumber;
|
||||
while(pageNumberAbove != 1) {
|
||||
for (int i = 0; i < buttonsNumber; ++i) {
|
||||
if(directoryListFront.isEmpty() == false) {
|
||||
directoryListFront.removeFirst();
|
||||
}
|
||||
}
|
||||
pageNumberAbove = pageNumberAbove - 1;
|
||||
}
|
||||
log("Front directory list: " + directoryListFront.join(","), className);
|
||||
|
||||
int aboveRemove = pageNumber * buttonsNumber;
|
||||
if(directoryListBack.count() > aboveRemove) {
|
||||
while(directoryListBack.count() > aboveRemove) {
|
||||
if(directoryListBack.isEmpty() == false) {
|
||||
directoryListBack.removeLast();
|
||||
}
|
||||
}
|
||||
}
|
||||
log("Back directory list: " + directoryListBack.join(","), className);
|
||||
|
||||
QStringList directoryListPure;
|
||||
for(QString directory: directoryListFront) {
|
||||
if(directoryListBack.contains(directory) == true) {
|
||||
directoryListPure.append(directory);
|
||||
}
|
||||
}
|
||||
log("Final directory list: " + directoryListPure.join(","), className);
|
||||
|
||||
idList.clear();
|
||||
int in = 1;
|
||||
int directoryCount = 0; // I want to start at 0
|
||||
goBackInIndex = 0;
|
||||
for(int i = (1 * pageNumber * buttonsNumber) - (buttonsNumber - 1); i <= (1 * pageNumber * buttonsNumber); i++) {
|
||||
if(directoryListPure.count() != directoryCount) {
|
||||
// Insert a folder if here
|
||||
log("Showing a folder for index " + QString::number(i), className);
|
||||
|
||||
// Show it, it may be hidden
|
||||
bookIconArray[in]->show();
|
||||
bookBtnArray[in]->show();
|
||||
if(buttonsNumber - in > 0) {
|
||||
lineArray[in]->show();
|
||||
}
|
||||
|
||||
bookBtnArray[in]->setText("<font face='Inter'><b>" + directoryListPure.at(directoryCount) + "</b></font>");
|
||||
bookIconArray[in]->setPixmap(pixmapForFolder.scaled(stdIconWidth, stdIconHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation));
|
||||
|
||||
// ID for indicating that it's a folder in btnOpenBook
|
||||
idList.append(global::localLibrary::folderID);
|
||||
directoryCount = directoryCount + 1;
|
||||
in++;
|
||||
}
|
||||
else {
|
||||
// Show a book otherwise
|
||||
log("bookIndexVector used: " + QString::number(bookIndexVector), className);
|
||||
log("Showing a book for index: " + QString::number(i), className);
|
||||
// Read database info for each book and display the corresponding information on each button
|
||||
bookIconArray[in]->show();
|
||||
bookBtnArray[in]->show();
|
||||
if(buttonsNumber - in > 0) {
|
||||
lineArray[in]->show();
|
||||
}
|
||||
|
||||
// If a book is missing, it's propably because of '>='
|
||||
if(bookIndexVector >= booksListForPathIndex.count()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
QJsonObject jsonObject = databaseJsonArrayList.at(booksListForPathIndex.at(bookIndexVector)).toObject();
|
||||
QString bookTitle = jsonObject["Title"].toString();
|
||||
QString bookAuthor = jsonObject["Author"].toString();
|
||||
QString coverPath = jsonObject["CoverPath"].toString();
|
||||
QString bookID = jsonObject["BookID"].toString();
|
||||
|
||||
if(!coverPath.isEmpty()) {
|
||||
// Display book cover if found
|
||||
QPixmap pixmap(coverPath);
|
||||
bookIconArray[in]->setPixmap(pixmap.scaled(stdIconWidth, stdIconHeight, Qt::KeepAspectRatio));
|
||||
}
|
||||
else {
|
||||
QPixmap pixmap(":/resources/cover_unavailable.png");
|
||||
bookIconArray[in]->setPixmap(pixmap.scaled(stdIconWidth, stdIconHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation));
|
||||
}
|
||||
|
||||
// Display book title
|
||||
idList.append(bookID.toInt());
|
||||
if(bookTitle.length() > bookTitleTruncateThreshold) {
|
||||
bookTitle.truncate(bookTitleTruncateThreshold);
|
||||
bookTitle.append("...");
|
||||
}
|
||||
if(!bookAuthor.isEmpty()) {
|
||||
// Book is likely an ePUB
|
||||
bookBtnArray[in]->setText("<font face='Inter'><b>" + bookTitle + "</b></font>" + "<br>" + bookAuthor);
|
||||
}
|
||||
else {
|
||||
// Book is likely a PDF or a picture
|
||||
bookBtnArray[in]->setText("<font face='Inter'><b>" + bookTitle + "</b></font>");
|
||||
}
|
||||
if(!bookID.isEmpty()) {
|
||||
in++;
|
||||
}
|
||||
bookIndexVector = bookIndexVector + 1;
|
||||
}
|
||||
goBackInIndex = goBackInIndex + 1;
|
||||
}
|
||||
|
||||
if(in <= buttonsNumber) {
|
||||
for(int i = in; i <= buttonsNumber; i++) {
|
||||
log("Hiding items in LocalLibrary", className);
|
||||
bookIconArray[i]->hide();
|
||||
bookBtnArray[i]->hide();
|
||||
if(i - 1 < buttonsNumber) {
|
||||
lineArray[(i - 1)]->hide();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ui->pageNumberLabel->setText(QString::number(pageNumber) + " <i>of</i> " + QString::number(pagesNumber));
|
||||
// NOTICE: Memory leak?
|
||||
// Do it twice, otherwise the layout doesn't show as intended
|
||||
for(int i = 0; i <= 1; i++) {
|
||||
ui->verticalLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding));
|
||||
}
|
||||
|
||||
// Set boundaries for 'Previous'/'Next' page turn buttons
|
||||
currentPageNumber = pageNumber;
|
||||
ui->previousPageBtn->setEnabled(true);
|
||||
ui->nextPageBtn->setEnabled(true);
|
||||
if(currentPageNumber - 1 < 1) {
|
||||
ui->previousPageBtn->setEnabled(false);
|
||||
ui->nextPageBtn->setEnabled(true);
|
||||
}
|
||||
if(currentPageNumber + 1 > pagesNumber) {
|
||||
ui->previousPageBtn->setEnabled(true);
|
||||
ui->nextPageBtn->setEnabled(false);
|
||||
}
|
||||
if(currentPageNumber - 1 < 1 and currentPageNumber + 1 > pagesNumber) {
|
||||
ui->previousPageBtn->setEnabled(false);
|
||||
ui->nextPageBtn->setEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
// Sets pagesNumber for folders feature, and everything else
|
||||
void localLibraryWidget::calculateMaximumPagesNumberForFolders() {
|
||||
log("Main path is '" + pathForFolders + "'", className);
|
||||
|
||||
// Look for books in this path
|
||||
booksListForPathIndex.clear();
|
||||
int count = 0;
|
||||
for(QJsonValue object: databaseJsonArrayList) {
|
||||
QString bookPath = object.toObject()["BookPath"].toString();
|
||||
QString bookDirPath = QFileInfo(bookPath).absoluteDir().path();
|
||||
|
||||
if(bookDirPath.at(bookDirPath.count() - 1) == "/") {
|
||||
bookDirPath = bookDirPath.remove(bookDirPath.count() - 1, 1);
|
||||
}
|
||||
|
||||
QString temporaryPathForFolders = pathForFolders;
|
||||
if(temporaryPathForFolders.at(temporaryPathForFolders.count() - 1) == "/") {
|
||||
temporaryPathForFolders = temporaryPathForFolders.remove(temporaryPathForFolders.count() - 1, 1);
|
||||
}
|
||||
|
||||
if(bookDirPath == temporaryPathForFolders) {
|
||||
booksListForPathIndex.append(count);
|
||||
}
|
||||
count = count + 1;
|
||||
}
|
||||
QStringList list;
|
||||
foreach (int number, booksListForPathIndex) {
|
||||
list.append(QString::number(number));
|
||||
}
|
||||
|
||||
directoryListCount = QDir(pathForFolders).entryList(QDir::Dirs | QDir::NoDotAndDotDot, QDir::Name).count();
|
||||
log("Directories count in directory: " + QString::number(directoryListCount), className);
|
||||
completeItemsList = booksListForPathIndex.count() + directoryListCount;
|
||||
log("All items: " + QString::number(completeItemsList), className);
|
||||
|
||||
pagesNumber = std::ceil((double)completeItemsList / buttonsNumber);
|
||||
|
||||
log("Total pages: " + QString::number(pagesNumber), className);
|
||||
|
||||
// This is the last page full of folders
|
||||
firstPageForBooks = (QString::number(float(directoryListCount) / buttonsNumber).split(".").first()).toInt();
|
||||
log("There are so many pages with folders: " + QString::number(firstPageForBooks), className);
|
||||
|
||||
// This indicates how much folders are after firstPageForBooks. It's always less than buttonsNumber
|
||||
lastPageFolderCount = directoryListCount;
|
||||
while(lastPageFolderCount >= buttonsNumber) {
|
||||
lastPageFolderCount = lastPageFolderCount - buttonsNumber;
|
||||
}
|
||||
log("Start after item on the last page: " + QString::number(lastPageFolderCount), className);
|
||||
|
||||
// Sorting the vector if needed should be done here
|
||||
}
|
||||
|
||||
void localLibraryWidget::calculateIndexForPage(int pageNumber) {
|
||||
if(pageNumber == firstPageForBooks + 1) {
|
||||
log("Variable firstPageForBooks is 0", className);
|
||||
bookIndexVector = 0;
|
||||
return void();
|
||||
}
|
||||
|
||||
if(pageNumber == firstPageForBooks + 2) {
|
||||
log("The page is just after firstPageForBooks", className);
|
||||
bookIndexVector = buttonsNumber - lastPageFolderCount;
|
||||
return void();
|
||||
}
|
||||
else if(pageNumber > firstPageForBooks + 2) {
|
||||
bookIndexVector = buttonsNumber - lastPageFolderCount;
|
||||
int pageUntilGoal = 1;
|
||||
int pageDifference = pageNumber - (firstPageForBooks + 2);
|
||||
log("Variable firstPageForBooks is " + QString::number(firstPageForBooks), className);
|
||||
log("Variable pageDifference is " + QString::number(pageDifference), className);
|
||||
if(pageDifference != 0) {
|
||||
while(pageUntilGoal != pageDifference) {
|
||||
log("Looping for pageUntilGoal");
|
||||
bookIndexVector = bookIndexVector + buttonsNumber;
|
||||
pageUntilGoal++;
|
||||
}
|
||||
}
|
||||
bookIndexVector = bookIndexVector + buttonsNumber;
|
||||
log("Calculated bookIndexVector is " + QString::number(bookIndexVector), className);
|
||||
}
|
||||
else {
|
||||
log("Variable pageNumber isn't higher than firstPageForBooks", className);
|
||||
bookIndexVector = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void localLibraryWidget::changePathAndRefresh(QString directory) {
|
||||
log("Changing path", className);
|
||||
QString temporaryPathForFolders = pathForFolders + directory + "/";
|
||||
if(QDir(temporaryPathForFolders).isEmpty() == false) {
|
||||
pathForFolders = temporaryPathForFolders;
|
||||
calculateMaximumPagesNumberForFolders();
|
||||
bookIndexVector = 0;
|
||||
goToPage(1);
|
||||
}
|
||||
else {
|
||||
showToast("Directory is empty");
|
||||
}
|
||||
}
|
||||
|
||||
void localLibraryWidget::on_goUpBtn_clicked()
|
||||
{
|
||||
if(pathForFolders != "/mnt/onboard/onboard/") {
|
||||
log("Changing path; going back", className);
|
||||
// This can't be a one-liner
|
||||
QDir temporaryPathForFolders = QDir(pathForFolders);
|
||||
temporaryPathForFolders.cdUp();
|
||||
pathForFolders = temporaryPathForFolders.path();
|
||||
pathForFolders = pathForFolders + "/";
|
||||
if(pathForFolders == "/mnt/onboard/onboard/") {
|
||||
ui->goUpBtn->setDisabled(true);
|
||||
}
|
||||
log("New path is '" + pathForFolders + "'", className);
|
||||
|
||||
calculateMaximumPagesNumberForFolders();
|
||||
bookIndexVector = 0;
|
||||
goToPage(1);
|
||||
}
|
||||
}
|
||||
|
||||
void localLibraryWidget::on_pathBtn_clicked()
|
||||
{
|
||||
log("Showing path dialog", className);
|
||||
QString pathForFoldersSaved = pathForFolders;
|
||||
showToast(pathForFolders.remove(0, 20));
|
||||
pathForFolders = pathForFoldersSaved;
|
||||
}
|
||||
|
||||
void localLibraryWidget::refreshFolders() {
|
||||
log("Called refresh folders");
|
||||
calculateMaximumPagesNumberForFolders();
|
||||
bookIndexVector = 0;
|
||||
goToPage(1);
|
||||
}
|
||||
|
|
|
@ -41,6 +41,19 @@ public:
|
|||
int bookTitleTruncateThreshold;
|
||||
QVector<int> idList;
|
||||
bool noBooksInDatabase = true;
|
||||
// For folder feature
|
||||
QString pathForFolders = "/mnt/onboard/onboard/";
|
||||
bool folderFeatureEnabled = false;
|
||||
int firstPageForBooks;
|
||||
int lastPageFolderCount;
|
||||
int bookIndexVector = 0;
|
||||
int goBackInIndex = 0;
|
||||
QPixmap pixmapForFolder = QPixmap(":/resources/folder.png");
|
||||
QVector<int> booksListForPathIndex;
|
||||
int fileListCount;
|
||||
int directoryListCount;
|
||||
int completeItemsList;
|
||||
|
||||
|
||||
private slots:
|
||||
void setupDatabase();
|
||||
|
@ -57,6 +70,16 @@ private slots:
|
|||
void openBookOptionsDialog(int pseudoBookID);
|
||||
void handlePossibleBookDeletion();
|
||||
void openLocalBookInfoDialog();
|
||||
// For folder feature
|
||||
void setupBooksListFolders(int pageNumber);
|
||||
void setupBooksListToggle(int pageNumber);
|
||||
void calculateMaximumPagesNumberForFolders();
|
||||
void calculateIndexForPage(int pageNumber);
|
||||
// Dir without "/" at the end and begining
|
||||
void changePathAndRefresh(QString directory);
|
||||
void refreshFolders();
|
||||
void on_goUpBtn_clicked();
|
||||
void on_pathBtn_clicked();
|
||||
|
||||
private:
|
||||
Ui::localLibraryWidget * ui;
|
||||
|
|
|
@ -43,14 +43,31 @@
|
|||
</property>
|
||||
<item>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="6">
|
||||
<item row="0" column="3">
|
||||
<widget class="QPushButton" name="pathBtn">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../eink.qrc">
|
||||
<normaloff>:/resources/question-mark.png</normaloff>:/resources/question-mark.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="9">
|
||||
<widget class="QPushButton" name="nextPageBtn">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="4">
|
||||
<item row="0" column="7">
|
||||
<widget class="QClickableLabel" name="pageNumberLabel" native="true">
|
||||
<property name="text" stdset="0">
|
||||
<string/>
|
||||
|
@ -58,22 +75,13 @@
|
|||
</widget>
|
||||
</item>
|
||||
<item row="0" column="5">
|
||||
<spacer name="horizontalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
<widget class="QPushButton" name="previousPageBtn">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Maximum</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="3">
|
||||
<item row="0" column="6">
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
|
@ -89,7 +97,23 @@
|
|||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<item row="0" column="8">
|
||||
<spacer name="horizontalSpacer_3">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::Maximum</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="0" column="4">
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
|
@ -106,10 +130,20 @@
|
|||
</spacer>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QPushButton" name="previousPageBtn">
|
||||
<widget class="QPushButton" name="goUpBtn">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="icon">
|
||||
<iconset resource="../eink.qrc">
|
||||
<normaloff>:/resources/chevron-up.png</normaloff>:/resources/chevron-up.png</iconset>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
|
@ -125,6 +159,19 @@
|
|||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<spacer name="horizontalSpacer_4">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
|
@ -212,6 +259,8 @@ Add some via USB or explore the Online Library.</string>
|
|||
<header>qclickablelabel.h</header>
|
||||
</customwidget>
|
||||
</customwidgets>
|
||||
<resources/>
|
||||
<resources>
|
||||
<include location="../eink.qrc"/>
|
||||
</resources>
|
||||
<connections/>
|
||||
</ui>
|
||||
|
|
BIN
src/resources/chevron-down.png
Normal file
BIN
src/resources/chevron-down.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.8 KiB |
BIN
src/resources/chevron-up.png
Normal file
BIN
src/resources/chevron-up.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.8 KiB |
BIN
src/resources/folder.png
Normal file
BIN
src/resources/folder.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 3.7 KiB |
BIN
src/resources/question-mark.png
Normal file
BIN
src/resources/question-mark.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 11 KiB |
|
@ -338,6 +338,11 @@ settings::settings(QWidget *parent) :
|
|||
ui->tzComboBox->setCurrentText(readFile(".config/19-timezone/config-name"));
|
||||
}
|
||||
|
||||
// Local library folders support
|
||||
if(checkconfig(".config/21-local_library/folders") == true) {
|
||||
ui->localLibraryShowFoldersCheckBox->click();
|
||||
}
|
||||
|
||||
if(checkconfig("/opt/inkbox_genuine") == true) {
|
||||
// Enforcing security policy if the user has not rooted the device
|
||||
if(checkconfig("/external_root/opt/root/rooted") == true) {
|
||||
|
@ -1089,3 +1094,19 @@ void settings::on_pageSizeWidthIncBtn_clicked()
|
|||
pageSizeWidthSaved = pageSizeWidthSaved + 5;
|
||||
ui->pageSizeWidthLabel->setText(QString::number(pageSizeWidthSaved));
|
||||
}
|
||||
|
||||
void settings::on_localLibraryShowFoldersCheckBox_toggled(bool checked)
|
||||
{
|
||||
QString settingString = "local library folders support";
|
||||
if(checked == true) {
|
||||
logEnabled(settingString, className);
|
||||
checked_box = true;
|
||||
writeconfig(".config/21-local_library/folders", "Folders");
|
||||
}
|
||||
else {
|
||||
logDisabled(settingString, className);
|
||||
checked_box = false;
|
||||
writeconfig(".config/21-local_library/folders", "Folders");
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -76,6 +76,8 @@ private slots:
|
|||
void on_pageSizeWidthDecBtn_clicked();
|
||||
void on_pageSizeWidthIncBtn_clicked();
|
||||
|
||||
void on_localLibraryShowFoldersCheckBox_toggled(bool checked);
|
||||
|
||||
signals:
|
||||
void showToast(QString messageToDisplay);
|
||||
void closeIndefiniteToast();
|
||||
|
|
|
@ -68,8 +68,8 @@
|
|||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>457</width>
|
||||
<height>667</height>
|
||||
<width>463</width>
|
||||
<height>632</height>
|
||||
</rect>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||
|
@ -118,139 +118,6 @@
|
|||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="22" column="0">
|
||||
<widget class="Line" name="line_3">
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="13" column="0">
|
||||
<widget class="QCheckBox" name="demoCheckBox">
|
||||
<property name="text">
|
||||
<string>Disable "Welcome to InkBox" message</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="21" column="0">
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>Chivo</family>
|
||||
<italic>true</italic>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>USB networking</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="18" column="0">
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>Chivo</family>
|
||||
<weight>50</weight>
|
||||
<italic>true</italic>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Storage</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QCheckBox" name="readerScrollBarCheckBox">
|
||||
<property name="text">
|
||||
<string>Show scroll bar if needed</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_7">
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>Chivo</family>
|
||||
<weight>50</weight>
|
||||
<italic>true</italic>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Reading</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="19" column="0">
|
||||
<widget class="Line" name="line_7">
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<widget class="QCheckBox" name="globalReadingSettingsCheckBox">
|
||||
<property name="text">
|
||||
<string>Global reading settings</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="Line" name="line_8">
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="11" column="0">
|
||||
<widget class="QCheckBox" name="clockCheckBox">
|
||||
<property name="text">
|
||||
<string>Clock: Show seconds</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="10" column="0">
|
||||
<widget class="Line" name="line_6">
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="9" column="0">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>Chivo</family>
|
||||
<weight>50</weight>
|
||||
<italic>true</italic>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Home</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="12" column="0">
|
||||
<widget class="QCheckBox" name="quoteCheckBox">
|
||||
<property name="text">
|
||||
<string>Disable authors quotes</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<layout class="QGridLayout" name="gridLayout_15">
|
||||
<property name="bottomMargin">
|
||||
|
@ -363,6 +230,230 @@
|
|||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_7">
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>Chivo</family>
|
||||
<weight>50</weight>
|
||||
<italic>true</italic>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Reading</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="11" column="0">
|
||||
<widget class="QCheckBox" name="clockCheckBox">
|
||||
<property name="text">
|
||||
<string>Clock: Show seconds</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="21" column="0">
|
||||
<widget class="Line" name="line_7">
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="14" column="0">
|
||||
<widget class="QLabel" name="label_14">
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>Chivo</family>
|
||||
<italic>true</italic>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Local library</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="6" column="0">
|
||||
<widget class="QCheckBox" name="readerScrollBarCheckBox">
|
||||
<property name="text">
|
||||
<string>Show scroll bar if needed</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="5" column="0">
|
||||
<widget class="QCheckBox" name="globalReadingSettingsCheckBox">
|
||||
<property name="text">
|
||||
<string>Global reading settings</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="22" column="0">
|
||||
<layout class="QGridLayout" name="gridLayout_4">
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="0" column="2">
|
||||
<widget class="QPushButton" name="usbmsBtn">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Go</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="text">
|
||||
<string>Enter USB Mass Storage session</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="7" column="0">
|
||||
<widget class="QCheckBox" name="menuBarCheckBox">
|
||||
<property name="text">
|
||||
<string>Always show status bar</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="25" column="0">
|
||||
<layout class="QGridLayout" name="gridLayout_3">
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="0" column="1">
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>Request DHCP lease</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QPushButton" name="requestLeaseBtn">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Request</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="8" column="0">
|
||||
<layout class="QGridLayout" name="gridLayout_16">
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="exportHighlightsLabel">
|
||||
<property name="text">
|
||||
<string>Export highlights</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QPushButton" name="exportHighlightsBtn">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Export</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<spacer name="horizontalSpacer_12">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="12" column="0">
|
||||
<widget class="QCheckBox" name="quoteCheckBox">
|
||||
<property name="text">
|
||||
<string>Disable authors quotes</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="26" column="0">
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::MinimumExpanding</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="9" column="0">
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>Chivo</family>
|
||||
<weight>50</weight>
|
||||
<italic>true</italic>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Home</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="2" column="0">
|
||||
<layout class="QGridLayout" name="gridLayout_6">
|
||||
<property name="bottomMargin">
|
||||
|
@ -419,45 +510,15 @@
|
|||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="8" column="0">
|
||||
<layout class="QGridLayout" name="gridLayout_16">
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
<item row="10" column="0">
|
||||
<widget class="Line" name="line_6">
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="exportHighlightsLabel">
|
||||
<property name="text">
|
||||
<string>Export highlights</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QPushButton" name="exportHighlightsBtn">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Export</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<spacer name="horizontalSpacer_12">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
</layout>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="4" column="0">
|
||||
<layout class="QGridLayout" name="gridLayout_9">
|
||||
|
@ -531,107 +592,76 @@
|
|||
</layout>
|
||||
</item>
|
||||
<item row="20" column="0">
|
||||
<layout class="QGridLayout" name="gridLayout_4">
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
<widget class="QLabel" name="label_5">
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>Chivo</family>
|
||||
<weight>50</weight>
|
||||
<italic>true</italic>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
<item row="0" column="2">
|
||||
<widget class="QPushButton" name="usbmsBtn">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Go</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<spacer name="horizontalSpacer_2">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="text">
|
||||
<string>Enter USB Mass Storage session</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="7" column="0">
|
||||
<widget class="QCheckBox" name="menuBarCheckBox">
|
||||
<property name="text">
|
||||
<string>Always show status bar</string>
|
||||
<string>Storage</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="13" column="0">
|
||||
<widget class="QCheckBox" name="demoCheckBox">
|
||||
<property name="text">
|
||||
<string>Disable "Welcome to InkBox" message</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="23" column="0">
|
||||
<layout class="QGridLayout" name="gridLayout_3">
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
<widget class="QLabel" name="label_3">
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>Chivo</family>
|
||||
<italic>true</italic>
|
||||
</font>
|
||||
</property>
|
||||
<item row="0" column="1">
|
||||
<spacer name="horizontalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>40</width>
|
||||
<height>20</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="text">
|
||||
<string>Request DHCP lease</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="2">
|
||||
<widget class="QPushButton" name="requestLeaseBtn">
|
||||
<property name="font">
|
||||
<font>
|
||||
<weight>75</weight>
|
||||
<bold>true</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Request</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
<property name="text">
|
||||
<string>USB networking</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="16" column="0">
|
||||
<widget class="QCheckBox" name="localLibraryShowFoldersCheckBox">
|
||||
<property name="text">
|
||||
<string>Show folders</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="Line" name="line_8">
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="24" column="0">
|
||||
<spacer name="verticalSpacer">
|
||||
<widget class="Line" name="line_3">
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::MinimumExpanding</enum>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="15" column="0">
|
||||
<widget class="Line" name="line_11">
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Plain</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>0</height>
|
||||
</size>
|
||||
<property name="orientation">
|
||||
<enum>Qt::Horizontal</enum>
|
||||
</property>
|
||||
</spacer>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
|
|
|
@ -83,26 +83,31 @@ bookInfoDialog::bookInfoDialog(QWidget *parent) :
|
|||
log("Setting up book info dialog, ID: " + QString::number(global::library::bookId) + ", title: " + global::library::bookTitle, className);
|
||||
}
|
||||
else {
|
||||
QJsonObject bookJsonObject = getBookMetadata(global::localLibrary::bookOptionsDialog::bookID);
|
||||
QString bookInfo;
|
||||
QString title = bookJsonObject["Title"].toString();
|
||||
QString author = bookJsonObject["Author"].toString();
|
||||
QString publicationDate = bookJsonObject["PublicationDate"].toString();
|
||||
QString path = bookJsonObject["BookPath"].toString();
|
||||
if(!title.isEmpty()) {
|
||||
bookInfo.append("<b>Title:</b> " + title + "<br>");
|
||||
if(global::localLibrary::bookOptionsDialog::bookID != global::localLibrary::folderID) {
|
||||
QJsonObject bookJsonObject = getBookMetadata(global::localLibrary::bookOptionsDialog::bookID);
|
||||
QString bookInfo;
|
||||
QString title = bookJsonObject["Title"].toString();
|
||||
QString author = bookJsonObject["Author"].toString();
|
||||
QString publicationDate = bookJsonObject["PublicationDate"].toString();
|
||||
QString path = bookJsonObject["BookPath"].toString();
|
||||
if(!title.isEmpty()) {
|
||||
bookInfo.append("<b>Title:</b> " + title + "<br>");
|
||||
}
|
||||
if(!author.isEmpty()) {
|
||||
bookInfo.append("<b>Author:</b> " + author + "<br>");
|
||||
}
|
||||
if(!publicationDate.isEmpty()) {
|
||||
bookInfo.append("<b>Publication date:</b> " + publicationDate + "<br>");
|
||||
}
|
||||
if(!path.isEmpty()) {
|
||||
bookInfo.append("<b>Path:</b> " + path + "<br>");
|
||||
}
|
||||
global::text::textBrowserContents = bookInfo;
|
||||
}
|
||||
if(!author.isEmpty()) {
|
||||
bookInfo.append("<b>Author:</b> " + author + "<br>");
|
||||
else {
|
||||
QString bookInfo = "<b>Path:</b> " + global::localLibrary::bookOptionsDialog::folderPath;
|
||||
global::text::textBrowserContents = bookInfo;
|
||||
}
|
||||
if(!publicationDate.isEmpty()) {
|
||||
bookInfo.append("<b>Publication date:</b> " + publicationDate + "<br>");
|
||||
}
|
||||
if(!path.isEmpty()) {
|
||||
bookInfo.append("<b>Path:</b> " + path + "<br>");
|
||||
}
|
||||
|
||||
global::text::textBrowserContents = bookInfo;
|
||||
textwidget * textwidgetWindow = new textwidget(this);
|
||||
ui->stackedWidget->insertWidget(1, textwidgetWindow);
|
||||
ui->stackedWidget->setCurrentIndex(1);
|
||||
|
|
|
@ -22,23 +22,40 @@ bookOptionsDialog::bookOptionsDialog(QWidget *parent) :
|
|||
ui->wipeLocalReadingSettingsBtn->setProperty("type", "borderless");
|
||||
ui->infoBtn->setProperty("type", "borderless");
|
||||
|
||||
global::localLibrary::bookOptionsDialog::bookPinAction = false;
|
||||
|
||||
bookPath = getBookMetadata(global::localLibrary::bookOptionsDialog::bookID)["BookPath"].toString();
|
||||
if(isBookPinned(global::localLibrary::bookOptionsDialog::bookID)) {
|
||||
bookPinned = true;
|
||||
ui->pinBtn->setText("Unpin");
|
||||
if(global::localLibrary::bookOptionsDialog::isFolder == true) {
|
||||
global::localLibrary::bookOptionsDialog::isFolder = false;
|
||||
isFolder = true;
|
||||
log("Detected a folder", className);
|
||||
ui->pinBtn->hide();
|
||||
ui->pinBtn->deleteLater();
|
||||
ui->line->hide();
|
||||
ui->line->deleteLater();
|
||||
ui->wipeLocalReadingSettingsBtn->hide();
|
||||
ui->wipeLocalReadingSettingsBtn->deleteLater();
|
||||
ui->line_2->hide();
|
||||
ui->line_2->deleteLater();
|
||||
}
|
||||
else {
|
||||
bookPinned = false;
|
||||
isFolder = false;
|
||||
global::localLibrary::bookOptionsDialog::bookPinAction = false;
|
||||
|
||||
bookPath = getBookMetadata(global::localLibrary::bookOptionsDialog::bookID)["BookPath"].toString();
|
||||
if(isBookPinned(global::localLibrary::bookOptionsDialog::bookID)) {
|
||||
bookPinned = true;
|
||||
ui->pinBtn->setText("Unpin");
|
||||
}
|
||||
else {
|
||||
bookPinned = false;
|
||||
}
|
||||
|
||||
bookChecksum = fileChecksum(bookPath, QCryptographicHash::Sha256);
|
||||
QDir localReadingSettingsPath("/mnt/onboard/onboard/." + bookChecksum);
|
||||
if(!localReadingSettingsPath.exists()) {
|
||||
ui->wipeLocalReadingSettingsBtn->setEnabled(false);
|
||||
ui->wipeLocalReadingSettingsBtn->setStyleSheet(ui->wipeLocalReadingSettingsBtn->styleSheet() + "color: gray");
|
||||
}
|
||||
}
|
||||
|
||||
bookChecksum = fileChecksum(bookPath, QCryptographicHash::Sha256);
|
||||
QDir localReadingSettingsPath("/mnt/onboard/onboard/." + bookChecksum);
|
||||
if(!localReadingSettingsPath.exists()) {
|
||||
ui->wipeLocalReadingSettingsBtn->setEnabled(false);
|
||||
ui->wipeLocalReadingSettingsBtn->setStyleSheet(ui->wipeLocalReadingSettingsBtn->styleSheet() + "color: gray");
|
||||
}
|
||||
this->adjustSize();
|
||||
}
|
||||
|
||||
|
@ -59,6 +76,15 @@ void bookOptionsDialog::on_pinBtn_clicked()
|
|||
|
||||
void bookOptionsDialog::on_deleteBtn_clicked()
|
||||
{
|
||||
if(isFolder == true) {
|
||||
deleteFolder();
|
||||
}
|
||||
else {
|
||||
deleteBook();
|
||||
}
|
||||
}
|
||||
|
||||
void bookOptionsDialog::deleteBook() {
|
||||
log("Deleting book '" + bookPath + "'", className);
|
||||
global::toast::delay = 3000;
|
||||
if(QFile::remove(bookPath)) {
|
||||
|
@ -71,6 +97,20 @@ void bookOptionsDialog::on_deleteBtn_clicked()
|
|||
}
|
||||
}
|
||||
|
||||
void bookOptionsDialog::deleteFolder() {
|
||||
log("Removing empty directory '" + global::localLibrary::bookOptionsDialog::folderPath + "'", className);
|
||||
if(QDir(global::localLibrary::bookOptionsDialog::folderPath).isEmpty() == true) {
|
||||
global::toast::delay = 3000;
|
||||
QDir(global::localLibrary::bookOptionsDialog::folderPath).removeRecursively();
|
||||
emit showToast("Directory removed successfully");
|
||||
emit removedFolder();
|
||||
}
|
||||
else {
|
||||
emit showToast("Directory is not empty");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void bookOptionsDialog::on_infoBtn_clicked()
|
||||
{
|
||||
emit openLocalBookInfoDialog();
|
||||
|
|
|
@ -19,6 +19,7 @@ public:
|
|||
QString bookPath;
|
||||
QString bookChecksum;
|
||||
bool bookPinned;
|
||||
bool isFolder;
|
||||
|
||||
private slots:
|
||||
void on_pinBtn_clicked();
|
||||
|
@ -27,11 +28,14 @@ private slots:
|
|||
void on_wipeLocalReadingSettingsBtn_clicked();
|
||||
void pinBook(int bookID);
|
||||
void unpinBook(int bookID);
|
||||
void deleteBook();
|
||||
void deleteFolder();
|
||||
bool isBookPinned(int bookID);
|
||||
|
||||
signals:
|
||||
void openLocalBookInfoDialog();
|
||||
void showToast(QString messageToDisplay);
|
||||
void removedFolder();
|
||||
|
||||
private:
|
||||
Ui::bookOptionsDialog *ui;
|
||||
|
|
Loading…
Reference in a new issue