quill/generaldialog.cpp

802 lines
34 KiB
C++
Raw Permalink Normal View History

#include "generaldialog.h"
#include "ui_generaldialog.h"
#include "functions.h"
#include "reader.h"
#include "mainwindow.h"
#include <QFile>
#include <QDebug>
#include <QProcess>
2021-04-02 18:06:15 -07:00
#include <QScreen>
2021-07-05 13:01:32 -07:00
#include <QTimer>
#include <QDirIterator>
#include <QStringListModel>
#include <QListView>
#include <QDateTime>
#include <QTextEdit>
generalDialog::generalDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::generalDialog)
{
ui->setupUi(this);
ui->bodyLabel->setFont(QFont("u001"));
ui->searchComboBox->setFont(QFont("u001"));
// Preventing outside interaction
this->setModal(true);
// Stylesheet, style & misc.
2022-02-12 21:37:48 -08:00
if(global::keyboard::encfsDialog == true) {
QFile stylesheetFile(":/resources/eink-square-encfs.qss");
stylesheetFile.open(QFile::ReadOnly);
this->setStyleSheet(stylesheetFile.readAll());
stylesheetFile.close();
}
else {
2022-04-03 20:26:15 -07:00
QFile stylesheetFile("/mnt/onboard/.adds/inkbox/eink.qss");
2022-02-12 21:37:48 -08:00
stylesheetFile.open(QFile::ReadOnly);
this->setStyleSheet(stylesheetFile.readAll());
stylesheetFile.close();
}
ui->okBtn->setProperty("type", "borderless");
ui->cancelBtn->setProperty("type", "borderless");
ui->acceptBtn->setProperty("type", "borderless");
ui->okBtn->setStyleSheet("font-size: 9pt; padding: 10px; font-weight: bold; background: lightGrey");
ui->cancelBtn->setStyleSheet("font-size: 9pt; padding: 10px; font-weight: bold; background: lightGrey");
ui->acceptBtn->setStyleSheet("font-size: 9pt; padding: 10px; font-weight: bold; background: lightGrey");
ui->headerLabel->setStyleSheet("font-weight: bold");
ui->bodyLabel->setStyleSheet("font-size: 9.5pt");
ui->searchComboBox->setStyleSheet("font-size: 9pt");
// Disabling "Online library" search if device doesn't have Wi-Fi
if(global::device::isWifiAble == false && global::deviceID != "emu\n") {
ui->searchComboBox->removeItem(2);
}
if(QFile::exists("/inkbox/searchComboBoxFunction") == true) {
string_checkconfig_ro("/inkbox/searchComboBoxFunction");
if(checkconfig_str_val == "Dictionary") {
ui->searchComboBox->setCurrentIndex(0);
}
else if(checkconfig_str_val == "Local storage") {
ui->searchComboBox->setCurrentIndex(1);
}
2021-12-27 12:04:39 -08:00
else if(checkconfig_str_val == "Online library") {
ui->searchComboBox->setCurrentIndex(2);
}
else {
ui->searchComboBox->setCurrentIndex(0);
}
}
if(checkconfig("/inkbox/resetDialog") == true) {
if(checkconfig("/opt/inkbox_genuine") == true) {
resetDialog = true;
ui->okBtn->setText("Proceed");
ui->cancelBtn->setText("Go back");
if(global::deviceID != "n705\n") {
ui->bodyLabel->setText("This will erase any books you have stored on the device.\nSettings will be reset.");
}
else {
ui->bodyLabel->setText("This will erase any books\nyou have stored on the device.\nSettings will be reset.");
}
ui->headerLabel->setText("Warning");
QTimer::singleShot(50, this, SLOT(adjust_size()));
string_writeconfig("/inkbox/resetDialog", "false");
}
else {
resetDialog = true;
ui->okBtn->setText("Proceed");
ui->cancelBtn->setText("Go back");
ui->bodyLabel->setText("Settings will be reset.");
ui->headerLabel->setText("Warning");
QTimer::singleShot(50, this, SLOT(adjust_size()));
string_writeconfig("/inkbox/resetDialog", "false");
}
}
else if(checkconfig("/inkbox/updateDialog") == true) {
updateDialog = true;
ui->okBtn->setText("Update");
ui->cancelBtn->setText("Not now");
ui->bodyLabel->setText("<font face='u001'>Do you want to update InkBox now</font><font face='Inter'>?</font>"); // Because I hate Univers/U001's question mark ...
ui->headerLabel->setText("Update available");
QTimer::singleShot(50, this, SLOT(adjust_size()));
string_writeconfig("/inkbox/updateDialog", "false");
}
2021-05-01 12:53:52 -07:00
else if(global::settings::settingsRebootDialog == true) {
settingsRebootDialog = true;
ui->stackedWidget->setCurrentIndex(1);
2021-10-18 05:46:27 -07:00
if(global::kobox::koboxSettingsRebootDialog == true or global::encfs::enableStorageEncryptionDialog) {
2021-05-01 12:53:52 -07:00
koboxSettingsRebootDialog = true;
2022-03-26 11:50:39 -07:00
ui->bodyLabel->setText("The device will reboot now, since<br>the settings you defined require it to work properly.");
2021-05-01 12:53:52 -07:00
}
else {
2022-03-26 11:50:39 -07:00
ui->bodyLabel->setText("The settings you defined might<br>require a complete reboot of the device for them to work properly.");
2021-05-01 12:53:52 -07:00
}
ui->headerLabel->setText("Information");
QTimer::singleShot(50, this, SLOT(adjust_size()));
}
else if(global::mainwindow::lowBatteryDialog == true) {
lowBatteryDialog = true;
ui->stackedWidget->setCurrentIndex(1);
get_battery_level();
2022-04-04 22:37:04 -07:00
QString message = "The battery's level is low.\nPlease charge your eReader.\nCurrent level: ";
message.append(batt_level);
ui->bodyLabel->setText(message);
ui->headerLabel->setText("Low battery");
QTimer::singleShot(50, this, SLOT(adjust_size()));
string_writeconfig("/inkbox/lowBatteryDialog", "false");
}
else if(global::usbms::usbmsDialog == true) {
usbmsDialog = true;
ui->stackedWidget->setCurrentIndex(0);
ui->okBtn->setText("Connect");
2022-03-03 19:52:29 -08:00
ui->cancelBtn->setText("Not now");
ui->bodyLabel->setText("<font face='u001'>Do you want to connect your device to a computer to manage books</font><font face='Inter'>?</font>");
ui->headerLabel->setText("USB cable connected");
QTimer::singleShot(50, this, SLOT(adjust_size()));
}
else if(global::text::textBrowserDialog == true) {
textBrowserDialog = true;
textwidgetWindow = new textwidget();
ui->headerLabel->setText("Information");
ui->stackedWidget->setCurrentIndex(1);
ui->mainStackedWidget->insertWidget(1, textwidgetWindow);
ui->mainStackedWidget->setCurrentIndex(1);
QTimer::singleShot(50, this, SLOT(adjust_size()));
}
else if(global::kobox::resetKoboxDialog == true) {
resetKoboxDialog = true;
ui->headerLabel->setText("Warning");
ui->okBtn->setText("Proceed");
ui->cancelBtn->setText("Go back");
ui->bodyLabel->setText("This will erase all KoBox user data. KoBox settings will be reset.");
QTimer::singleShot(50, this, SLOT(adjust_size()));
}
2021-07-05 13:01:32 -07:00
else if(global::keyboard::keyboardDialog == true) {
setupKeyboardDialog();
2021-07-05 13:01:32 -07:00
}
else if(global::keyboard::keypadDialog == true) {
keypadDialog = true;
keypadWidget = new virtualkeypad();
ui->headerLabel->setText("Enter a number");
ui->okBtn->setText("OK");
ui->cancelBtn->setText("Cancel");
ui->mainStackedWidget->insertWidget(1, keypadWidget);
ui->mainStackedWidget->setCurrentIndex(1);
QTimer::singleShot(50, this, SLOT(adjust_size()));
}
2021-10-17 19:31:44 -07:00
else if(global::encfs::disableStorageEncryptionDialog == true) {
ui->headerLabel->setText("Warning");
ui->okBtn->setText("Proceed");
ui->cancelBtn->setText("Go back");
ui->bodyLabel->setText("<font face='u001'>This will delete all the files you have encrypted. Are you sure you want to continue</font><font face='Inter'>?</font>");
QTimer::singleShot(50, this, SLOT(adjust_size()));
2021-10-17 19:31:44 -07:00
}
2021-11-14 18:22:58 -08:00
else if(global::encfs::errorNoBooksInDropboxDialog == true) {
ui->stackedWidget->setCurrentIndex(1);
ui->headerLabel->setText("Error");
ui->bodyLabel->setText("Please put books in the 'encfs-dropbox' folder to repack your encrypted storage.");
QTimer::singleShot(50, this, SLOT(adjust_size()));
2021-11-14 18:22:58 -08:00
}
else if(global::encfs::repackDialog == true) {
ui->headerLabel->setText("Information");
ui->okBtn->setText("Proceed");
ui->cancelBtn->setText("Not now");
ui->bodyLabel->setText("<font face='u001'>New files have been found in 'encfs-dropbox'. Would you want to repack your encrypted storage</font><font face='Inter'>?</font>");
QTimer::singleShot(50, this, SLOT(adjust_size()));
}
else if(global::userApps::appCompatibilityDialog == true) {
2022-06-18 06:26:52 -07:00
appCompatibilityDialog = true;
global::userApps::appCompatibilityLastContinueStatus = true;
ui->okBtn->setText("Continue");
ui->cancelBtn->setText("Cancel");
ui->bodyLabel->setText(global::userApps::appCompatibilityText);
ui->headerLabel->setText("Compatibility warning");
QTimer::singleShot(50, this, SLOT(adjust_size()));
}
else if(global::userApps::appInfoDialog == true) {
appInfoDialog = true;
textwidgetWindow = new textwidget();
ui->headerLabel->setText("App info");
ui->stackedWidget->setCurrentIndex(1);
ui->mainStackedWidget->insertWidget(1, textwidgetWindow);
ui->mainStackedWidget->setCurrentIndex(1);
yIncrease = 1.8;
QTimer::singleShot(50, this, SLOT(increaseSize()));
}
else {
// We shouldn't be there ;)
2022-06-20 09:57:55 -07:00
log("Launched without settings", className);
}
2021-04-02 18:06:15 -07:00
// Centering dialog
QRect screenGeometry = QGuiApplication::screens()[0]->geometry();
int x = (screenGeometry.width() - this->width()) / 2;
int y = (screenGeometry.height() - this->height()) / 2;
this->move(x, y);
}
generalDialog::~generalDialog()
{
delete ui;
}
void generalDialog::on_cancelBtn_clicked()
{
2022-04-15 17:27:58 -07:00
log("Cancel button clicked", className);
if(updateDialog == true) {
string_writeconfig("/tmp/cancelUpdateDialog", "true");
generalDialog::close();
}
2021-06-29 11:42:51 -07:00
else if(usbmsDialog == true) {
global::usbms::usbmsDialog = false;
generalDialog::close();
}
else if(resetKoboxDialog == true) {
global::kobox::resetKoboxDialog = false;
generalDialog::close();
}
2022-07-01 15:56:34 -07:00
else if(keypadDialog == true) {
global::keyboard::keypadDialog = false;
generalDialog::close();
}
2021-10-17 19:31:44 -07:00
else if(global::encfs::disableStorageEncryptionDialog == true) {
emit cancelDisableStorageEncryption();
global::encfs::disableStorageEncryptionDialog = false;
generalDialog::close();
}
else {
if(global::keyboard::searchDialog == true) {
global::keyboard::searchDialog = false;
global::forbidOpenSearchDialog = true;
global::keyboard::keyboardDialog = false;
global::keyboard::keyboardText = "";
2021-12-27 12:04:39 -08:00
global::library::librarySearchDialog = false;
}
2021-07-06 07:04:28 -07:00
else if(global::keyboard::vncDialog == true) {
global::keyboard::vncDialog = false;
global::keyboard::keyboardDialog = false;
global::keyboard::keyboardText = "";
}
else if(global::keyboard::encfsDialog == true) {
global::keyboard::encfsDialog = false;
global::encfs::cancelSetup = true;
global::keyboard::keyboardText = "";
}
2021-11-16 04:47:49 -08:00
else if(global::encfs::errorNoBooksInDropboxDialog == true) {
global::encfs::errorNoBooksInDropboxDialog = false;
}
else if(global::encfs::repackDialog == true) {
global::encfs::repackDialog = false;
}
else if(global::userApps::appCompatibilityDialog == true) {
global::userApps::launchApp = false;
global::userApps::appCompatibilityLastContinueStatus = false;
global::userApps::appCompatibilityText = "";
global::userApps::appCompatibilityDialog = false;
}
generalDialog::close();
}
}
void generalDialog::on_okBtn_clicked()
{
2022-04-15 17:27:58 -07:00
log("OK button clicked", className);
if(resetDialog == true) {
if(checkconfig("/opt/inkbox_genuine") == true) {
// Soft-reset the device
// We set a custom boot flag and reboot silently in Diagnostics
2022-04-15 17:27:58 -07:00
log("Setting up the device for soft-reset", className);
string_writeconfig("/external_root/boot/flags/DIAGS_BOOT", "true");
string_writeconfig("/external_root/boot/flags/DO_SOFT_RESET", "true");
2021-06-22 05:22:27 -07:00
reboot(false);
qApp->quit();
}
else {
// Restore default settings, we're not on InkBox OS
2022-04-15 17:27:58 -07:00
log("Restoring default settings", className);
QString prog ("sh");
QStringList args;
args << "reset-config.sh";
QProcess *proc = new QProcess();
proc->start(prog, args);
proc->waitForFinished();
2021-08-29 12:05:07 -07:00
proc->deleteLater();
// Relaunching InkBox
QProcess process;
process.startDetached("inkbox.sh", QStringList());
qApp->quit();
}
}
if(updateDialog == true) {
if(global::otaUpdate::isUpdateOta == true) {
2021-08-25 10:16:41 -07:00
this->hide();
global::otaUpdate::downloadOta = true;
otaManagerWindow = new otaManager(this);
connect(otaManagerWindow, SIGNAL(downloadedOtaUpdate(bool)), SLOT(startOtaUpdate(bool)));
otaManagerWindow->setAttribute(Qt::WA_DeleteOnClose);
2021-08-25 10:16:41 -07:00
global::toast::indefiniteToast = true;
global::toast::modalToast = true;
emit showToast("Downloading update");
}
else {
installUpdate();
qApp->quit();
}
}
if(usbmsDialog == true) {
2022-04-15 17:27:58 -07:00
log("Showing USBMS splash", className);
global::usbms::usbmsDialog = false;
global::usbms::launchUsbms = true;
usbmsWindow = new usbms_splash();
usbmsWindow->setAttribute(Qt::WA_DeleteOnClose);
usbmsWindow->setGeometry(QRect(QPoint(0,0), screen()->geometry ().size()));
usbmsWindow->show();
}
if(resetKoboxDialog == true) {
resetKoboxUserData();
}
if(keypadDialog == true) {
int number = global::keyboard::keypadText.toInt();
emit gotoPageSelected(number);
global::keyboard::keypadDialog = false;
generalDialog::close();
}
if(keyboardDialog == true) {
if(global::keyboard::searchDialog == true) {
if(!global::keyboard::keyboardText.isEmpty()) {
if(ui->searchComboBox->currentText() == "Dictionary") {
string_writeconfig("/inkbox/searchComboBoxFunction", "Dictionary");
for(int i = ui->mainStackedWidget->count(); i >= 0; i--) {
QWidget * widget = ui->mainStackedWidget->widget(i);
ui->mainStackedWidget->removeWidget(widget);
widget->deleteLater();
}
ui->topStackedWidget->setVisible(false);
ui->stackedWidget->setVisible(false);
dictionaryWidgetWindow = new dictionaryWidget();
dictionaryWidgetWindow->setAttribute(Qt::WA_DeleteOnClose);
connect(dictionaryWidgetWindow, SIGNAL(refreshScreen()), SLOT(refreshScreenNative()));
connect(dictionaryWidgetWindow, SIGNAL(destroyed(QObject*)), SLOT(restartSearchDialog()));
ui->mainStackedWidget->insertWidget(1, dictionaryWidgetWindow);
}
else if(ui->searchComboBox->currentText() == "Local storage") {
string_writeconfig("/inkbox/searchComboBoxFunction", "Local storage");
QString onboardPath;
QStringList storageSearchResults;
if(checkconfig("/opt/inkbox_genuine") == true) {
onboardPath = "/mnt/onboard/onboard/";
}
else {
onboardPath = "/mnt/onboard/";
}
QDirIterator dirIt(onboardPath, QDirIterator::Subdirectories);
2022-04-15 17:27:58 -07:00
log("Searching local storage for '" + global::keyboard::keyboardText + "'", className);
while(dirIt.hasNext()) {
dirIt.next();
if(QFileInfo(dirIt.filePath()).isFile()) {
QString suffix = QFileInfo(dirIt.filePath()).suffix();
2022-01-12 11:48:22 -08:00
if(suffix == "txt" or suffix == "TXT" or suffix == "epub" or suffix == "EPUB" or suffix == "pdf" or suffix == "PDF" or suffix == "png" or suffix == "PNG" or suffix == "tif" or suffix == "TIF" or suffix == "bmp" or suffix == "BMP" or suffix == "tiff" or suffix == "TIFF" or suffix == "jpg" or suffix == "JPG" or suffix == "jpeg" or suffix == "JPEG") {
if(dirIt.fileName().contains(global::keyboard::keyboardText) == true) {
storageSearchResults.append(dirIt.fileName());
global::localStorage::searchResultsPaths.append(dirIt.filePath());
}
}
}
}
if(!storageSearchResults.isEmpty()) {
2022-04-15 17:27:58 -07:00
log("Displaying search results", className);
for(int i = ui->mainStackedWidget->count(); i >= 0; i--) {
QWidget * widget = ui->mainStackedWidget->widget(i);
ui->mainStackedWidget->removeWidget(widget);
widget->deleteLater();
}
ui->topStackedWidget->setVisible(false);
ui->stackedWidget->setVisible(false);
searchResultsWidgetWindow = new searchResultsWidget(this);
searchResultsWidgetWindow->setAttribute(Qt::WA_DeleteOnClose);
global::forbidOpenSearchDialog = true;
connect(searchResultsWidgetWindow, SIGNAL(destroyed(QObject*)), SLOT(restartSearchDialog()));
connect(searchResultsWidgetWindow, SIGNAL(openBookFile(QString, bool)), SLOT(openBookFileNative(QString, bool)));
searchResultsWidgetWindow->setListViewContents(storageSearchResults);
ui->mainStackedWidget->insertWidget(1, searchResultsWidgetWindow);
}
else {
2022-04-15 17:27:58 -07:00
log("No search results found", className);
global::toast::delay = 3000;
emit showToast("No results found");
keyboardWidget->clearLineEdit();
global::keyboard::keyboardText = "";
}
2021-12-27 12:04:39 -08:00
}
else if(ui->searchComboBox->currentText() == "Online library") {
if(testPing(true) == 0 or global::deviceID == "emu\n") {
string_writeconfig("/inkbox/searchComboBoxFunction", "Online library");
2022-04-15 17:27:58 -07:00
log("Searching online library for '" + global::keyboard::keyboardText + "'", className);
if(!readFile("/external_root/opt/storage/gutenberg/last_sync").isEmpty()) {
unsigned long currentEpoch = QDateTime::currentSecsSinceEpoch();
unsigned long syncEpoch = readFile("/external_root/opt/storage/gutenberg/last_sync").toULong();
unsigned long allowSyncEpoch = syncEpoch + 86400;
if(currentEpoch > allowSyncEpoch) {
syncGutenbergCatalog();
}
else {
noGutenbergSyncToDo = true;
}
}
else {
syncGutenbergCatalog();
}
QTimer * searchTimer = new QTimer(this);
searchTimer->setInterval(100);
connect(searchTimer, &QTimer::timeout, [&]() {
if(noGutenbergSyncToDo == true or (gutenbergSyncDone == true && gutenbergSyncStatus == true)) {
if(searchTimerDone == false) {
searchTimerDone = true;
string_writeconfig("/inkbox/gutenberg_search_request", global::keyboard::keyboardText.toStdString());
string_writeconfig("/opt/ibxd", "gutenberg_search\n");
global::toast::modalToast = true;
global::toast::indefiniteToast = true;
emit showToast("Searching");
QTimer::singleShot(100, this, SLOT(waitForGutenbergSearchDone()));
}
}
} );
searchTimer->start();
}
else {
emit showToast("Wi-Fi connection error");
}
}
}
else {
2022-03-26 11:50:39 -07:00
global::toast::delay = 3000;
emit showToast("Please type in a search term");
}
}
2021-07-05 21:13:11 -07:00
else if(global::keyboard::vncDialog == true) {
2021-10-08 20:37:32 -07:00
if(!global::keyboard::keyboardText.isEmpty()) {
2022-04-15 17:27:58 -07:00
log("Gathering VNC connection information", className);
2021-07-05 21:13:11 -07:00
if(vncServerSet != true) {
vncServerAddress = global::keyboard::keyboardText;
vncServerSet = true;
keyboardWidget->clearLineEdit();
ui->headerLabel->setText("Enter the server's password");
}
else if(vncPasswordSet != true) {
vncServerPassword = global::keyboard::keyboardText;
vncPasswordSet = true;
keyboardWidget->clearLineEdit();
ui->headerLabel->setText("Enter the server's port");
}
else {
vncServerPort = global::keyboard::keyboardText;
global::keyboard::vncDialog = false;
global::keyboard::keyboardDialog = false;
startVNC(vncServerAddress, vncServerPassword, vncServerPort);
generalDialog::close();
}
}
else {
2022-03-26 11:50:39 -07:00
global::toast::delay = 3000;
emit showToast("Please type in the required argument");
2021-07-05 21:13:11 -07:00
}
}
else if(global::keyboard::wifiPassphraseDialog == true) {
2021-10-08 20:37:32 -07:00
if(!global::keyboard::keyboardText.isEmpty()) {
2022-04-15 17:27:58 -07:00
log("Attempting connection to Wi-Fi network '" + wifiEssid + "'", className);
this->hide();
wifiPassphrase = global::keyboard::keyboardText;
global::toast::indefiniteToast = true;
global::toast::modalToast = true;
emit showToast("Connecting");
QTimer::singleShot(100, this, SLOT(connectToNetworkSlot()));
global::keyboard::wifiPassphraseDialog = false;
global::keyboard::keyboardDialog = false;
}
else {
2022-03-26 11:50:39 -07:00
global::toast::delay = 3000;
showToast("Please type in the required argument");
}
}
2021-10-08 20:37:32 -07:00
else if(global::keyboard::encfsDialog == true) {
if(!global::keyboard::keyboardText.isEmpty()) {
global::encfs::passphrase = global::keyboard::keyboardText;
global::keyboard::encfsDialog = false;
global::keyboard::keyboardText = "";
global::keyboard::keyboardDialog = false;
2021-10-17 19:31:44 -07:00
this->close();
2021-10-08 20:37:32 -07:00
}
else {
2022-03-26 11:50:39 -07:00
global::toast::delay = 3000;
showToast("Please type in the required argument");
2021-10-08 20:37:32 -07:00
}
}
else {
global::keyboard::keyboardDialog = false;
generalDialog::close();
}
}
2021-10-17 19:31:44 -07:00
if(global::encfs::disableStorageEncryptionDialog == true) {
global::encfs::disableStorageEncryptionDialog = false;
emit disableStorageEncryption();
this->close();
}
if(global::encfs::repackDialog == true) {
global::encfs::repackDialog = false;
2022-04-15 17:27:58 -07:00
log("Encrypted storage repack requested", className);
string_writeconfig("/external_root/run/encfs_repack", "true");
quit_restart();
}
else if(global::userApps::appCompatibilityDialog == true) {
global::userApps::launchApp = true;
global::userApps::appCompatibilityText = "";
global::userApps::appCompatibilityLastContinueStatus = true; // Not really necceserry, only if something fails horibly
global::userApps::appCompatibilityDialog = false;
generalDialog::close();
}
}
void generalDialog::on_acceptBtn_clicked()
{
2022-04-15 17:27:58 -07:00
log("OK button clicked", className);
if(lowBatteryDialog == true) {
2021-04-22 07:10:47 -07:00
global::mainwindow::lowBatteryDialog = false;
global::battery::batteryAlertLock = false;
global::battery::showLowBatteryDialog = false;
}
if(settingsRebootDialog == true) {
2021-10-18 05:46:27 -07:00
if(koboxSettingsRebootDialog == true or global::encfs::enableStorageEncryptionDialog) {
2021-05-01 12:53:52 -07:00
reboot(true);
qApp->quit();
2021-05-01 12:53:52 -07:00
}
else {
QProcess process;
process.startDetached("inkbox.sh", QStringList());
qApp->quit();
}
}
if(textBrowserDialog == true) {
global::text::textBrowserContents = "";
global::text::textBrowserDialog = false;
}
if(appInfoDialog == true) {
global::text::textBrowserContents = "";
global::userApps::appInfoDialog = false;
}
// We don't have any other option ;p
generalDialog::close();
}
2021-07-05 13:01:32 -07:00
void generalDialog::adjust_size() {
this->adjustSize();
QRect screenGeometry = QGuiApplication::screens()[0]->geometry();
int x = (screenGeometry.width() - this->width()) / 2;
int y = (screenGeometry.height() - this->height()) / 2;
this->move(x, y);
this->show();
2021-07-05 13:01:32 -07:00
emit refreshScreen();
}
void generalDialog::restartSearchDialog() {
generalDialog::close();
}
void generalDialog::setupKeyboardDialog() {
ui->stackedWidget->setCurrentIndex(0);
keyboardDialog = true;
ui->stackedWidget->setVisible(true);
if(global::keyboard::searchDialog == true) {
ui->topStackedWidget->setCurrentIndex(1);
ui->searchHeaderLabel->setText("Search");
2021-07-05 21:13:11 -07:00
ui->okBtn->setText("Search");
ui->cancelBtn->setText("Close");
}
else if(global::keyboard::vncDialog == true) {
ui->headerLabel->setText("Enter the server's IP address");
ui->okBtn->setText("OK");
ui->cancelBtn->setText("Cancel");
}
else if(global::keyboard::wifiPassphraseDialog == true) {
ui->headerLabel->setText("Enter the network's passphrase");
ui->okBtn->setText("Connect");
ui->cancelBtn->setText("Cancel");
}
2021-10-08 20:37:32 -07:00
else if(global::keyboard::encfsDialog == true) {
ui->headerLabel->setText("Enter your encrypted storage's passphrase");
2021-10-08 20:37:32 -07:00
ui->okBtn->setText("OK");
ui->cancelBtn->setText("Cancel");
}
else {
ui->headerLabel->setText("Enter a string");
2021-07-05 21:13:11 -07:00
ui->okBtn->setText("OK");
ui->cancelBtn->setText("Cancel");
}
keyboardWidget = new virtualkeyboard();
connect(keyboardWidget, SIGNAL(adjust_size()), SLOT(adjust_size()));
ui->mainStackedWidget->insertWidget(1, keyboardWidget);
ui->mainStackedWidget->setCurrentIndex(1);
QTimer::singleShot(1000, this, SLOT(adjust_size()));
}
void generalDialog::refreshScreenNative() {
emit refreshScreen();
}
2021-07-05 21:13:11 -07:00
void generalDialog::startVNC(QString server, QString password, QString port) {
2022-04-15 17:27:58 -07:00
log("Launching VNC viewer", className);
2021-07-05 21:13:11 -07:00
std::string server_str = server.toStdString();
std::string password_str = password.toStdString();
std::string port_str = port.toStdString();
string_writeconfig("/external_root/tmp/app_vnc_server", server_str);
string_writeconfig("/external_root/tmp/app_vnc_password", password_str);
string_writeconfig("/external_root/tmp/app_vnc_port", port_str);
2021-07-06 07:04:28 -07:00
string_writeconfig("/opt/ibxd", "app_start_vnc\n");
2021-07-05 21:13:11 -07:00
qApp->quit();
}
void generalDialog::connectToNetworkSlot() {
if(connectToNetwork(wifiEssid, wifiPassphrase) == true) {
emit updateWifiIcon(3);
emit closeIndefiniteToast();
emit showToast("Connection successful");
}
else {
emit updateWifiIcon(2);
emit closeIndefiniteToast();
emit showToast("Connection failed");
}
generalDialog::close();
}
void generalDialog::startOtaUpdate(bool wasDownloadSuccessful) {
2021-08-25 10:16:41 -07:00
emit closeIndefiniteToast();
if(wasDownloadSuccessful == true) {
global::otaUpdate::isUpdateOta = false;
installUpdate();
qApp->quit();
}
else {
2021-08-25 10:16:41 -07:00
emit showToast("Download failed");
global::otaUpdate::isUpdateOta = false;
}
2021-08-25 10:16:41 -07:00
generalDialog::close();
}
void generalDialog::openBookFileNative(QString book, bool relativePath) {
emit openBookFile(book, relativePath);
}
void generalDialog::showToastNative(QString messageToDisplay) {
emit showToast(messageToDisplay);
}
void generalDialog::closeIndefiniteToastNative() {
emit closeIndefiniteToast();
}
void generalDialog::quit_restart() {
2022-04-15 17:27:58 -07:00
log("Restarting InkBox", className);
// If existing, cleaning bookconfig_mount mountpoint
string_writeconfig("/opt/ibxd", "bookconfig_unmount\n");
// Restarting InkBox
QProcess process;
process.startDetached("inkbox", QStringList());
qApp->quit();
}
2022-01-12 08:04:10 -08:00
void generalDialog::syncGutenbergCatalog() {
2022-04-15 17:27:58 -07:00
log("Syncing Gutenberg catalog", className);
global::toast::modalToast = true;
global::toast::indefiniteToast = true;
2022-01-12 08:04:10 -08:00
emit showToast("Sync in progress");
string_writeconfig("/opt/ibxd", "gutenberg_sync\n");
QTimer * syncCheckTimer = new QTimer(this);
2022-06-27 15:14:20 -07:00
syncCheckTimer->setInterval(500);
connect(syncCheckTimer, &QTimer::timeout, [&]() {
if(QFile::exists("/inkbox/gutenbergSyncDone") == true) {
if(checkconfig("/inkbox/gutenbergSyncDone") == true) {
log("Gutenberg sync successfully completed", className);
gutenbergSyncDone = true;
gutenbergSyncStatus = true;
emit closeIndefiniteToast();
}
else {
log("Gutenberg sync encountered an error", className);
gutenbergSyncDone = true;
gutenbergSyncStatus = false;
emit closeIndefiniteToast();
2022-01-12 08:04:10 -08:00
emit showToast("Error");
global::keyboard::searchDialog = false;
global::forbidOpenSearchDialog = true;
global::keyboard::keyboardDialog = false;
global::keyboard::keyboardText = "";
global::library::librarySearchDialog = false;
QTimer::singleShot(5000, this, SLOT(close()));
}
QFile::remove("/inkbox/gutenbergSyncDone");
}
} );
syncCheckTimer->start();
}
2022-01-12 08:04:10 -08:00
void generalDialog::waitForGutenbergSearchDone() {
while(true) {
if(QFile::exists("/inkbox/gutenberg-search/search_done")) {
if(checkconfig("/inkbox/gutenberg-search/search_done") == true) {
QList<QString> searchResults = readFile("/inkbox/gutenberg-search/search_results_titles").split("\n");
searchResults.takeLast();
2022-01-12 08:04:10 -08:00
global::library::libraryResults = true;
for(int i = ui->mainStackedWidget->count(); i >= 0; i--) {
QWidget * widget = ui->mainStackedWidget->widget(i);
ui->mainStackedWidget->removeWidget(widget);
widget->deleteLater();
}
ui->topStackedWidget->setVisible(false);
ui->stackedWidget->setVisible(false);
searchResultsWidgetWindow = new searchResultsWidget(this);
searchResultsWidgetWindow->setAttribute(Qt::WA_DeleteOnClose);
global::forbidOpenSearchDialog = true;
connect(searchResultsWidgetWindow, SIGNAL(destroyed(QObject*)), SLOT(restartSearchDialog()));
connect(searchResultsWidgetWindow, SIGNAL(showToast(QString)), SLOT(showToastNative(QString)));
connect(searchResultsWidgetWindow, SIGNAL(closeIndefiniteToast()), SLOT(closeIndefiniteToastNative()));
connect(searchResultsWidgetWindow, SIGNAL(hideDialog()), SLOT(hide()));
searchResultsWidgetWindow->setListViewContents(searchResults);
ui->mainStackedWidget->insertWidget(1, searchResultsWidgetWindow);
QFile::remove("/inkbox/gutenberg-search/search_done");
emit closeIndefiniteToast();
break;
}
else {
emit closeIndefiniteToast();
2022-01-12 08:04:10 -08:00
global::toast::delay = 3000;
global::toast::modalToast = true;
2022-01-12 08:04:10 -08:00
emit showToast("No results found");
keyboardWidget->clearLineEdit();
global::keyboard::keyboardText = "";
QFile::remove("/inkbox/gutenberg-search/search_done");
QTimer::singleShot(3000, this, SLOT(close()));
2022-01-12 08:04:10 -08:00
break;
}
}
}
}
void generalDialog::increaseSize()
{
log("Resizing generalDialog", className);
ui->topStackedWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
ui->mainStackedWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
ui->stackedWidget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
QRect screenGeometry = QGuiApplication::screens()[0]->geometry();
int wx = screenGeometry.width();
int x = wx - 25;
int y = this->height() * yIncrease;
this->setFixedWidth(x);
this->setFixedHeight(y);
ui->bodyLabel->sizePolicy().setVerticalPolicy(QSizePolicy::Expanding);
ui->bodyLabel->sizePolicy().setHorizontalPolicy(QSizePolicy::Expanding);
adjust_size();
}