diff --git a/src/Memory/Database.cpp b/src/Memory/Database.cpp new file mode 100644 index 0000000..a205b2b --- /dev/null +++ b/src/Memory/Database.cpp @@ -0,0 +1,45 @@ +#include "Database.h" + +#include +#include + +#include "Deserializer.h" +namespace memory { +Database::~Database() { + close(false); // di default non salvare eventuali cambiamenti +} +bool Database::open(const QString &path) { + QFile file(path); + if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) { + return false; + } + media_container_.addMedia(Deserializer::deserialize(file)); + file.close(); + return true; +} +bool Database::close(bool save_on_exit) { + if (save_on_exit) { + return file_.commit(); // false <=> errore + } + file_.cancelWriting(); + return true; +} + +bool Database::save() { + if (!file_.commit()) { + // errore in scrittura + return false; + } + + if (!file_.open(QIODevice::ReadOnly | QIODevice::Text)) { + return false; + } + return true; +} + +std::vector> Database::filterMedia( + const media::Media &media_as_filter) { + return media_container_.filter(media_as_filter); +} + +} // namespace memory diff --git a/src/Memory/Database.h b/src/Memory/Database.h new file mode 100644 index 0000000..ea95c0a --- /dev/null +++ b/src/Memory/Database.h @@ -0,0 +1,24 @@ +#ifndef MEMORY_DATABASE_H +#define MEMORY_DATABASE_H +#include + +#include "./MediaContainer.h" +#include + +namespace memory { +class Database { + private: + MediaContainer media_container_; + QSaveFile file_; + + public: + ~Database(); + + bool open(const QString &path); + bool close(bool save); + bool save(); + + std::vector> filterMedia(const media::Media &); +}; +} // namespace memory +#endif diff --git a/src/Memory/MediaContainer.h b/src/Memory/MediaContainer.h index 7b26273..9ff668e 100644 --- a/src/Memory/MediaContainer.h +++ b/src/Memory/MediaContainer.h @@ -1,10 +1,10 @@ #ifndef MEMORY_MEDIACONTAINER_H #define MEMORY_MEDIACONTAINER_H +#include #include -#include #include -#include +#include #include "../Media/Media.h" #include "../Media/Novel.h" @@ -49,6 +49,6 @@ class MediaContainer { int serialize(QSaveFile& file) const; }; -} // namespace memory +} // namespace memory -#endif // MEMORY_MEDIACONTAINER_H +#endif // MEMORY_MEDIACONTAINER_H diff --git a/src/src.pro b/src/src.pro new file mode 100644 index 0000000..ba5f2c5 --- /dev/null +++ b/src/src.pro @@ -0,0 +1,41 @@ +###################################################################### +# Automatically generated by qmake (3.1) Tue May 20 17:32:43 2025 +###################################################################### + +TEMPLATE = app +TARGET = src +INCLUDEPATH += . +QT += widgets + +# You can make your code fail to compile if you use deprecated APIs. +# In order to do so, uncomment the following line. +# Please consult the documentation of the deprecated API in order to know +# how to port your code away from it. +# You can also select to disable deprecated APIs only up to a certain version of Qt. +#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 + +# Input +HEADERS += Media/Album.h \ + Media/AudioBook.h \ + Media/Ebook.h \ + Media/IConstMediaVisitor.h \ + Media/IMedia.h \ + Media/Media.h \ + Media/Movie.h \ + Media/Novel.h \ + Media/Series.h \ + Media/StringUtils.h \ + Memory/Database.h \ + Memory/Deserializer.h \ + Memory/MediaContainer.h \ + Memory/Serializer.h +SOURCES += main.cpp \ + Media/Album.cpp \ + Media/AudioBook.cpp \ + Media/Ebook.cpp \ + Media/Media.cpp \ + Media/Movie.cpp \ + Media/Novel.cpp \ + Media/Series.cpp \ + Memory/Database.cpp \ + Memory/MediaContainer.cpp