Zrythm v2.0.0-DEV
a highly automated and intuitive digital audio workstation
Loading...
Searching...
No Matches
project_saver.h
1// SPDX-FileCopyrightText: © 2025 Alexandros Theodotou <alex@zrythm.org>
2// SPDX-License-Identifier: LicenseRef-ZrythmLicense
3
4#pragma once
5
7#include "utils/version.h"
8
9#include <QFuture>
10
11namespace zrythm::structure::project
12{
13class Project;
14
15class ProjectSaver
16{
17public:
18 ProjectSaver (const Project &project, utils::Version app_version);
19
29 [[nodiscard]] QFuture<utils::Utf8String>
30 save (const fs::path &path, bool is_backup);
31
39 static int autosave_cb (void * data);
40
46 static void make_project_dirs (const fs::path &project_directory);
47
60 bool compress,
61 char ** _dest,
62 size_t * _dest_size,
63 const QByteArray &src);
64
65 static void
66 compress (char ** _dest, size_t * _dest_size, const QByteArray &src)
67 {
68 compress_or_decompress (true, _dest, _dest_size, src);
69 }
70
71 static void
72 decompress (char ** _dest, size_t * _dest_size, const QByteArray &src)
73 {
74 compress_or_decompress (false, _dest, _dest_size, src);
75 }
76
85 static std::string
86 get_existing_uncompressed_text (const fs::path &project_dir);
87
88 bool has_unsaved_changes () const;
89
90private:
97 void set_and_create_next_available_backup_dir ();
98
107 void cleanup_plugin_state_dirs (
108 const Project &main_project,
109 const fs::path &project_dir,
110 bool is_backup);
111
112private:
113 const Project &project_;
114 // std::optional<gui::actions::UndoableActionPtrVariant>
115 // last_action_in_last_successful_autosave_;
116
118 SteadyTimePoint last_successful_autosave_time_;
119
121 // std::optional<gui::actions::UndoableActionPtrVariant> last_saved_action_;
122
124 std::binary_semaphore save_sem_{ 1 };
125
126 utils::Version app_version_;
127};
128}
static std::string get_existing_uncompressed_text(const fs::path &project_dir)
Returns the uncompressed text representation of the saved project file.
static void make_project_dirs(const fs::path &project_directory)
Creates the project directories.
static void compress_or_decompress(bool compress, char **_dest, size_t *_dest_size, const QByteArray &src)
Compresses/decompress a project from a file/data to a file/data.
static int autosave_cb(void *data)
Autosave callback.
QFuture< utils::Utf8String > save(const fs::path &path, bool is_backup)
Saves the project asynchronously to the directory set previously in Project.
Core functionality of a Zrythm project.
Definition project.h:51
Progress info.
Represents a semantic version with major, minor, and optional patch.
Definition version.h:29