From e00aa2fb4254139e3940ffdd6eb4ccf7849e2e56 Mon Sep 17 00:00:00 2001 From: Scott Fritzinger Date: Mon, 19 Jun 2000 17:01:15 +0000 Subject: [PATCH] added beginining of gphoto2 utility library for frontends git-svn-id: https://svn.code.sf.net/p/gphoto/code/trunk/libgphoto2@552 67ed7778-7388-44ab-90cf-0a291f65f57c --- frontends/Makefile.am | 2 +- frontends/command-line/Makefile.am | 3 +- frontends/libgphoto2-util/Makefile.am | 10 ++ frontends/libgphoto2-util/cache.c | 184 ++++++++++++++++++++++++++ frontends/libgphoto2-util/cache.h | 5 + frontends/libgphoto2-util/image.c | 22 +++ frontends/libgphoto2-util/image.h | 6 + 7 files changed, 230 insertions(+), 2 deletions(-) create mode 100644 frontends/libgphoto2-util/Makefile.am create mode 100644 frontends/libgphoto2-util/cache.c create mode 100644 frontends/libgphoto2-util/cache.h create mode 100644 frontends/libgphoto2-util/image.c create mode 100644 frontends/libgphoto2-util/image.h diff --git a/frontends/Makefile.am b/frontends/Makefile.am index 7abaa7cfb..44183cb93 100644 --- a/frontends/Makefile.am +++ b/frontends/Makefile.am @@ -1,3 +1,3 @@ ## Process this file with automake to generate a GNU Makefile -SUBDIRS = command-line +SUBDIRS = command-line libgphoto2-util diff --git a/frontends/command-line/Makefile.am b/frontends/command-line/Makefile.am index dd884b2aa..9a6718c4d 100644 --- a/frontends/command-line/Makefile.am +++ b/frontends/command-line/Makefile.am @@ -7,4 +7,5 @@ CFLAGS = @CFLAGS@ -I$(top_srcdir)/include gphoto2_SOURCES = main.c main.h \ interface.c interface.h -gphoto2_LDADD = ../../libgphoto2/libgphoto2.la +gphoto2_LDADD = ../../libgphoto2/libgphoto2.la \ + ../libgphoto2-util/libgphoto2-util.la diff --git a/frontends/libgphoto2-util/Makefile.am b/frontends/libgphoto2-util/Makefile.am new file mode 100644 index 000000000..4439ceb2c --- /dev/null +++ b/frontends/libgphoto2-util/Makefile.am @@ -0,0 +1,10 @@ +lib_LTLIBRARIES = libgphoto2-util.la + +CFLAGS= @CFLAGS@ \ + -Wall \ + -I$(top_srcdir)/include \ + -DCAMLIBS=\"$(pkglibdir)\" + +libgphoto2-util_la_LDFLAGS = -version-info 0:0:0 +libgphoto2-util_la_SOURCES = \ + cache.c cache.h diff --git a/frontends/libgphoto2-util/cache.c b/frontends/libgphoto2-util/cache.c new file mode 100644 index 000000000..1a117aade --- /dev/null +++ b/frontends/libgphoto2-util/cache.c @@ -0,0 +1,184 @@ +#include +#include +#include +#include +#include +#include +#include + +#include "cache.h" + +int cache_put (int camera_number, int folder_number, int file_number, CameraFile *file) { + + FILE *fp; + char buf[1024]; + + sprintf(buf, "%s/.gphoto/cache/%i-%i-%i.%i", getenv("HOME"), + camera_number, folder_number, file_number, file->type); +#ifdef DEBUG + printf("cache: putting \"%s\"... ", buf); + fflush(stdout); +#endif + fp = fopen(buf, "w"); + fwrite(file->data, (size_t)sizeof(char), (size_t)file->size, fp); + fclose(fp); + +#ifdef DEBUG + printf("done!\n"); +#endif + return (GP_OK); +} + +int cache_get (int camera_number, int folder_number, int file_number, CameraFile *file) { + + FILE *fp; + DIR *d; + struct dirent *de; + long int s; + int camn, foldn, filen, filet; + char buf[1024], cachedir[1024]; + + sprintf(cachedir, "%s/.gphoto/cache", getenv("HOME")); + d = opendir(cachedir); +#ifdef DEBUG + printf("cache: getting (%i, %i, %i)... ", + camera_number, folder_number, file_number); + fflush(stdout); +#endif + + do { + camn = -1; + foldn = -1; + filen = -1; + /* Read each entry */ + de = readdir(d); + if (de) { + sscanf(de->d_name, "%i-%i-%i.%i", + &camn, &foldn, &filen, &filet); + if ((camn == camera_number) && + (foldn == folder_number) && + (filen == file_number)) { + sprintf(buf, "%s/%s", cachedir, de->d_name); +#ifdef DEBUG + printf("found! (%s)\n", de->d_name); +#endif + fp = fopen(buf, "w"); + fseek(fp, 0, SEEK_END); + s = ftell(fp); + rewind(fp); + file->data = (char*)malloc(sizeof(char)*s); + fread(file->data, (size_t)sizeof(char), + (size_t)file->size, fp); + fclose(fp); + file->size = s; + file->type = filet; + return (GP_OK); + } + } + } while (de); +#ifdef DEBUG + printf("error! didn't exist!\n"); +#endif + return (GP_ERROR); +} + +int cache_delete (int camera_number, int folder_number, int file_number) { + + /* if file_number == -1, all the files in the folder get deleted */ + /* if folder_number == -1, all the folders for camera get deleted */ + /* if camera_number == -1, ALL the camera's files get delete */ + + DIR *d; + struct dirent *de; + int camn, foldn, filen, filet; + char buf[1024], cachedir[1024]; + +#ifdef DEBUG + printf("cache: Deleting (%i, %i, %i)...\n", + camera_number, folder_number, file_number); + fflush(stdout); +#endif + sprintf(cachedir, "%s/.gphoto/cache", getenv("HOME")); + d = opendir(cachedir); + do { + camn = -2; + foldn = -2; + filen = -2; + /* Read each entry */ + de = readdir(d); + if (de) { + sscanf(de->d_name, "%i-%i-%i.%i", + &camn, &foldn, &filen, &filet); + if ((camn>=0)&&(foldn>=0)&&(filen>=0)) { + sprintf(buf, "%s/%s", cachedir, de->d_name); + if (((camn == camera_number) && + (foldn == folder_number) && + (filen == file_number)) + || + ((camn == camera_number) && + (foldn == folder_number) && + (file_number == -1)) + || + ((camn == camera_number) && + (folder_number == -1)) + || + (camera_number == -1)) { +#ifdef DEBUG + printf("cache: Removing %s\n", buf); +#endif + unlink(buf); + } else { +#ifdef DEBUG + printf("cache: Leaving %s\n", buf); +#endif + } + + } + + } + } while (de); + + return (GP_OK); +} + +int cache_exists (int camera_number, int folder_number, int file_number) { + + DIR *d; + struct dirent *de; + int camn, foldn, filen, filet; + char cachedir[1024]; + +#ifdef DEBUG + printf("cache: looking for (%i, %i, %i)... ", + camera_number, folder_number, file_number); + fflush(stdout); +#endif + + sprintf(cachedir, "%s/.gphoto/cache", getenv("HOME")); + d = opendir(cachedir); + do { + camn = -1; + foldn = -1; + filen = -1; + /* Read each entry */ + de = readdir(d); + if (de) { + sscanf(de->d_name, "%i-%i-%i.%i", + &camn, &foldn, &filen, &filet); + if ((camn == camera_number) && + (foldn == folder_number) && + (filen == file_number)) { +#ifdef DEBUG + printf("found! (%s)\n", de->d_name); +#endif + return (GP_OK); + } + } + } while (de); + +#ifdef DEBUG + printf("missing!\n"); +#endif + + return (GP_ERROR); +} diff --git a/frontends/libgphoto2-util/cache.h b/frontends/libgphoto2-util/cache.h new file mode 100644 index 000000000..7426cd5b8 --- /dev/null +++ b/frontends/libgphoto2-util/cache.h @@ -0,0 +1,5 @@ +int cache_put (int camera_number, int folder_number, int file_number, CameraFile *file); +int cache_get (int camera_number, int folder_number, int file_number, CameraFile *file); +int cache_exists (int camera_number, int folder_number, int file_number); +int cache_delete (int camera_number, int folder_number, int file_number); + diff --git a/frontends/libgphoto2-util/image.c b/frontends/libgphoto2-util/image.c new file mode 100644 index 000000000..cfa75a348 --- /dev/null +++ b/frontends/libgphoto2-util/image.c @@ -0,0 +1,22 @@ +int gp_file_image_rotate (CameraFile *old_file, CameraFile *new_file, + int degrees) { + + return(GP_OK); +} + +int gp_file_image_scale (CameraFile *old_file, CameraFile *new_file, + int width, int height) { + + return(GP_OK); +} + +int gp_file_image_flip_h (CameraFile *old_file, CameraFile *new_file) { + + return(GP_OK); +} + +int gp_file_image_flip_v (CameraFile *old_file, CameraFile *new_file) { + + return(GP_OK); +} + diff --git a/frontends/libgphoto2-util/image.h b/frontends/libgphoto2-util/image.h new file mode 100644 index 000000000..39ca0630c --- /dev/null +++ b/frontends/libgphoto2-util/image.h @@ -0,0 +1,6 @@ +int gp_file_image_rotate (CameraFile *old_file, CameraFile *new_file, + int degrees); +int gp_file_image_scale (CameraFile *old_file, CameraFile *new_file, + int new_width, int new_height); +int gp_file_image_flip_h (CameraFile *old_file, CameraFile *new_file); +int gp_file_image_flip_v (CameraFile *old_file, CameraFile *new_file);