mirror of
https://github.com/tomasriveral/NoteWrapper.git
synced 2026-08-12 02:18:38 +02:00
miscellanious stuff
This commit is contained in:
@@ -5,3 +5,4 @@ nw
|
|||||||
error.log
|
error.log
|
||||||
output.log
|
output.log
|
||||||
result
|
result
|
||||||
|
massif.out.*
|
||||||
|
|||||||
@@ -6,5 +6,6 @@ pkgs.mkShell {
|
|||||||
pkgs.ncurses
|
pkgs.ncurses
|
||||||
pkgs.pkg-config
|
pkgs.pkg-config
|
||||||
pkgs.gdb
|
pkgs.gdb
|
||||||
|
pkgs.valgrind
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,8 +1,7 @@
|
|||||||
#include "ui.h"
|
#include "ui.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
void createNewVault(char *dirToVault, int bypass, char *bypassvalue, int shouldDebug) {
|
void createNewVault(char *dirToVault, int bypass, char *bypassvalue, int shouldDebug) {
|
||||||
// (TODO LATER) warn if it matches the regex for the journal
|
|
||||||
//(TODO LATER) add a way to go back to vault selection
|
|
||||||
int duplicateWarning = 0; // set to 1 later if the vault you tried to create already existed
|
int duplicateWarning = 0; // set to 1 later if the vault you tried to create already existed
|
||||||
input_screen:
|
input_screen:
|
||||||
char *vaultName = malloc(PATH_MAX);
|
char *vaultName = malloc(PATH_MAX);
|
||||||
@@ -33,7 +32,7 @@ input_screen:
|
|||||||
fflush(stderr);
|
fflush(stderr);
|
||||||
} else {
|
} else {
|
||||||
strncpy(vaultName, bypassvalue, PATH_MAX -2); // -2 (and later -1) because indexing
|
strncpy(vaultName, bypassvalue, PATH_MAX -2); // -2 (and later -1) because indexing
|
||||||
vaultName[PATH_MAX-1] = '\0'; // (TODO LATER) if bypassvalue << PATH_MAX, we loose a lot of space. maybe check strlen(bypassvalue) and append there a \0
|
vaultName[PATH_MAX-1] = '\0';
|
||||||
}
|
}
|
||||||
error(strcmp(vaultName, "") == 0, "user", "vaultName is empty"); // (TODO LATER) replace that with a warning
|
error(strcmp(vaultName, "") == 0, "user", "vaultName is empty"); // (TODO LATER) replace that with a warning
|
||||||
debug("Inputed vaultName=%s", vaultName);
|
debug("Inputed vaultName=%s", vaultName);
|
||||||
@@ -51,12 +50,9 @@ input_screen:
|
|||||||
goto input_screen;
|
goto input_screen;
|
||||||
}
|
}
|
||||||
free(vaultName);
|
free(vaultName);
|
||||||
// (TODO LATER) after creating we should automatically select this vault
|
|
||||||
}
|
}
|
||||||
|
|
||||||
char *createNewNote(char dirToVault[PATH_MAX], char *vaultFromDir, int bypass, char *bypassvalue, char *journalRegex, int shouldDebug) {
|
char *createNewNote(char dirToVault[PATH_MAX], char *vaultFromDir, int bypass, char *bypassvalue, char *journalRegex, int shouldDebug) {
|
||||||
// (TODO LATER) Add code to create journal
|
|
||||||
// (TODO LATER) Add check. If the user creates a note with a name that already exists. it erases the old one
|
|
||||||
// input from user for the name
|
// input from user for the name
|
||||||
char *fileName = malloc(BUFFER_SIZE);
|
char *fileName = malloc(BUFFER_SIZE);
|
||||||
if (!bypass) { // if we don't bypass. (if -n or --note weren't set.)
|
if (!bypass) { // if we don't bypass. (if -n or --note weren't set.)
|
||||||
@@ -74,15 +70,19 @@ char *createNewNote(char dirToVault[PATH_MAX], char *vaultFromDir, int bypass, c
|
|||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
fflush(stderr);
|
fflush(stderr);
|
||||||
} else { // bypasses user input if we bypass is set to 1
|
} else { // bypasses user input if we bypass is set to 1
|
||||||
strncpy(fileName, bypassvalue, BUFFER_SIZE-1); // (TODO LATER) Maybe add a warning if string is too big. It gets truncated
|
strncpy(fileName, bypassvalue, BUFFER_SIZE);
|
||||||
fileName[BUFFER_SIZE-1] = '\0';
|
fileName[BUFFER_SIZE-1] = '\0';
|
||||||
}
|
}
|
||||||
// (TODO LATER) add a way to go back to note selection
|
|
||||||
error(strcmp(fileName, "") == 0, "user", "fileName is empty"); // replace this with a warning and add a warning if duplicate file and handle case where multiple warnings (if such case is possible)
|
error(strcmp(fileName, "") == 0, "user", "fileName is empty"); // replace this with a warning and add a warning if duplicate file and handle case where multiple warnings (if such case is possible)
|
||||||
// check/sanitize the input
|
// check/sanitize the input
|
||||||
debug("Inputed fileName=%s", fileName);
|
debug("Inputed fileName=%s", fileName);
|
||||||
sanitize(fileName);
|
sanitize(fileName);
|
||||||
debug("Sanitized fileName=%s (We might append .md later", fileName);
|
debug("Sanitized fileName=%s (We might append .md later", fileName);
|
||||||
|
// we trow an error if the file already exists (previous behaviour was overwriting the file)
|
||||||
|
char path[PATH_MAX];
|
||||||
|
snprintf(path, PATH_MAX, "%s/%s/%s", dirToVault, vaultFromDir, fileName);
|
||||||
|
struct stat st;
|
||||||
|
error(stat(path, &st) == 0, "user", "%s already exists", fileName);
|
||||||
// if it matches with the journalRegex we treat it as a journal instead of a note
|
// if it matches with the journalRegex we treat it as a journal instead of a note
|
||||||
regex_t regex;
|
regex_t regex;
|
||||||
int regexReturn = regcomp(®ex, journalRegex, 0);
|
int regexReturn = regcomp(®ex, journalRegex, 0);
|
||||||
@@ -95,7 +95,7 @@ char *createNewNote(char dirToVault[PATH_MAX], char *vaultFromDir, int bypass, c
|
|||||||
// we will open it as a journal
|
// we will open it as a journal
|
||||||
if (!regexReturn) {
|
if (!regexReturn) {
|
||||||
debug("%s matches with %s treating it as a journal", fileName, journalRegex);
|
debug("%s matches with %s treating it as a journal", fileName, journalRegex);
|
||||||
char **options = malloc(32); // the number of bytes is exactly what in the two strings // (TODO LATER) There might be a cleaner way
|
char **options = malloc(32); // the number of bytes is exactly what in the two strings
|
||||||
options[0] = "Divided journal";
|
options[0] = "Divided journal";
|
||||||
options[1] = "Unified journal";
|
options[1] = "Unified journal";
|
||||||
char *optionSelected = ncursesSelect(options, "Select which type of journal you want to create (Use arrows or WASD, Enter to select):", 2, 0, "", "", " ", shouldDebug);
|
char *optionSelected = ncursesSelect(options, "Select which type of journal you want to create (Use arrows or WASD, Enter to select):", 2, 0, "", "", " ", shouldDebug);
|
||||||
@@ -112,16 +112,20 @@ 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);
|
||||||
// we must add .md if it doesn't have // (TODO LATER) add a warning to the journalRegex. It must match with fileName and fileName + ".md" in case we append the extension
|
|
||||||
int len = strlen(fileName);
|
|
||||||
if (fileName[len-3] != '.' || fileName[len-2] != 'm' || fileName[len-1] != 'd') { // there might be a cleaner way to do this
|
|
||||||
strncat(fileName, ".md", PATH_MAX);
|
|
||||||
}
|
|
||||||
snprintf(fileFullPath, PATH_MAX, "%s/%s/%s", dirToVault, vaultFromDir, fileName);
|
snprintf(fileFullPath, PATH_MAX, "%s/%s/%s", dirToVault, vaultFromDir, fileName);
|
||||||
|
int len = strlen(fileFullPath);
|
||||||
|
if (fileFullPath[len-3] != '.' || fileFullPath[len-2] != 'm' || fileFullPath[len-1] != 'd') { // there might be a cleaner way to do this
|
||||||
|
error(len > PATH_MAX - 3, "user", "%s is too big (greater than PATH_MAX-3) and we can't append .md", fileFullPath);
|
||||||
|
strncat(fileFullPath, ".md", PATH_MAX);
|
||||||
|
// 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);
|
||||||
|
}
|
||||||
FILE *filePointer;
|
FILE *filePointer;
|
||||||
filePointer = fopen(fileFullPath, "w"); // creates and opens the file (TODO LATER) Maybe check if the file really doesn't exist
|
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);
|
||||||
fprintf(filePointer, "### %s\n", fileName); //(TODO LATER) Add a way to configure default behaviour when creating a file
|
fprintf(filePointer, "### %s\n", fileName);
|
||||||
fclose(filePointer); // closes the file so that nvim could open it
|
fclose(filePointer); // closes the file so that nvim could open it
|
||||||
free(fileFullPath);
|
free(fileFullPath);
|
||||||
}
|
}
|
||||||
@@ -136,9 +140,9 @@ char *createNewNote(char dirToVault[PATH_MAX], char *vaultFromDir, int bypass, c
|
|||||||
char *fileFullPath = malloc(PATH_MAX); // this dinamically allocated because we use it in the main function to call openEditor
|
char *fileFullPath = malloc(PATH_MAX); // this dinamically allocated because we use it in the main function to call openEditor
|
||||||
sprintf(fileFullPath, "%s/%s/%s", dirToVault, vaultFromDir, fileName);
|
sprintf(fileFullPath, "%s/%s/%s", dirToVault, vaultFromDir, fileName);
|
||||||
FILE *filePointer;
|
FILE *filePointer;
|
||||||
filePointer = fopen(fileFullPath, "w"); // creates and opens the file (TODO LATER) Maybe check if the file really doesn't exist
|
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);
|
||||||
fprintf(filePointer, "### %s\n", fileName); //(TODO LATER) Add a way to configure default behaviour when creating a file
|
fprintf(filePointer, "### %s\n", fileName);
|
||||||
fclose(filePointer); // closes the file so that nvim could open it
|
fclose(filePointer); // closes the file so that nvim could open it
|
||||||
free(fileFullPath);
|
free(fileFullPath);
|
||||||
}
|
}
|
||||||
@@ -261,7 +265,7 @@ char* ncursesSelect(char **options, char *optionsText, int optionsNumber, int ex
|
|||||||
keypad(stdscr, TRUE); // enable arrow keys
|
keypad(stdscr, TRUE); // enable arrow keys
|
||||||
start_color();
|
start_color();
|
||||||
curs_set(0); // sets the cursor to invisible. (We will emulate the cursor with a hightlight that go up and down).
|
curs_set(0); // sets the cursor to invisible. (We will emulate the cursor with a hightlight that go up and down).
|
||||||
use_default_colors(); //(TODO LATER) customize these colors in the config file
|
use_default_colors();
|
||||||
init_pair(1, COLOR_WHITE, -1); // color for optionsNumber (so notes, vaults, etc.)
|
init_pair(1, COLOR_WHITE, -1); // color for optionsNumber (so notes, vaults, etc.)
|
||||||
init_pair(2, COLOR_BLUE, -1); // color for extraOptionsNumber (so settings, delete notes, create vault, etc.)
|
init_pair(2, COLOR_BLUE, -1); // color for extraOptionsNumber (so settings, delete notes, create vault, etc.)
|
||||||
while (1) {
|
while (1) {
|
||||||
|
|||||||
Reference in New Issue
Block a user