#include "ephoto_database.h" #include #include #include /*Globals*/ Ecore_List *EPHOTO_ALBUMS; int AID; sqlite3 *tmp_db; struct list_item; Ecore_list *sublist; /* TABLE syntax for sqlite db TABLE tbl_albums{ char albumname int FLID (auto assigned) } TABLE tbl_filenames{ char filename int AID (relationary variable to tbl_albums->FLID) int FLID (auto assigned, not used) } */ /* Callback Functions */ void cb_none(void *NotUsed, int argc, char **argv, char **azColName){ return; } void cb_add_file(void *NotUsed, int argc, char **argv, char **azColName){ //no action needed return; } void cb_add_album(void *NotUsed, int argc, char **argv, char **azColName){ // no action needed return; } void cb_remove_file(void *NotUsed, int argc, char **argv, char **azColName){ //no action needed return; } void cb_remove_album(void *NotUsed, int argc, char **argv, char **azColName){ //no action needed return; } void cb_get_aid(void *NotUsed, int argc, char **argv, char **azColName){ if(argv[0] != NULL){ AID = argv[0]; } return; } void cb_get_filenames(void *NotUsed, int argc, char **argv, char **azColName){ sublist = NULL; for(int i=0; ialbum_images = sublist; ecore_list_append(EPHOTO_ALBUMS, list_item); list_item = NULL; } return; } /* Initializer/Destructor */ sqlite3 * ephoto_db_init(void){ //constructor sqlite3 *db; char *zErrMsg = 0; int rc; //open database rc = sqlite3_open(getenv("HOME") + "/.ephoto/album.db", &db); if(rc){ fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); sqlite3_close(db); exit(1); } return db; } void ehpoto_db_destroy(sqlite3 *db){ //destructor sqlite3_close(db); return; } /* Externally accessable functions */ int ephoto_db_add_album(sqlite3 *db, char albumname[]){ int rc; char *zErrMsg = 0; rc = sqlite3_exec(db, "INSERT INTO tbl_album VALUES (Name) VALUES (\""+ albumanme +"\")", cb_add_album, 0, &zErrMsg); if( rc!=SQLITE_OK ){ fprintf(stderr, "SQL error: %s\n", zErrMsg); return 1; } return 0; } int ephoto_db_add_file(sqlite3 *db, char albumname[], char filename[]){ int rc; char *zErrMsg = 0; rc = sqlite3_exec(db, "SELECT FLID FROM tbl_albums WHERE NAME =\""+ albumanme +"\"", cb_get_aid, 1, &zErrMsg); if( rc!=SQLITE_OK ){ fprintf(stderr, "SQL error: %s\n", zErrMsg); return 1; } rc = NULL; zErrMsg = 0; rc = sqlite3_exec(db, "INSERT INTO tbl_flielist (AID, Filename) Values ("+AID+", \""+ filename +"\")", cb_add_filename, 0, &zErrMsg); if( rc!=SQLITE_OK ){ fprintf(stderr, "SQL error: %s\n", zErrMsg); return 1; } return 0; } int ephoto_remove_album(sqlite3 *db, char albumanme[]){ int rc; int *zErrMsg = 0; rc = sqlite3_exec(db, "SELECT FLID FROM tbl_albums WHERE NAME =\""+ albumanme +"\"", cb_get_aid, 1, &zErrMsg); if( rc!=SQLITE_OK ){ fprintf(stderr, "SQL error: %s\n", zErrMsg); return 1; } rc = NULL; zErrMsg = 0; rc = sqlite3_exec(db, "DELETE FROM tbl_filelist WHERE AID="+AID, cb_remove_file, 0, &zErrMsg); if( rc!=SQLITE_OK ){ fprintf(stderr, "SQL error: %s\n", zErrMsg); return 1; } rc = NULL; zErrMsg = 0; rc = sqlite3_exec(db, "DELETE FROM tbl_albums WHERE FLID="+AID, cb_remove_album, 0, &zErrMsg); if( rc!=SQLITE_OK ){ fprintf(stderr, "SQL error: %s\n", zErrMsg); return 1; } return 0; } int ephoto_remove_file(sqlite3 *db, char albumanme[], char filename[]){ int rc; char *zErrMsg = 0; if(albumane = "ALL"){ rc = sqlite3_exec(db, "DELETE FROM tbl_filelist WHERE Filename=\""+filename+"\"", cb_remove_file, 0, &zErrMsg); if( rc!=SQLITE_OK ){ fprintf(stderr, "SQL error: %s\n", zErrMsg); return 1; } }else{ rc = sqlite3_exec(db, "DELETE FROM tbl_filelist INNER JOIN tbl_albums on tbl_filelist.AID = tbl_albums.FLID WHERE tbl_filelist.Filename = \"" + filename "\"AND tbl_albums.Name = \"" + albumname "\"", cb_remove_file, 0, &zErrMsg); if( rc!=SQLITE_OK ){ fprintf(stderr, "SQL error: %s\n", zErrMsg); return 1; } return 0; } } Ecore_list ephoto_db_read(sqlite3 *db){ int rc; char *zErrMsg = 0; &db = *tmp_db rc = sqlite3_exec(db, "SELECT NAME FROM tbl_albums", cb_get_albums, 1, &zErrMsg); if( rc!=SQLITE_OK ){ fprintf(stderr, "SQL error: %s\n", zErrMsg); exit(1); } return EPHOTO_ALBUMS; }