From 4e9cdd282beb1c6dcbcca148745f5665b561c403 Mon Sep 17 00:00:00 2001 From: Jon Bergli Heier Date: Tue, 22 Dec 2009 19:26:54 +0100 Subject: Initial commit. --- wallpapers.c | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 wallpapers.c (limited to 'wallpapers.c') diff --git a/wallpapers.c b/wallpapers.c new file mode 100644 index 0000000..525a6c4 --- /dev/null +++ b/wallpapers.c @@ -0,0 +1,82 @@ +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "db.h" + +void listdir(const char *path, sqlite_uint64 parent) { + int pathlen = strlen(path); + //DIR *dir = opendir(path); + //struct dirent *de; + GDir *dir; + const char *filename; + sqlite_uint64 dir_temp; + sqlite_uint64 dirid; + + dirid = db_get_directory(path); + if(dirid == 0) { + dirid = db_add_directory(path, parent); + if(dirid == 0) + return; + } + + dir = g_dir_open(path, 0, NULL); + if(!dir) + return; + + while((filename = g_dir_read_name(dir)) != NULL) { + char *filepath = g_strdup_printf("%s/%s", path, filename); + if(g_access(filepath, R_OK) == -1) { + fprintf(stderr, "Can't read %s: \n", filepath, strerror(errno)); + g_free(filepath); + continue; + } + struct stat st; + if(g_stat(filepath, &st) == -1) { + fprintf(stderr, "Failed to stat file %s\n", filepath); + g_free(filepath); + continue; + } + switch(st.st_mode & S_IFMT) { + case S_IFDIR: + if(strcmp(filepath, ".") == 0 || strcmp(filepath, "..") == 0) { + g_free(filepath); + continue; + } + printf("Directory: %s\n", filepath); + listdir(filepath, dirid); + continue; + case S_IFLNK: + case S_IFREG: + break; + default: + printf("Skipping %s\n", filepath); + g_free(filepath); + continue; + } + Imlib_Image image; + image = imlib_load_image(filepath); + if(image) { + imlib_context_set_image(image); + printf("%s loaded: %dx%d\n", filepath, imlib_image_get_width(), imlib_image_get_height()); + if(db_add_wallpaper(filepath, dirid, st.st_size, imlib_image_get_width(), imlib_image_get_height())) + printf("added\n"); + else + printf("failed to add\n"); + imlib_free_image(); + } else { + fprintf(stderr, "%s failed\n", filepath); + } + g_free(filepath); + } + g_dir_close(dir); +} -- cgit v1.2.3