mirror of
https://github.com/tomasriveral/NoteWrapper.git
synced 2026-08-12 10:20:46 +02:00
Compare commits
35
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
693e85d974 | ||
|
|
b9f71f580a | ||
|
|
c6aac80951 | ||
|
|
b395fe1072 | ||
|
|
27cc3de27d | ||
|
|
18538f3250 | ||
|
|
6c7cc413da | ||
|
|
e670ef935f | ||
|
|
29d86955f4 | ||
|
|
0f9ec32bfc | ||
|
|
5ad8f2f99e | ||
|
|
c6e590e57c | ||
|
|
d47bdb82eb | ||
|
|
50748eeac0 | ||
|
|
19a8f7e07f | ||
|
|
1c17c62835 | ||
|
|
e666ca32de | ||
|
|
2a8392ac2e | ||
|
|
292688296e | ||
|
|
4c18c2dda4 | ||
|
|
1bfb7f82a5 | ||
|
|
a32f97d229 | ||
|
|
6555b7247e | ||
|
|
2b2a3455d2 | ||
|
|
d8a11bbc16 | ||
|
|
1d95983d5d | ||
|
|
30449ca473 | ||
|
|
7af79c76b1 | ||
|
|
27b8b310cb | ||
|
|
4d228fb911 | ||
|
|
34a2546990 | ||
|
|
7231741f2d | ||
|
|
e86d7e7e03 | ||
|
|
280c329339 | ||
|
|
77b5148489 |
@@ -48,7 +48,7 @@ jobs:
|
||||
run: |
|
||||
gh pr create \
|
||||
--base main \
|
||||
--head release/v${{ inputs.version }} \
|
||||
--head release/${{ inputs.version }} \
|
||||
--title "[Automatic] Release PR ${{ inputs.version }}" \
|
||||
--body "Automated release PR.\nAfter the test's succesfull run, create manually a release with a new tag matching ${{ inputs.version }}"
|
||||
env:
|
||||
|
||||
Generated
+4
-21
@@ -20,11 +20,11 @@
|
||||
},
|
||||
"nixpkgs": {
|
||||
"locked": {
|
||||
"lastModified": 1779508470,
|
||||
"narHash": "sha256-Ap9KJX+5xHIn3bPIpfNgT6MEXdAECECwo4/rmlQD74M=",
|
||||
"lastModified": 1785090369,
|
||||
"narHash": "sha256-m0pDuRJG7EDo9ri+4Ksu83VsI+PlxNC9lNBfydejce4=",
|
||||
"owner": "NixOS",
|
||||
"repo": "nixpkgs",
|
||||
"rev": "29916453413845e54a65b8a1cf996842300cd299",
|
||||
"rev": "624af665418d3c65d544145b4d34ad696439570e",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
@@ -34,27 +34,10 @@
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"notewrapper": {
|
||||
"flake": false,
|
||||
"locked": {
|
||||
"lastModified": 1779721342,
|
||||
"narHash": "sha256-QbRzgD4HoUUemaVCIZ2VfiW+SUjzFY2rL51CLOxQLvk=",
|
||||
"owner": "tomasriveral",
|
||||
"repo": "NoteWrapper",
|
||||
"rev": "e370f98c5ebc3c037dec4e7e35f26230724b70d3",
|
||||
"type": "github"
|
||||
},
|
||||
"original": {
|
||||
"owner": "tomasriveral",
|
||||
"repo": "NoteWrapper",
|
||||
"type": "github"
|
||||
}
|
||||
},
|
||||
"root": {
|
||||
"inputs": {
|
||||
"flake-utils": "flake-utils",
|
||||
"nixpkgs": "nixpkgs",
|
||||
"notewrapper": "notewrapper"
|
||||
"nixpkgs": "nixpkgs"
|
||||
}
|
||||
},
|
||||
"systems": {
|
||||
|
||||
@@ -4,22 +4,18 @@
|
||||
inputs = {
|
||||
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||
flake-utils.url = "github:numtide/flake-utils";
|
||||
notewrapper = {
|
||||
url = "github:tomasriveral/NoteWrapper";
|
||||
flake = false;
|
||||
};
|
||||
};
|
||||
|
||||
outputs = { self, nixpkgs, flake-utils, notewrapper }:
|
||||
outputs = { self, nixpkgs, flake-utils}:
|
||||
flake-utils.lib.eachDefaultSystem (system:
|
||||
let
|
||||
pkgs = import nixpkgs { inherit system; };
|
||||
in {
|
||||
packages.default = pkgs.stdenv.mkDerivation (finalAttrs: {
|
||||
pname = "notewrapper";
|
||||
version = "v2.1";
|
||||
version = "v2.3.0";
|
||||
|
||||
src = notewrapper;
|
||||
src = ./.;
|
||||
|
||||
nativeBuildInputs = with pkgs; [
|
||||
pkg-config
|
||||
|
||||
+61
-19
@@ -529,9 +529,14 @@ backup_config_end:
|
||||
shouldDebug); // check if editor is supported and if it is installed. If not, it
|
||||
// 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) {
|
||||
debug("Handling backup");
|
||||
handleBackups(directoriesArray, numDirectories, backupDirectoriesArray, homedir, interval, (const char **)rsyncArgs, rsyncArgsNumber, shouldDebug);
|
||||
debug("Handling normal backup");
|
||||
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
|
||||
@@ -572,15 +577,29 @@ backup_config_end:
|
||||
}
|
||||
altDebug("└ ------------------------------\n");
|
||||
}
|
||||
|
||||
// adds "create a new vault" into the vaultsArray
|
||||
const int extraOptions = 3;
|
||||
int extraOptions = 3;
|
||||
if (doesBackup) {
|
||||
extraOptions++; // space for "Backup now" button
|
||||
}
|
||||
if (*backupMessage) {
|
||||
extraOptions++;
|
||||
}
|
||||
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
|
||||
vaultsArray[vaultsCount + 1] = "Settings";
|
||||
vaultsArray[vaultsCount + 2] = "Quit (Ctrl+C)";
|
||||
int index = 0;
|
||||
vaultsArray[vaultsCount + index++] = "Create a new vault"; // some more options that are not vaults
|
||||
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.";
|
||||
};
|
||||
|
||||
vaultSelected = ncursesSelect(vaultsArray, "Select vault to open (Use arrows or WASD, Enter to select):", vaultsCount, extraOptions, " ", "Or select an option below", "", shouldDebug);
|
||||
*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 or use 1-9 to quick select or use 1-9 to quick select):", vaultsCount, extraOptions, " ",
|
||||
"Or select an option below", "", shouldDebug);
|
||||
|
||||
// now that we won't use vaultsArray in this iteration of the loop, we should free it and
|
||||
// all its elements. (As this is memory in the heap and not the stack and thus is our
|
||||
@@ -594,7 +613,8 @@ backup_config_end:
|
||||
}
|
||||
|
||||
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:
|
||||
bypassSelectionVault = 0; // we must reset bypassSelectionVault to not get stuck in a
|
||||
// infinite loop of bypassing
|
||||
@@ -625,12 +645,13 @@ backup_config_end:
|
||||
altDebug("└------------------------------\n");
|
||||
}
|
||||
// adds options
|
||||
int extraNotesOptions = 4;
|
||||
int extraNotesOptions = 5;
|
||||
filesArray = realloc(filesArray, (filesCount + extraNotesOptions) * sizeof(char *)); // resize filesArray to fit the extra options
|
||||
filesArray[filesCount] = "Create new note";
|
||||
filesArray[filesCount + 1] = "Back to vault selection";
|
||||
filesArray[filesCount + 2] = "Delete vault";
|
||||
filesArray[filesCount + 3] = "Quit (Ctrl+C)";
|
||||
filesArray[filesCount + 1] = "Search inside the vault";
|
||||
filesArray[filesCount + 2] = "Back to vault selection";
|
||||
filesArray[filesCount + 3] = "Delete vault";
|
||||
filesArray[filesCount + 4] = "Quit (Ctrl+C)";
|
||||
char *noteSelected;
|
||||
// if we set to bypass the note selector
|
||||
if (bypassSelectionNote) {
|
||||
@@ -646,8 +667,9 @@ backup_config_end:
|
||||
goto note_creation;
|
||||
}
|
||||
}
|
||||
noteSelected =
|
||||
ncursesSelect(filesArray, "Select note or journal to open (Use arrows or WASD, Enter to select):", filesCount, extraNotesOptions, " ", "Or select an option below", "", shouldDebug);
|
||||
char vaultMessage[PATH_MAX];
|
||||
snprintf(vaultMessage, PATH_MAX, "%s: Select note or journal to open (Use arrows or WASD, Enter to select or use 1-9 to quick select):", vaultSelected);
|
||||
noteSelected = ncursesSelect(filesArray, vaultMessage, filesCount, extraNotesOptions, " ", "Or select an option below", "", shouldDebug);
|
||||
// now that we won't use filesArray in this iteration of the loop, we should free it
|
||||
// and all its elements. (As this is memory in the heap and not the stack and thus
|
||||
// is our responsability to manage)
|
||||
@@ -661,7 +683,7 @@ backup_config_end:
|
||||
free(filesArray);
|
||||
debug("Selected note: %s", noteSelected);
|
||||
if (strcmp(noteSelected, "Create new note") != 0 && strcmp(noteSelected, "Back to vault selection") != 0 && strcmp(noteSelected, "Delete vault") != 0 &&
|
||||
strcmp(noteSelected, "Quit (Ctrl+C)") != 0) {
|
||||
strcmp(noteSelected, "Quit (Ctrl+C)") != 0 && strcmp(noteSelected, "Search inside the vault") != 0) {
|
||||
open_note:
|
||||
bypassSelectionNote = 0; // we must reset bypassSelectionNote to avoid getting into an infinite
|
||||
// loop of bypassing the note selection
|
||||
@@ -675,12 +697,18 @@ backup_config_end:
|
||||
|
||||
int *journalWasUpdated = malloc(sizeof(int));
|
||||
*journalWasUpdated = 0;
|
||||
|
||||
// used to go back to note selection
|
||||
int *returnNoteSelection = malloc(sizeof(int));
|
||||
*returnNoteSelection = 0;
|
||||
|
||||
if (!regexReturn) { // if the regex matches -> it's a journal
|
||||
debug("%s is a journal. Updating it...", noteSelected);
|
||||
fullPath = updateJournal(fullPath, noteSelected, timeFormat, journalWasUpdated,
|
||||
fullPath = updateJournal(fullPath, noteSelected, timeFormat, journalWasUpdated, returnNoteSelection,
|
||||
shouldDebug); // we return the path. As if it is a divided journal we
|
||||
// must point to the correct entry
|
||||
}
|
||||
if (!*returnNoteSelection) { // if we don't need to return to the note selection
|
||||
if (newLineOnOpening) {
|
||||
if (*journalWasUpdated) {
|
||||
appendToFile(fullPath, " \n",
|
||||
@@ -693,11 +721,20 @@ backup_config_end:
|
||||
}
|
||||
openEditor(fullPath, editorToOpen, shouldRender, shouldJumpToEnd, shouldDebug);
|
||||
free(fullPath);
|
||||
}
|
||||
free(returnNoteSelection);
|
||||
} else if (strcmp(noteSelected, "Create new note") == 0) {
|
||||
note_creation:
|
||||
noteSelected = createNewNote(notesDirectoryString, vaultSelected, bypassSelectionNote, bypassSelectionNoteValue, journalRegex, shouldDebug);
|
||||
// we can just go back to open_note
|
||||
goto open_note;
|
||||
} else if (strcmp(noteSelected, "Search inside the vault") == 0) {
|
||||
char *vaultPath = malloc(PATH_MAX);
|
||||
snprintf(vaultPath, PATH_MAX, "%s/%s/", notesDirectoryString, vaultSelected);
|
||||
char *result = fzfSelect(vaultPath, "Input text to be searched", shouldDebug);
|
||||
bypassSelectionNote = 1;
|
||||
bypassSelectionNoteValue = result;
|
||||
free(vaultPath);
|
||||
} else if (strcmp(noteSelected, "Back to vault selection") == 0) {
|
||||
shouldChangeVault = 1;
|
||||
} else if (strcmp(noteSelected, "Delete vault") == 0) {
|
||||
@@ -706,7 +743,7 @@ backup_config_end:
|
||||
const char *yesNo[] = {"No, go back to note selection.", "Yes."};
|
||||
char *answer = ncursesSelect((char **)yesNo,
|
||||
"Are you sure you want to delete the entire vault? This can "
|
||||
"not be undone (Use arrows or WASD, Enter to select):",
|
||||
"not be undone (Use arrows or WASD, Enter to select or use 1-9 to quick select):",
|
||||
1, 1, " ", "", "", shouldDebug);
|
||||
debug("You answered: %s for deleting the vault %s", answer, vaultSelected);
|
||||
if (strcmp(answer, "Yes.") == 0) {
|
||||
@@ -731,6 +768,11 @@ backup_config_end:
|
||||
} else if (strcmp(vaultSelected, "Settings") == 0) {
|
||||
openEditor(configPath, editorToOpen, 0, 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) {
|
||||
debug("The program was exited");
|
||||
shouldExit = 1;
|
||||
|
||||
+7
-3
@@ -188,7 +188,7 @@ char **getVaultsFromDirectories(char **directoryStringArray, int directoryNumber
|
||||
return vaultsArray;
|
||||
}
|
||||
|
||||
char *updateJournal(char *path, char *journal, char *timeFormat, int *journalWasUpdated, int shouldDebug) {
|
||||
char *updateJournal(char *path, char *journal, char *timeFormat, int *journalWasUpdated, int *returnNoteSelection, int shouldDebug) {
|
||||
path[PATH_MAX] = '\0'; // it assures it is a string (Most cases this does nothing). But rewriting at least
|
||||
// one bytes make the compile happy. He doesn't want to return an unchanged input.
|
||||
debug("Handling the journal %s", path);
|
||||
@@ -221,13 +221,14 @@ char *updateJournal(char *path, char *journal, char *timeFormat, int *journalWas
|
||||
that the Create new entry in journal is on top entryArray = realloc(entryArray,
|
||||
sizeof(char*));*/
|
||||
// simpler to just malloc 2 and later realloc
|
||||
const int extraOptions = 3;
|
||||
const int extraOptions = 4;
|
||||
char **entryArray = malloc(extraOptions * sizeof(char *));
|
||||
char *createEntryMessage = malloc(PATH_MAX);
|
||||
snprintf(createEntryMessage, PATH_MAX, "Create new entry for the journal %s", journal);
|
||||
entryArray[0] = createEntryMessage;
|
||||
entryArray[1] = "Open random entry";
|
||||
entryArray[2] = "Search inside entries";
|
||||
entryArray[3] = "Return to the note selection";
|
||||
int entryCount = extraOptions; // we need to count how many dirs there is to always readjust
|
||||
// how many memory we alloc
|
||||
// Refer https://pubs.opengroup.org/onlinepubs/7990989775/xsh/readdir.html
|
||||
@@ -259,7 +260,8 @@ char *updateJournal(char *path, char *journal, char *timeFormat, int *journalWas
|
||||
// element
|
||||
|
||||
// we must now select to create new entry or to enter in old one
|
||||
char *selectedOption = ncursesSelect(entryArray, "Create new entry or acces old entry (Use arrows or WASD, Enter to select):", extraOptions, entryCount - extraOptions, " ", " ", "",
|
||||
char *selectedOption =
|
||||
ncursesSelect(entryArray, "Create new entry or acces old entry (Use arrows or WASD, Enter to select or use 1-9 to quick select):", extraOptions, entryCount - extraOptions, " ", " ", "",
|
||||
shouldDebug); // the "Create new entry for the journal %s" will be the only options. All
|
||||
// other will be extraOptions. This is made so that "Create [...] %s" will
|
||||
// always be on top
|
||||
@@ -301,6 +303,8 @@ char *updateJournal(char *path, char *journal, char *timeFormat, int *journalWas
|
||||
snprintf(selectedOption, PATH_MAX, "%s/%s", path, temp);
|
||||
path = strdup(selectedOption);
|
||||
free(selectedOption);
|
||||
} else if (strcmp(selectedOption, "Return to the note selection") == 0) {
|
||||
*returnNoteSelection = 1;
|
||||
} else { // we just recreate the path to the selected entry
|
||||
// snprintf does not like to have the same variable as input and output so we use a
|
||||
// buffer
|
||||
|
||||
+2
-1
@@ -25,6 +25,7 @@ char **getVaultsFromDirectories(char **directoryStringArray, int directoryNumber
|
||||
// handles both type of journal (divided and unified).
|
||||
// creates new entry with date.
|
||||
// for divided select if we want to acces to a new entry or a old one.
|
||||
// returnNoteSelection tells us if the user wants to go back to the note selection.
|
||||
// returns the path to the file that needs to be opened.
|
||||
char *updateJournal(char *path, char *journal, char *timeFormat, int *journalWasUpdated, int shouldDebug);
|
||||
char *updateJournal(char *path, char *journal, char *timeFormat, int *journalWasUpdated, int *returnNoteSelection, int shouldDebug);
|
||||
#endif
|
||||
|
||||
@@ -6,7 +6,8 @@ void createNewVault(char **directoriesArray, int directoryCount, char **vaultsAr
|
||||
int emptyWarning = 0; // set to 1 later if inpted empty name
|
||||
input_screen:
|
||||
// choose in which directory the vault will be created
|
||||
char *dirToVault = ncursesSelect(directoriesArray, "Select a directory, in which the vault will remain (Use arrows or WASD, Enter to select)", directoryCount, 0, "", "", " ", shouldDebug);
|
||||
char *dirToVault =
|
||||
ncursesSelect(directoriesArray, "Select a directory, in which the vault will remain (Use arrows or WASD, Enter to select or use 1-9 to quick select)", directoryCount, 0, "", "", " ", shouldDebug);
|
||||
char *vaultName = malloc(PATH_MAX);
|
||||
if (!bypass) { // if won't bypass (if -v or --vault weren't set)
|
||||
echo();
|
||||
@@ -179,13 +180,7 @@ char *fzfSelect(char *pathToFiles, char *selectText, int shouldDebug) {
|
||||
error(fd == -1, "program", "mkstemp failed");
|
||||
close(fd);
|
||||
|
||||
/*
|
||||
* STEP 1:
|
||||
* Build index once into temp file
|
||||
* format: file:line:content
|
||||
*/
|
||||
snprintf(command, sizeof(command), "rg --line-number --no-heading --color=never . \"%s\" > %s", pathToFiles, indexFile);
|
||||
|
||||
debug("INDEX CMD: %s", command);
|
||||
|
||||
if (system(command) != 0) {
|
||||
@@ -193,45 +188,6 @@ char *fzfSelect(char *pathToFiles, char *selectText, int shouldDebug) {
|
||||
error(1, "program", "rg indexing failed");
|
||||
}
|
||||
|
||||
/*
|
||||
* STEP 2:
|
||||
* Use fzf on the index file (NO rg anymore)
|
||||
*/
|
||||
/*
|
||||
EXPLANATION:
|
||||
|
||||
cat %s
|
||||
→ feeds prebuilt index file (format: file:line:content) into fzf
|
||||
|
||||
fzf --delimiter ':'
|
||||
→ splits each line into fields:
|
||||
{1} = file path
|
||||
{2} = line number
|
||||
{3} = content
|
||||
|
||||
--prompt
|
||||
→ UI prompt text shown in fzf
|
||||
|
||||
--preview
|
||||
→ runs a shell command for selected item:
|
||||
file={1} → current file
|
||||
line={2} → line number of match
|
||||
|
||||
nl -ba "$file"
|
||||
→ prints file with line numbers
|
||||
|
||||
sed -n "$((line-5)),$((line+5))p"
|
||||
→ extracts a window of 5 lines above and below match
|
||||
|
||||
sed "... -> ..."
|
||||
→ highlights the matched line (middle of window) with red arrow
|
||||
|
||||
--preview-window=right:60%:hidden
|
||||
→ preview appears on right, 60% width, initially hidden
|
||||
|
||||
--bind 'change:show-preview'
|
||||
→ preview only appears after first selection change (not at startup)
|
||||
*/
|
||||
snprintf(command, sizeof(command),
|
||||
"cat %s | fzf --delimiter ':' --prompt='%s' "
|
||||
"--preview 'file={1}; line={2}; nl -ba \"$file\" | sed -n \"$((line-5)),$((line+5))p\" | "
|
||||
@@ -254,16 +210,25 @@ char *fzfSelect(char *pathToFiles, char *selectText, int shouldDebug) {
|
||||
buffer[strcspn(buffer, "\n")] = '\0';
|
||||
result = strdup(buffer);
|
||||
}
|
||||
debug("Buffer: %s", buffer);
|
||||
debug("result: %s", result);
|
||||
|
||||
// cut at first ':'
|
||||
result = strtok(result, ":");
|
||||
// cut at / (because we need the full paths before and we only need to return the journal entry)
|
||||
char *token = strtok(result, "/");
|
||||
result = NULL;
|
||||
while (token != NULL) {
|
||||
result = token;
|
||||
token = strtok(NULL, "/"); // Passing NULL means “don’t start a new string, resume
|
||||
// we need to cut out the whole pathToFiles
|
||||
int pathToFilesLen = strlen(pathToFiles);
|
||||
int cutOut = 0;
|
||||
for (int i = 0; i < pathToFilesLen; i++) {
|
||||
if (pathToFiles[i] == result[i]) {
|
||||
cutOut = i;
|
||||
}
|
||||
}
|
||||
result += cutOut + 1; // the + 1 cuts the first /
|
||||
|
||||
// in case we select a journal, we won't open the entry just yet. We only need to return the journal name (everything before [now the first] /
|
||||
result = strtok(result, "/");
|
||||
|
||||
debug("Cleaned note: %s", result);
|
||||
|
||||
// clean up
|
||||
pclose(fzfPipe);
|
||||
@@ -345,6 +310,69 @@ char *ncursesSelect(char **options, char *optionsText, int optionsNumber, int ex
|
||||
highlight = 0;
|
||||
}
|
||||
break;
|
||||
case '1':
|
||||
if (optionsNumber + extraOptionsNumber >= 1) {
|
||||
debug("Quickselected option 1.");
|
||||
highlight = 0;
|
||||
goto end_loop;
|
||||
}
|
||||
break;
|
||||
case '2':
|
||||
if (optionsNumber + extraOptionsNumber >= 1) {
|
||||
debug("Quickselected option 2.");
|
||||
highlight = 1;
|
||||
goto end_loop;
|
||||
}
|
||||
break;
|
||||
case '3':
|
||||
if (optionsNumber + extraOptionsNumber >= 1) {
|
||||
debug("Quickselected option 3.");
|
||||
highlight = 2;
|
||||
goto end_loop;
|
||||
}
|
||||
break;
|
||||
case '4':
|
||||
if (optionsNumber + extraOptionsNumber >= 1) {
|
||||
debug("Quickselected option 4.");
|
||||
highlight = 3;
|
||||
goto end_loop;
|
||||
}
|
||||
break;
|
||||
case '5':
|
||||
if (optionsNumber + extraOptionsNumber >= 1) {
|
||||
debug("Quickselected option 5.");
|
||||
highlight = 4;
|
||||
goto end_loop;
|
||||
}
|
||||
break;
|
||||
case '6':
|
||||
if (optionsNumber + extraOptionsNumber >= 1) {
|
||||
debug("Quickselected option 6.");
|
||||
highlight = 5;
|
||||
goto end_loop;
|
||||
}
|
||||
break;
|
||||
case '7':
|
||||
if (optionsNumber + extraOptionsNumber >= 1) {
|
||||
debug("Quickselected option 7.");
|
||||
highlight = 6;
|
||||
goto end_loop;
|
||||
}
|
||||
break;
|
||||
case '8':
|
||||
if (optionsNumber + extraOptionsNumber >= 1) {
|
||||
debug("Quickselected option 8.");
|
||||
highlight = 7;
|
||||
goto end_loop;
|
||||
}
|
||||
break;
|
||||
case '9':
|
||||
if (optionsNumber + extraOptionsNumber >= 1) {
|
||||
debug("Quickselected option 9.");
|
||||
highlight = 8;
|
||||
goto end_loop;
|
||||
}
|
||||
break;
|
||||
case 10: //\n
|
||||
goto end_loop;
|
||||
}
|
||||
|
||||
+8
-2
@@ -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,
|
||||
const int shouldDebug) {
|
||||
const int forceBackup, int *backupMessage, const int shouldDebug) {
|
||||
int shouldBackup = 0;
|
||||
|
||||
time_t now = time(NULL);
|
||||
debug("Time since epoch is %ld", (long)now);
|
||||
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);
|
||||
}
|
||||
double deltaTime = difftime(now, lastBackupTime);
|
||||
if (deltaTime > interval) {
|
||||
if (deltaTime > interval || forceBackup) {
|
||||
if (!forceBackup) {
|
||||
debug("(difftime) %f is greater than (interval) %d -> backuping...", deltaTime, interval);
|
||||
} else {
|
||||
debug("Backup was forced. backuping...");
|
||||
}
|
||||
shouldBackup = 1;
|
||||
cacheFile = fopen(cacheFilePATH, "w");
|
||||
if (!cacheFile) {
|
||||
@@ -218,6 +223,7 @@ void handleBackups(char **sourceDirectoryArray, const int sourceNumber, char **d
|
||||
}
|
||||
|
||||
if (shouldBackup) {
|
||||
*backupMessage = 1;
|
||||
debug("A backup is needed");
|
||||
for (int i = 0; i < sourceNumber; 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.
|
||||
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
|
||||
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,
|
||||
const int shouldDebug);
|
||||
const int forceBackup, int *backupMessage, const int shouldDebug);
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user