mirror of
https://github.com/tomasriveral/NoteWrapper.git
synced 2026-08-11 18:18:36 +02:00
feat: add backup now button
This commit is contained in:
+33
-9
@@ -529,9 +529,14 @@ backup_config_end:
|
|||||||
shouldDebug); // check if editor is supported and if it is installed. If not, it
|
shouldDebug); // check if editor is supported and if it is installed. If not, it
|
||||||
// will throw an error.
|
// will throw an error.
|
||||||
|
|
||||||
|
int *backupMessage = malloc(sizeof(int)); // Used later to set the backuping message.
|
||||||
|
*backupMessage = 0; // default don't show the message
|
||||||
|
int forceBackup = 0;
|
||||||
if (doesBackup) {
|
if (doesBackup) {
|
||||||
debug("Handling backup");
|
debug("Handling normal backup");
|
||||||
handleBackups(directoriesArray, numDirectories, backupDirectoriesArray, homedir, interval, (const char **)rsyncArgs, rsyncArgsNumber, shouldDebug);
|
forceBackup = 0;
|
||||||
|
handleBackups(directoriesArray, numDirectories, backupDirectoriesArray, homedir, interval, (const char **)rsyncArgs, rsyncArgsNumber, forceBackup, backupMessage, shouldDebug);
|
||||||
|
debug("backupMessage was set to %d by a normal backup", *backupMessage);
|
||||||
}
|
}
|
||||||
|
|
||||||
initscr(); // initialize ncurses
|
initscr(); // initialize ncurses
|
||||||
@@ -572,13 +577,26 @@ backup_config_end:
|
|||||||
}
|
}
|
||||||
altDebug("└ ------------------------------\n");
|
altDebug("└ ------------------------------\n");
|
||||||
}
|
}
|
||||||
|
int extraOptions = 3;
|
||||||
// adds "create a new vault" into the vaultsArray
|
if (doesBackup) {
|
||||||
const int extraOptions = 3;
|
extraOptions++; // space for "Backup now" button
|
||||||
|
}
|
||||||
|
if (*backupMessage) {
|
||||||
|
extraOptions++;
|
||||||
|
}
|
||||||
vaultsArray = realloc(vaultsArray, (vaultsCount + extraOptions) * sizeof(char *)); // resize vaultsArray to fit the extra options
|
vaultsArray = realloc(vaultsArray, (vaultsCount + extraOptions) * sizeof(char *)); // resize vaultsArray to fit the extra options
|
||||||
vaultsArray[vaultsCount] = "Create a new vault"; // some more options that are not vaults
|
int index = 0;
|
||||||
vaultsArray[vaultsCount + 1] = "Settings";
|
vaultsArray[vaultsCount + index++] = "Create a new vault"; // some more options that are not vaults
|
||||||
vaultsArray[vaultsCount + 2] = "Quit (Ctrl+C)";
|
vaultsArray[vaultsCount + index++] = "Settings";
|
||||||
|
if (doesBackup) {
|
||||||
|
vaultsArray[vaultsCount + index++] = "Backup now";
|
||||||
|
}
|
||||||
|
vaultsArray[vaultsCount + index++] = "Quit (Ctrl+C)";
|
||||||
|
if (*backupMessage) {
|
||||||
|
vaultsArray[vaultsCount + index++] = "A backup was launched. Do not immediatly close the program. After a few seconds, you can safely ignore this message.";
|
||||||
|
};
|
||||||
|
|
||||||
|
*backupMessage = 0; // we reset it to show the message only once
|
||||||
|
|
||||||
vaultSelected = ncursesSelect(vaultsArray, "Select vault to open (Use arrows or WASD, Enter to select):", vaultsCount, extraOptions, " ", "Or select an option below", "", shouldDebug);
|
vaultSelected = ncursesSelect(vaultsArray, "Select vault to open (Use arrows or WASD, Enter to select):", vaultsCount, extraOptions, " ", "Or select an option below", "", shouldDebug);
|
||||||
|
|
||||||
@@ -594,7 +612,8 @@ backup_config_end:
|
|||||||
}
|
}
|
||||||
|
|
||||||
debug("Selected vault: %s", vaultSelected);
|
debug("Selected vault: %s", vaultSelected);
|
||||||
if (strcmp(vaultSelected, "Create a new vault") != 0 && strcmp(vaultSelected, "Settings") != 0 && strcmp(vaultSelected, "Quit (Ctrl+C)") != 0) {
|
if (strcmp(vaultSelected, "Create a new vault") != 0 && strcmp(vaultSelected, "Settings") != 0 && strcmp(vaultSelected, "Quit (Ctrl+C)") != 0 && strcmp(vaultSelected, "Backup now") != 0 &&
|
||||||
|
strcmp(vaultSelected, "A backup was launched. Do not immediatly close the program. After a few seconds, you can safely ignore this message.") != 0) {
|
||||||
note_selection:
|
note_selection:
|
||||||
bypassSelectionVault = 0; // we must reset bypassSelectionVault to not get stuck in a
|
bypassSelectionVault = 0; // we must reset bypassSelectionVault to not get stuck in a
|
||||||
// infinite loop of bypassing
|
// infinite loop of bypassing
|
||||||
@@ -731,6 +750,11 @@ backup_config_end:
|
|||||||
} else if (strcmp(vaultSelected, "Settings") == 0) {
|
} else if (strcmp(vaultSelected, "Settings") == 0) {
|
||||||
openEditor(configPath, editorToOpen, 0, 0,
|
openEditor(configPath, editorToOpen, 0, 0,
|
||||||
shouldDebug); // as this is not a md file we set render and jumptoEnfOfFile to 0
|
shouldDebug); // as this is not a md file we set render and jumptoEnfOfFile to 0
|
||||||
|
} else if (strcmp(vaultSelected, "Backup now") == 0) {
|
||||||
|
debug("Running a forced backup");
|
||||||
|
forceBackup = 1;
|
||||||
|
handleBackups(directoriesArray, numDirectories, backupDirectoriesArray, homedir, interval, (const char **)rsyncArgs, rsyncArgsNumber, forceBackup, backupMessage, shouldDebug);
|
||||||
|
debug("backupMessage was set to %d by a normal backup", *backupMessage);
|
||||||
} else if (strcmp(vaultSelected, "Quit (Ctrl+C)") == 0) {
|
} else if (strcmp(vaultSelected, "Quit (Ctrl+C)") == 0) {
|
||||||
debug("The program was exited");
|
debug("The program was exited");
|
||||||
shouldExit = 1;
|
shouldExit = 1;
|
||||||
|
|||||||
+9
-3
@@ -167,8 +167,9 @@ void initAppFilesAndDirs(const char *home, const int shouldDebug) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void handleBackups(char **sourceDirectoryArray, const int sourceNumber, char **destinationDirectoryArray, const char *homeDir, const int interval, const char **rsyncArguments, const int rsyncArgumentsNumber,
|
void handleBackups(char **sourceDirectoryArray, const int sourceNumber, char **destinationDirectoryArray, const char *homeDir, const int interval, const char **rsyncArguments, const int rsyncArgumentsNumber,
|
||||||
const int shouldDebug) {
|
const int forceBackup, int *backupMessage, const int shouldDebug) {
|
||||||
int shouldBackup = 0;
|
int shouldBackup = 0;
|
||||||
|
|
||||||
time_t now = time(NULL);
|
time_t now = time(NULL);
|
||||||
debug("Time since epoch is %ld", (long)now);
|
debug("Time since epoch is %ld", (long)now);
|
||||||
char cacheFilePATH[PATH_MAX];
|
char cacheFilePATH[PATH_MAX];
|
||||||
@@ -203,8 +204,12 @@ void handleBackups(char **sourceDirectoryArray, const int sourceNumber, char **d
|
|||||||
error(1, "program", "Invalid timestamp in cache file: %s", line);
|
error(1, "program", "Invalid timestamp in cache file: %s", line);
|
||||||
}
|
}
|
||||||
double deltaTime = difftime(now, lastBackupTime);
|
double deltaTime = difftime(now, lastBackupTime);
|
||||||
if (deltaTime > interval) {
|
if (deltaTime > interval || forceBackup) {
|
||||||
debug("(difftime) %f is greater than (interval) %d -> backuping...", deltaTime, interval);
|
if (!forceBackup) {
|
||||||
|
debug("(difftime) %f is greater than (interval) %d -> backuping...", deltaTime, interval);
|
||||||
|
} else {
|
||||||
|
debug("Backup was forced. backuping...");
|
||||||
|
}
|
||||||
shouldBackup = 1;
|
shouldBackup = 1;
|
||||||
cacheFile = fopen(cacheFilePATH, "w");
|
cacheFile = fopen(cacheFilePATH, "w");
|
||||||
if (!cacheFile) {
|
if (!cacheFile) {
|
||||||
@@ -218,6 +223,7 @@ void handleBackups(char **sourceDirectoryArray, const int sourceNumber, char **d
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (shouldBackup) {
|
if (shouldBackup) {
|
||||||
|
*backupMessage = 1;
|
||||||
debug("A backup is needed");
|
debug("A backup is needed");
|
||||||
for (int i = 0; i < sourceNumber; i++) {
|
for (int i = 0; i < sourceNumber; i++) {
|
||||||
debug("%s", destinationDirectoryArray[i]);
|
debug("%s", destinationDirectoryArray[i]);
|
||||||
|
|||||||
+3
-2
@@ -81,7 +81,8 @@ If need launches in the background rsync to do the backuping.
|
|||||||
Each pair of source/destination will launch one rsync process.
|
Each pair of source/destination will launch one rsync process.
|
||||||
If a pair don't need to be backed up, the destination should be set to NULL.
|
If a pair don't need to be backed up, the destination should be set to NULL.
|
||||||
rsyncArgs is the array of arguments to be passed to rsync. Do not inclue destination or source. It
|
rsyncArgs is the array of arguments to be passed to rsync. Do not inclue destination or source. It
|
||||||
will be added in the function.*/
|
will be added in the function.
|
||||||
|
backupMessage will be set to 1 if a backup was launched.*/
|
||||||
void handleBackups(char **sourceDirectoryArray, const int sourceDirectoryNumber, char **destinationDirectoryArray, const char *homeDir, const int interval, const char **rsyncArgs, const int rsyncArgsNumber,
|
void handleBackups(char **sourceDirectoryArray, const int sourceDirectoryNumber, char **destinationDirectoryArray, const char *homeDir, const int interval, const char **rsyncArgs, const int rsyncArgsNumber,
|
||||||
const int shouldDebug);
|
const int forceBackup, int *backupMessage, const int shouldDebug);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user