Skip to content

Commit 1f31b52

Browse files
committed
Add image auto save and load
1 parent 6cb62c4 commit 1f31b52

File tree

10 files changed

+313
-460
lines changed

10 files changed

+313
-460
lines changed

source/interfaces/mainwindow/mainwindow.cpp

Lines changed: 3 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
#include <ui_mainwindow.h>
2222

2323
// Services
24-
#include <services/image-downloader/image_downloader.h>
2524
#include <services/image-printer/image_printer.h>
2625
#include <services/theme-loader/theme_loader.h>
2726

@@ -92,28 +91,7 @@ MainWindow::MainWindow(QWidget *parent)
9291

9392
ui->database_table_view->addActions(ui->menubar->actions());
9493

95-
if (!ImageDownloader::FetchImage(
96-
settings_manager_.GetSettings().consts.source_image_path + "." +
97-
settings_manager_.GetSettings().image.format,
98-
settings_manager_.GetSettings().image.url
99-
)) {
100-
QMessageBox::warning(this, "Предупреждение!", "Не удалось загрузить изображение!\nНе верно указана ссылка");
101-
}
102-
103-
QImage image;
104-
105-
if (!image.load(
106-
settings_manager_.GetSettings().consts.source_image_path + "." +
107-
settings_manager_.GetSettings().image.format
108-
)) {
109-
QMessageBox::warning(
110-
this,
111-
"Предупреждение!",
112-
"Не удалось открыть изображение!\nНе верно указан формат изображения или ссылка"
113-
);
114-
}
115-
116-
text_painter_.SetImage(image);
94+
text_painter_.SetImage(settings_manager_.GetSettings().image);
11795

