aboutsummaryrefslogblamecommitdiffstats
path: root/cmd/cmd_todo.c
blob: c1d9e4aa48ad9063ac4b2dfc7b6ac5c53e1b88ae (plain) (tree)
1
2
3
4
5
6
7
8
9

                     


                                                                                                                                                                                                                                                                                                       
                            

                                         
 


                                                        

                            

                         

                                                             

                                                
                                                                                        























                                                                             
                                                                                                      
                                

                 

























                                                                                
                                                                    

                                    














                                                       

                 
                                                             


                                                                                 












                                                                                               


                                            















                                                                              
                                                           






                              





                                                    

                 
                                                             
                                                                                             
                 





                                                                           





              


                          

                        











                                                     
 

















                                                                                
                                             






                                  
                                            




                                      



                                                                                
                                                                                             
                                                    



                                                       
 
                                                          



                                                                  
               







                                                                                                  
               





                                          




















































                                                                                                             
                                               
   





                                                             
   
 

                        






                                                                                
                                                


                                    



                                      
                                      




                 
                   
                           


             
#include "cmd_todo.h"

//https://github.com/littlstar/b64.c
//https://www.google.nl/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&cad=rja&uact=8&ved=0ahUKEwiMu9_F5ZrXAhVLOMAKHZ6NDQYQFghDMAM&url=https%3A%2F%2Fopensource.apple.com%2Fsource%2FQuickTimeStreamingServer%2FQuickTimeStreamingServer-452%2FCommonUtilitiesLib%2Fbase64.c&usg=AOvVaw3tk0M33ne4ru28Bn_R1KI3

#define TODO_MAX_PER_USER 64
#define TODO_MAX_DB_FILE_SIZE (1024*1024)
#define TODO_DB_NAME "todo.db"

static int add_todo(sqlite3 *db, char *user, char *todo)
{
  int rc;
  char sql_add_table[3*256];
  char *b64_user, *b64_todo;
  sqlite3_stmt *res=NULL;

  b64_user = b64_encode((unsigned char *)user, strlen(user));
  b64_todo = b64_encode((unsigned char *)todo, strlen(todo));

  //check how many todo stuff is for single user
  snprintf(sql_add_table, 1024, "SELECT COUNT(*) FROM todo WHERE user='%s';", b64_user);
  printf("%s\n", sql_add_table);
  if ((rc = sqlite3_prepare_v2(db, sql_add_table, -1, &res, 0)) != SQLITE_OK)
  {
    printf("Cannot prepare statment: %s\n", sqlite3_errmsg(db));
    free(b64_user);
    free(b64_todo);
    return -1;
  }

  rc = sqlite3_step(res);
  if (rc == SQLITE_ROW)
  {
    int iret = sqlite3_column_int(res, 0);
    PRINT("%d\n",iret);
    if (iret >= TODO_MAX_PER_USER)
    {
      free(b64_user);
      free(b64_todo);
      return -1;
    }
  }
  sqlite3_finalize(res);

  //insert new value
  snprintf(sql_add_table, 1024, "INSERT INTO todo(user,todo) VALUES('%s','%s');", b64_user, b64_todo);
  printf("%s\n", sql_add_table);
  free(b64_user);
  free(b64_todo);
  
  if ((rc = sqlite3_exec(db, sql_add_table, 0, 0, 0)) != SQLITE_OK)
  {
    printf("Cannot prepare statment: %s\n", sqlite3_errmsg(db));
    return -1;
  }

  return 0;
}

static int cb_list_todo_table(void *param1, int argc, char **argv, char **cname)
{
  int i;

  sds *out = (sds *)param1;
  //sds local_out = sdsempty();

  for (i=0; i<argc; i++)
  {
    printf("%s = %s, ", cname[i], argv[i] ? argv[i] : "NULL");
    if (strncmp(cname[i],"id",2) == 0)
    {
      *out = sdscat(*out, argv[i]);
      *out = sdscat(*out, " - ");
    } else if (strncmp(cname[i],"todo",4) == 0)
    {
      char *b64_todo = (char *)b64_decode(argv[i], strlen(argv[i]));
      *out = sdscat(*out, b64_todo);
      free(b64_todo);
      *out = sdscat(*out, "\n");
    }
  }

  printf("\n");

  return 0;
}

static int list_todo(sqlite3 *db, char *user, sds *out)
{
  int rc;
  char *err_msg = NULL;

  char sql_list_table[1024];
  char *b64_user;

  b64_user = b64_encode((unsigned char *)user, strlen(user));
  snprintf(sql_list_table, 1024, "SELECT * FROM todo WHERE user='%s'", b64_user);
  printf("%s\n",sql_list_table);
  free(b64_user);

  if ((rc = sqlite3_exec(db, sql_list_table, cb_list_todo_table, out, &err_msg )) != SQLITE_OK)
  {
    printf("Cant list todo: %s\n", err_msg);

    sqlite3_free(err_msg);

    return -1;
  }

  return 0;
}

static int list_total(sqlite3 *db, sds *out)
{
  int rc;
  sqlite3_stmt *res=NULL;

  char sql_list_total[1024];

  snprintf(sql_list_total, 1024, "SELECT COUNT(*) FROM todo;");
  printf("%s\n",sql_list_total);

  if ((rc = sqlite3_prepare_v2(db, sql_list_total, -1, &res, 0)) != SQLITE_OK)
  {
    printf("Cannot prepare statment: %s\n", sqlite3_errmsg(db));
    return -1;
  }

  rc = sqlite3_step(res);
  if (rc == SQLITE_ROW)
  {
    const char *cret = (char *)sqlite3_column_text(res, 0);
    *out