diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/Makefile.am | 8 | ||||
-rw-r--r-- | src/Makefile.in | 57 | ||||
-rw-r--r-- | src/db/sqlite3/db.c | 82 | ||||
-rw-r--r-- | src/db/sqlite3/db.h | 12 | ||||
-rw-r--r-- | src/entry.c | 8 | ||||
-rw-r--r-- | src/entry.h | 5 | ||||
-rw-r--r-- | src/main.c | 2 |
7 files changed, 162 insertions, 12 deletions
diff --git a/src/Makefile.am b/src/Makefile.am index f4e5a8b..ed908a9 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,4 +1,6 @@ +AUTOMAKE_OPTIONS = subdir-objects + bin_PROGRAMS = assignment-list-tui -assignment_list_tui_SOURCES = main.c draw.c draw.h entry.c entry.h group.c group.h -assignment_list_tui_LDADD = @CURSES_LIBS@ -assignment_list_tui_CPPFLAGS = @CURSES_CFLAGS@ +assignment_list_tui_SOURCES = main.c draw.c draw.h entry.c entry.h group.c group.h db/$(default_db)/db.c db/$(default_db)/db.h +assignment_list_tui_LDADD = @CURSES_LIBS@ @SQLITE3_LDFLAGS@ +assignment_list_tui_CPPFLAGS = @CURSES_CFLAGS@ @SQLITE3_CFLAGS@ -Idb/$(default_db) diff --git a/src/Makefile.in b/src/Makefile.in index 0646952..bf3d246 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -99,10 +99,12 @@ CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) +am__dirstamp = $(am__leading_dot)dirstamp am_assignment_list_tui_OBJECTS = assignment_list_tui-main.$(OBJEXT) \ assignment_list_tui-draw.$(OBJEXT) \ assignment_list_tui-entry.$(OBJEXT) \ - assignment_list_tui-group.$(OBJEXT) + assignment_list_tui-group.$(OBJEXT) \ + db/$(default_db)/assignment_list_tui-db.$(OBJEXT) assignment_list_tui_OBJECTS = $(am_assignment_list_tui_OBJECTS) assignment_list_tui_DEPENDENCIES = AM_V_P = $(am__v_P_@AM_V@) @@ -123,7 +125,8 @@ am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/assignment_list_tui-draw.Po \ ./$(DEPDIR)/assignment_list_tui-entry.Po \ ./$(DEPDIR)/assignment_list_tui-group.Po \ - ./$(DEPDIR)/assignment_list_tui-main.Po + ./$(DEPDIR)/assignment_list_tui-main.Po \ + db/$(default_db)/$(DEPDIR)/assignment_list_tui-db.Po am__mv = mv -f AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) @@ -215,6 +218,9 @@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ +SQLITE3_CFLAGS = @SQLITE3_CFLAGS@ +SQLITE3_LDFLAGS = @SQLITE3_LDFLAGS@ +SQLITE3_VERSION = @SQLITE3_VERSION@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ @@ -232,6 +238,7 @@ build_alias = @build_alias@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ +default_db = @default_db@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ @@ -260,9 +267,10 @@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ -assignment_list_tui_SOURCES = main.c draw.c draw.h entry.c entry.h group.c group.h -assignment_list_tui_LDADD = @CURSES_LIBS@ -assignment_list_tui_CPPFLAGS = @CURSES_CFLAGS@ +AUTOMAKE_OPTIONS = subdir-objects +assignment_list_tui_SOURCES = main.c draw.c draw.h entry.c entry.h group.c group.h db/$(default_db)/db.c db/$(default_db)/db.h +assignment_list_tui_LDADD = @CURSES_LIBS@ @SQLITE3_LDFLAGS@ +assignment_list_tui_CPPFLAGS = @CURSES_CFLAGS@ @SQLITE3_CFLAGS@ -Idb/$(default_db) all: all-am .SUFFIXES: @@ -338,6 +346,15 @@ uninstall-binPROGRAMS: clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) +db/$(default_db)/$(am__dirstamp): + @$(MKDIR_P) db/$(default_db) + @: > db/$(default_db)/$(am__dirstamp) +db/$(default_db)/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) db/$(default_db)/$(DEPDIR) + @: > db/$(default_db)/$(DEPDIR)/$(am__dirstamp) +db/$(default_db)/assignment_list_tui-db.$(OBJEXT): \ + db/$(default_db)/$(am__dirstamp) \ + db/$(default_db)/$(DEPDIR)/$(am__dirstamp) assignment-list-tui$(EXEEXT): $(assignment_list_tui_OBJECTS) $(assignment_list_tui_DEPENDENCIES) $(EXTRA_assignment_list_tui_DEPENDENCIES) @rm -f assignment-list-tui$(EXEEXT) @@ -345,6 +362,7 @@ assignment-list-tui$(EXEEXT): $(assignment_list_tui_OBJECTS) $(assignment_list_t mostlyclean-compile: -rm -f *.$(OBJEXT) + -rm -f db/$(default_db)/*.$(OBJEXT) distclean-compile: -rm -f *.tab.c @@ -353,6 +371,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/assignment_list_tui-entry.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/assignment_list_tui-group.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/assignment_list_tui-main.Po@am__quote@ # am--include-marker +@AMDEP_TRUE@@am__include@ @am__quote@db/$(default_db)/$(DEPDIR)/assignment_list_tui-db.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @@ -361,15 +380,17 @@ $(am__depfiles_remade): am--depfiles: $(am__depfiles_remade) .c.o: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: -@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ +@am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` @@ -430,6 +451,20 @@ assignment_list_tui-group.obj: group.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(assignment_list_tui_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o assignment_list_tui-group.obj `if test -f 'group.c'; then $(CYGPATH_W) 'group.c'; else $(CYGPATH_W) '$(srcdir)/group.c'; fi` +db/$(default_db)/assignment_list_tui-db.o: db/$(default_db)/db.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(assignment_list_tui_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT db/$(default_db)/assignment_list_tui-db.o -MD -MP -MF db/$(default_db)/$(DEPDIR)/assignment_list_tui-db.Tpo -c -o db/$(default_db)/assignment_list_tui-db.o `test -f 'db/$(default_db)/db.c' || echo '$(srcdir)/'`db/$(default_db)/db.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) db/$(default_db)/$(DEPDIR)/assignment_list_tui-db.Tpo db/$(default_db)/$(DEPDIR)/assignment_list_tui-db.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='db/$(default_db)/db.c' object='db/$(default_db)/assignment_list_tui-db.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(assignment_list_tui_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o db/$(default_db)/assignment_list_tui-db.o `test -f 'db/$(default_db)/db.c' || echo '$(srcdir)/'`db/$(default_db)/db.c + +db/$(default_db)/assignment_list_tui-db.obj: db/$(default_db)/db.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(assignment_list_tui_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT db/$(default_db)/assignment_list_tui-db.obj -MD -MP -MF db/$(default_db)/$(DEPDIR)/assignment_list_tui-db.Tpo -c -o db/$(default_db)/assignment_list_tui-db.obj `if test -f 'db/$(default_db)/db.c'; then $(CYGPATH_W) 'db/$(default_db)/db.c'; else $(CYGPATH_W) '$(srcdir)/db/$(default_db)/db.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) db/$(default_db)/$(DEPDIR)/assignment_list_tui-db.Tpo db/$(default_db)/$(DEPDIR)/assignment_list_tui-db.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='db/$(default_db)/db.c' object='db/$(default_db)/assignment_list_tui-db.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(assignment_list_tui_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o db/$(default_db)/assignment_list_tui-db.obj `if test -f 'db/$(default_db)/db.c'; then $(CYGPATH_W) 'db/$(default_db)/db.c'; else $(CYGPATH_W) '$(srcdir)/db/$(default_db)/db.c'; fi` + ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am @@ -547,6 +582,8 @@ clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -rm -f db/$(default_db)/$(DEPDIR)/$(am__dirstamp) + -rm -f db/$(default_db)/$(am__dirstamp) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @@ -560,6 +597,7 @@ distclean: distclean-am -rm -f ./$(DEPDIR)/assignment_list_tui-entry.Po -rm -f ./$(DEPDIR)/assignment_list_tui-group.Po -rm -f ./$(DEPDIR)/assignment_list_tui-main.Po + -rm -f db/$(default_db)/$(DEPDIR)/assignment_list_tui-db.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags @@ -609,6 +647,7 @@ maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/assignment_list_tui-entry.Po -rm -f ./$(DEPDIR)/assignment_list_tui-group.Po -rm -f ./$(DEPDIR)/assignment_list_tui-main.Po + -rm -f db/$(default_db)/$(DEPDIR)/assignment_list_tui-db.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic diff --git a/src/db/sqlite3/db.c b/src/db/sqlite3/db.c new file mode 100644 index 0000000..dd46071 --- /dev/null +++ b/src/db/sqlite3/db.c @@ -0,0 +1,82 @@ +#include <asm-generic/errno-base.h> +#include <stdio.h> +#include <sqlite3.h> +#include <sys/stat.h> +#include <unistd.h> + +#include "config.h" +#include "db.h" + +/* return values: + 0 -> success + 1 -> failure +*/ +int create_tables(const char *path); + +int db_init() { + int res; + char db_path[BUF_LEN]; + + // create USER_DATA_DIR if not exists + res = mkdir(USER_DATA_DIR, S_IRWXU); + //if(res != 0 && res != EEXIST) return 1; // TODO write a better check incase mkdir fails + + // return if db already exists + res = access(USER_DATA_PATH, F_OK); + if(res == 0) return 0; + + // create database with tables + res = create_tables(USER_DATA_PATH); + if(res != 0) return 2; + + return 0; +} + +int create_tables(const char *path) { + sqlite3 *db; + char queries[2][BUF_LEN]; + int num_queries = 2; + char *zErrMsg = NULL; // hold error from sqlite3_exec + int res; + int i; + + sprintf(queries[0], + "CREATE TABLE IF NOT EXISTS 'Group' (" + "'ID' int NOT NULL PRIMARY KEY, " + "'Name' varchar(%d) NOT NULL, " + "'Desc' varchar(%d) DEFAULT NULL, " + "'Url' varchar(%d) DEFAULT NULL);", + BUF_LEN, BUF_LEN, BUF_LEN); + + sprintf(queries[1], + "CREATE TABLE IF NOT EXISTS 'Entry' (" + "'ID' int NOT NULL PRIMARY KEY, " + "'Group_ID' int NOT NULL, " // FIXME might want foreign key constraint + // TODO add due_date here once it's figure out + "'Alt_due_date' varchar(%d) DEFAULT NULL, " + "'Title' varchar(%d) NOT NULL, " + "'Color' varchar(%d) DEFAULT NULL, " + "'Highlight' varchar(%d) DEFAULT NULL, " + "'Done' boolean DEFAULT NULL, " + "'Url' varchar(%d) DEFAULT NULL);", + BUF_LEN, BUF_LEN, BUF_LEN, BUF_LEN, BUF_LEN); + + // open the database and run each query + res = sqlite3_open(path, &db); + if(res) { + fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); + sqlite3_close(db); + return 1; + } + for(i = 0; i < num_queries; ++i) { + res = sqlite3_exec(db, queries[i], NULL, NULL, &zErrMsg); + if(res != SQLITE_OK) { + fprintf(stderr, "SQL error: %s\n", zErrMsg); + sqlite3_free(zErrMsg); + } + } + + // wrap-up + sqlite3_close(db); + return 0; +} diff --git a/src/db/sqlite3/db.h b/src/db/sqlite3/db.h new file mode 100644 index 0000000..c6279f9 --- /dev/null +++ b/src/db/sqlite3/db.h @@ -0,0 +1,12 @@ +#ifndef DB_H +#define DB_H + +/* initialize data.db file + * return values: + * 0 -> success + * 1 -> failure: could not create directory + * 2 -> failure: could not create file + */ +int db_init(); + +#endif diff --git a/src/entry.c b/src/entry.c index 086db8c..2d5f7d0 100644 --- a/src/entry.c +++ b/src/entry.c @@ -19,6 +19,10 @@ char *entry_get_highlight(Entry *e) { return e->highlight; } +bool entry_get_done(Entry *e) { + return e->done; +} + char *entry_get_url(Entry *e) { return e->url; } @@ -41,6 +45,10 @@ void entry_set_highlight(Entry *e, char *highlight) { strcpy(e->highlight, highlight); } +void entry_set_done(Entry *e, bool done) { + e->done = done; +} + void entry_set_url(Entry *e, char *url) { strcpy(e->url, url); } diff --git a/src/entry.h b/src/entry.h index 2a9f38b..a2f637e 100644 --- a/src/entry.h +++ b/src/entry.h @@ -1,6 +1,8 @@ #ifndef ENTRY_H #define ENTRY_H +#include <stdbool.h> + #include "../config.h" // a group/category for entries to be put in @@ -10,6 +12,7 @@ typedef struct { char title[BUF_LEN]; char color[BUF_LEN]; // TODO consider making an enum char highlight[BUF_LEN]; // TODO consider making an enum + bool done; char url[BUF_LEN]; } Entry; @@ -18,6 +21,7 @@ char *entry_get_alt_due_date(Entry *e); char *entry_get_title(Entry *e); char *entry_get_color(Entry *e); char *entry_get_highlight(Entry *e); +bool entry_get_done(Entry *e); char *entry_get_url(Entry *e); // setters @@ -25,6 +29,7 @@ void entry_set_alt_due_date(Entry *e, char *alt_due_date); void entry_set_title(Entry *e, char *title); void entry_set_color(Entry *e, char *color); void entry_set_highlight(Entry *e, char *highlight); +void entry_set_done(Entry *e, bool done); void entry_set_url(Entry *e, char *url); #endif @@ -1,6 +1,8 @@ +#include "db.h" #include "draw.h" int main() { + db_init(); tui_init(); return 0; |