11896
for (int i = 0; i < 3; ++i) {
11997
items_[i].options = settings_manager_.GetSettings().font_settings[i];
@@ -164,8 +142,7 @@ void MainWindow::on_save_image_triggered() {
164142
settings_manager_.GetSettings().output_folder
165143
+ "/image_"
166144
+ items_[0].content
167-
+ "."
168-
+ settings_manager_.GetSettings().image.format
145+
+ ".jpeg"
169146
);
170147
if (status) {
171148
ui->statusbar->showMessage(
@@ -313,8 +290,7 @@ void MainWindow::on_save_some_images_triggered() {
313290
settings_manager_.GetSettings().output_folder
314291
+ "/image_"
315292
+ items_[0].content
316-
+ "."
317-
+ settings_manager_.GetSettings().image.format
293+
+ ".jpeg"
318294
)) {
319295
ui->statusbar->showMessage(
320296
"image_"

source/interfaces/options/options.cpp

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,6 @@ Options::Options(QWidget *parent) :
6262
ui->example_3->setStyleSheet(QString("color: %1;\nfont-size: %2px;").arg(
6363
settings_buffer_.font_settings[2].color.name(QColor::HexRgb)).arg(
6464
settings_buffer_.font_settings[2].font.pixelSize()));
65-
ui->image_url_edit->setText(settings_buffer_.image.url.toString());
66-
ui->image_format_edit->setText(settings_buffer_.image.format);
6765

6866
SetAdvancedSettingsVisible(false);
6967
}
@@ -137,7 +135,7 @@ void Options::on_database_edit_button_clicked() {
137135
}
138136

139137
void Options::on_save_button_clicked() {
140-
if (settings_manager_.GetSettings().image.url != settings_buffer_.image.url ||
138+
if (settings_manager_.GetSettings().image != settings_buffer_.image ||
141139
settings_manager_.GetSettings().database.host != settings_buffer_.database.host ||
142140
settings_manager_.GetSettings().database.port != settings_buffer_.database.port ||
143141
settings_manager_.GetSettings().database.schema != settings_buffer_.database.schema) {
@@ -148,21 +146,32 @@ void Options::on_save_button_clicked() {
148146
close();
149147
}
150148

149+
void Options::on_upload_button_clicked() {
150+
QString path = QFileDialog::getOpenFileName(
151+
this,
152+
"Загрузить изображение",
153+
QDir::homePath(),
154+
"All files(*.*);;"
155+
"JPEG(*.jpg *.jpeg);;"
156+
"PNG(*.png);;"
157+
"BITMAP(*.bmp);;"
158+
"WEBP(*.webp)"
159+
);
160+
if (path.isEmpty()) {
161+
return;
162+
}
163+
if (!settings_buffer_.image.load(path)) {
164+
QMessageBox::critical(this, "Ошибка", "Файл не загружен."
165+
"\nНе верно указан путь."
166+
"\nИли не верное имя файла.");
167+
};
168+
}
169+
151170
void Options::on_path_to_edit_textChanged(const QString &text) {
152171
settings_buffer_.output_folder = text;
153172
save_type_ |= SettingsManager::SaveType::SAVE_GENERAL;
154173
}
155174

156-
void Options::on_image_url_edit_textChanged(const QString &text) {
157-
settings_buffer_.image.url = text;
158-
save_type_ |= SettingsManager::SaveType::SAVE_SYNCING;
159-
}
160-
161-
void Options::on_image_format_edit_textChanged(const QString &text) {
162-
settings_buffer_.image.format = text;
163-
save_type_ |= SettingsManager::SaveType::SAVE_SYNCING;
164-
}
165-
166175
void Options::SetAdvancedSettingsVisible(bool state) {
167176
ui->formatting_label->setVisible(state);
168177
ui->formatting_line->setVisible(state);
@@ -185,10 +194,7 @@ void Options::SetAdvancedSettingsVisible(bool state) {
185194

186195
ui->image_line->setVisible(state);
187196
ui->image_label->setVisible(state);
188-
ui->image_format_label->setVisible(state);
189-
ui->image_format_edit->setVisible(state);
190-
ui->image_url_label->setVisible(state);
191-
ui->image_url_edit->setVisible(state);
197+
ui->upload_button->setVisible(state);
192198
}
193199

194200
void Options::on_advanced_settings_button_clicked() {

source/interfaces/options/options.h

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -106,18 +106,9 @@ private slots:
106106
void on_save_button_clicked();
107107

108108
/**
109-
* @brief Slot for handling changes in the image_url_edit field.
110-
*
111-
* @param text The new text in the image_url_edit field.
112-
*/
113-
void on_image_url_edit_textChanged(const QString &text);
114-
115-
/**
116-
* @brief Slot for handling changes in the image_format_edit field.
117-
*
118-
* @param text The new text in the image_format_edit field.
109+
* @brief Slot for handling the upload_button click event.
119110
*/
120-
void on_image_format_edit_textChanged(const QString &text);
111+
void on_upload_button_clicked();
121112

122113
/**
123114
* @brief Slot for handling the advanced_settings_button click event.

source/services/database/models.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,4 @@
2222
// Local
2323
#include "models/database_options_model.h"
2424
#include "models/font_settings_model.h"
25-
#include "models/image_model.h"
2625
#include "models/passwords_model.h"

source/services/database/models/image_model.h

Lines changed: 0 additions & 30 deletions
This file was deleted.

source/services/image-downloader/image_downloader.cpp

Lines changed: 0 additions & 56 deletions
This file was deleted.

source/services/image-downloader/image_downloader.h

Lines changed: 0 additions & 42 deletions
This file was deleted.

source/services/settings/settings_manager.cpp

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@
1919

2020
#include "settings_manager.h"
2121

22+
#include <QBuffer>
2223
#include <QDir>
2324
#include <qfileinfo.h>
25+
#include <QPixmap>
2426
#include <QSqlRecord>
2527
#include <QString>
2628
#include <QVariant>
@@ -30,6 +32,8 @@ using std::string;
3032
// Qt
3133
#include <QSqlQuery>
3234

35+
constexpr char EXTENSION[] = "WEBP";
36+
3337
SettingsManager::SettingsManager(const QString& connection_name) {
3438
LoadFromIni(connection_name);
3539
LoadFromDatabase();
@@ -91,12 +95,14 @@ void SettingsManager::Save(int type) {
9195
query.exec();
9296
}
9397

98+
QByteArray image_as_bytes;
99+
QBuffer buffer(&image_as_bytes);
100+
buffer.open(QIODevice::WriteOnly);
101+
settings_.image.save(&buffer, EXTENSION);
94102
query.prepare(
95-
UPDATE_IMAGE
96-
.arg(database_.schema)
97-
.arg("\'" + settings_.image.url.toString() + "\'")
98-
.arg("\'" + settings_.image.format + "\'")
103+
UPDATE_IMAGE.arg(settings_.database.schema)
99104
);
105+
query.bindValue(":img", image_as_bytes);
100106
query.exec();
101107
}
102108

@@ -140,11 +146,10 @@ void SettingsManager::LoadFromDatabase() {
140146
if (!query.next()) {
141147
assert(false);
142148
}
143-
{
144-
QSqlRecord rec = query.record();
145-
settings_.image.url = rec.value("url").toUrl();
146-
settings_.image.format = rec.value("format").toString();
147-
}
149+
settings_.image.loadFromData(
150+
query.value("base64").toByteArray(),
151+
EXTENSION
152+
);
148153

149154
query.prepare(SELECT_PASSWORDS.arg(database_.schema));
150155
query.exec();

source/services/settings/settings_manager.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
// Qt
2727
#include <QColor>
2828
#include <QFont>
29+
#include <QImage>
2930
#include <QPointF>
3031
#include <QString>
3132

@@ -54,7 +55,7 @@ class SettingsManager {
5455
QString theme;
5556
std::array<Models::FontSettings, 3> font_settings;
5657
Models::Database database;
57-
Models::Image image;
58+
QImage image;
5859
Models::Passwords passwords;
5960

6061
Settings& operator=(const Settings& other) {
@@ -93,9 +94,9 @@ class SettingsManager {
9394
const QString UPDATE_FONT_SETTINGS =
9495
"UPDATE %1.font_settings SET font = %2, color = %3, position_x = %4, position_y = %5, size = %6, bold = %7 WHERE id = %8;";
9596

96-
const QString SELECT_IMAGE = "SELECT url, format FROM %1.image WHERE id = 1;";
97+
const QString SELECT_IMAGE = "SELECT base64 FROM %1.image WHERE id = 1;";
9798

98-
const QString UPDATE_IMAGE = "UPDATE %1.image SET url = %2, format = %3 WHERE id = 1;";
99+
const QString UPDATE_IMAGE = "UPDATE %1.image SET base64 = :img WHERE id = 1;";
99100

100101
const QString SELECT_PASSWORDS = "SELECT * FROM %1.advanced_settings_passwords;";
101102

0 commit comments

Comments
 (0)