Compare commits

..
Author SHA1 Message Date
tomasrandGitHub 280c329339 Merge (#38) from tomasriveral/release/vv2.1.1
[Automatic] Release PR v2.1.1
2026-05-26 11:56:22 +02:00
tomasrandGitHub f7c84136a5 Merge (#37) from tomasriveral/fix-release-workflow
fix: release workflow correct branch
2026-05-26 11:53:33 +02:00
github-actions[bot] 77b5148489 chore(release): v2.1.1 2026-05-26 09:45:50 +00:00
tomasrandGitHub d537357802 Merge (#36) from tomasriveral/fix-33-flake-version
fix(#33): CI update flake version flag
2026-05-26 11:44:55 +02:00
tomasrandGitHub fd77eaa4de Merge (#35) from tomasriveral/revert-34-fix-33-flake-version
Revert "fix(#33): flake notewrapper version flag"
2026-05-26 11:37:04 +02:00
tomasrandGitHub d6fa89785f Revert "fix(#33): flake notewrapper version flag" 2026-05-26 09:36:39 +00:00
tomasrandGitHub 30616b1b6f Merge (#34) from tomasriveral/fix-33-flake-version
fix(#33): flake notewrapper version flag
2026-05-26 11:22:05 +02:00
tomasrandGitHub c9ee6ca032 Merge (#32) from tomasriveral/readme-flake
docs: add flake instruction in readme
2026-05-25 17:43:25 +02:00
tomasrandGitHub 2a09d4ee46 Merge pull request (#31)
flake: fix fetching
2026-05-25 17:29:59 +02:00
tomasrandGitHub e370f98c5e Merge (#30) from tomasriveral/workflows-fix
CI: release workflow fix bash
2026-05-25 17:02:22 +02:00
tomasrandGitHub 6e6ddebb5e Merge (#29) from tomasriveral/workflows
CI: add weeklyUpdate workflow
2026-05-25 16:56:13 +02:00
tomasrandGitHub 91d6db6c74 Merge (#28) from tomasriveral/flake.nix
flake: init
2026-05-25 16:46:57 +02:00
tomasrandGitHub f85a32f97f Merge pull request #27 from tomasriveral/tomasriveral-patch-1
docs: fix typo in readme
2026-05-23 18:26:26 +02:00
tomasrandGitHub bc306ca630 docs: fix typo in readme 2026-05-23 16:26:07 +00:00
tomasrandGitHub 89c686652e Merge pull request #26 from tomasriveral/readme-message
docs: add message in readme
2026-05-23 18:25:25 +02:00
tomasrandGitHub 8ee0096540 Merge (#25) from tomasriveral/fix-contributing
docs: fix forgot to update function name
2026-05-02 08:50:37 +02:00
tomasrandGitHub 2d6787a91b Merge (#24) from tomasriveral/fixJournalCreation fix (#21)
journal: fix (#21)
2026-05-02 08:21:51 +02:00
tomasr 2f688df3ec journal: fix crash when creating unified journal without ".md" 2026-05-02 08:18:46 +02:00
8 changed files with 32 additions and 63 deletions
+1 -1
View File
@@ -48,7 +48,7 @@ jobs:
run: | run: |
gh pr create \ gh pr create \
--base main \ --base main \
--head release/${{ inputs.version }} \ --head release/v${{ inputs.version }} \
--title "[Automatic] Release PR ${{ 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 }}" --body "Automated release PR.\nAfter the test's succesfull run, create manually a release with a new tag matching ${{ inputs.version }}"
env: env:
+1 -1
View File
@@ -1,6 +1,6 @@
# NoteWrapper # NoteWrapper
Note: This project fullfills all my usecase for now, so my main source for features ideas dried out. So if you have good ideas, feel free to open an issue ;) Note: This project fullfills all my usecases for now, so my main source for features ideas dried out. So if you have good ideas, feel free to open an issue ;)
[![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/tomasriveral/notewrapper) [![Ask DeepWiki](https://deepwiki.com/badge.svg)](https://deepwiki.com/tomasriveral/notewrapper)
Generated
+6 -6
View File
@@ -20,11 +20,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1779508470, "lastModified": 1779560665,
"narHash": "sha256-Ap9KJX+5xHIn3bPIpfNgT6MEXdAECECwo4/rmlQD74M=", "narHash": "sha256-tpyBcxPpcQb8ukyNF7DoCwfSY3VPsxHoYwj00Cayv5o=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "29916453413845e54a65b8a1cf996842300cd299", "rev": "64c08a7ca051951c8eae34e3e3cb1e202fe36786",
"type": "github" "type": "github"
}, },
"original": { "original": {
@@ -37,11 +37,11 @@
"notewrapper": { "notewrapper": {
"flake": false, "flake": false,
"locked": { "locked": {
"lastModified": 1779721342, "lastModified": 1779788695,
"narHash": "sha256-QbRzgD4HoUUemaVCIZ2VfiW+SUjzFY2rL51CLOxQLvk=", "narHash": "sha256-JdTeS6rxDEa+A+rQjbFJajBhlwauBApIP3UwvrPbaf4=",
"owner": "tomasriveral", "owner": "tomasriveral",
"repo": "NoteWrapper", "repo": "NoteWrapper",
"rev": "e370f98c5ebc3c037dec4e7e35f26230724b70d3", "rev": "d537357802940e924d77ebd0fc1a658f884138ea",
"type": "github" "type": "github"
}, },
"original": { "original": {
+1 -1
View File
@@ -17,7 +17,7 @@
in { in {
packages.default = pkgs.stdenv.mkDerivation (finalAttrs: { packages.default = pkgs.stdenv.mkDerivation (finalAttrs: {
pname = "notewrapper"; pname = "notewrapper";
version = "v2.1"; version = "v2.1.1";
src = notewrapper; src = notewrapper;
+9 -33
View File
@@ -529,14 +529,9 @@ 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 normal backup"); debug("Handling backup");
forceBackup = 0; handleBackups(directoriesArray, numDirectories, backupDirectoriesArray, homedir, interval, (const char **)rsyncArgs, rsyncArgsNumber, shouldDebug);
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
@@ -577,26 +572,13 @@ backup_config_end:
} }
altDebug("└ ------------------------------\n"); altDebug("└ ------------------------------\n");
} }
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
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.";
};
*backupMessage = 0; // we reset it to show the message only once // adds "create a new vault" into the vaultsArray
const int extraOptions = 3;
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)";
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);
@@ -612,8 +594,7 @@ 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 && strcmp(vaultSelected, "Backup now") != 0 && if (strcmp(vaultSelected, "Create a new vault") != 0 && strcmp(vaultSelected, "Settings") != 0 && strcmp(vaultSelected, "Quit (Ctrl+C)") != 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
@@ -750,11 +731,6 @@ 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 -9
View File
@@ -130,16 +130,16 @@ char *createNewNote(char dirToVault[PATH_MAX], char *vaultFromDir, int bypass, c
free(fileFullPath); free(fileFullPath);
} else { // if it is a unified journal } else { // if it is a unified journal
char *fileFullPath = malloc(PATH_MAX); char *fileFullPath = malloc(PATH_MAX);
snprintf(fileFullPath, PATH_MAX, "%s/%s/%s", dirToVault, vaultFromDir, fileName); // we append .md directly to fileName and not only to fileFullPath to avoid passing the wrong fileName later.
int len = strlen(fileFullPath); int lenName = strlen(fileName);
if (fileFullPath[len - 3] != '.' || fileFullPath[len - 2] != 'm' || fileFullPath[len - 1] != 'd') { // there might be a cleaner way to do this if (fileName[lenName - 3] != '.' && fileName[lenName - 2] != 'm' && fileName[lenName - 2] != '1') {
error(len > PATH_MAX - 3, "user", "%s is too big (greater than PATH_MAX-3) and we can't append .md", fileFullPath); strcat(fileName, ".md");
strncat(fileFullPath, ".md", PATH_MAX); debug("We just appended .md to %s", fileName);
// we checked before if fileName didn't already exist.
// we must redo it as we add a .mode
struct stat st;
error(stat(fileFullPath, &st) == 0, "user", "%s already exists", fileFullPath);
} }
snprintf(fileFullPath, PATH_MAX, "%s/%s/%s", dirToVault, vaultFromDir, fileName);
// we verify if the file doesn't already exist as we might just have changed the fileName and (by extension) the file path.
struct stat metadata;
error(stat(fileFullPath, &metadata) == 0, "user", "%s already exists", fileFullPath);
FILE *filePointer; FILE *filePointer;
filePointer = fopen(fileFullPath, "w"); // creates and opens the file filePointer = fopen(fileFullPath, "w"); // creates and opens the file
error(filePointer == NULL, "program", "The %s couldn't be created.", fileFullPath); error(filePointer == NULL, "program", "The %s couldn't be created.", fileFullPath);
+3 -9
View File
@@ -167,9 +167,8 @@ 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 forceBackup, int *backupMessage, const int shouldDebug) { 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];
@@ -204,12 +203,8 @@ 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 || forceBackup) { if (deltaTime > interval) {
if (!forceBackup) { debug("(difftime) %f is greater than (interval) %d -> backuping...", deltaTime, interval);
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) {
@@ -223,7 +218,6 @@ 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]);
+2 -3
View File
@@ -81,8 +81,7 @@ 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 forceBackup, int *backupMessage, const int shouldDebug); const int shouldDebug);
#endif #endif