All pastes #165622 Raw Edit

mos

public text v1 · immutable
·published 2006-09-10 00:51 UTC
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;
}