rendered paste body#include "ephoto_database.h"
#include <ecore.h>
#include <stdio.h>
#include <sqlite3.h>
/*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 = <int>argv[0];
}
return;
}
void cb_get_filenames(void *NotUsed, int argc, char **argv, char **azColName){
sublist = NULL;
for(int i=0; i<argc, i++){
ecore_list_append(sublist, argv[i])
}
return;
}
void cb_get_albums(void *NotUsed, int argc, char **argv, char **azColName){
int rc;
char *zErrMsg = 0;
Ecore_List *album_images;
//TODO: Implement Complete list
for(int i=0; i<argc, i++){
list_item = NULL;
list_item.album_name = argv[i];
rc = sqlite3_exec(tmp_db, "Select", cb_get_filenames, 1, &zErrMsg);
if( rc!=SQLITE_OK ){
fprintf(stderr, "SQL error: %s\n", zErrMsg);
}
list_item->album_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;
}