pt_image_status
authorTero Marttila <terom@fixme.fi>
Mon, 28 Dec 2009 23:15:18 +0200
changeset 8 400ddf1e7aa9
parent 7 997906f5fd2d
child 9 a31048ff76a2
pt_image_status
src/lib/cache.c
src/lib/cache.h
src/lib/image.c
src/lib/pngtile.h
src/util/main.c
--- a/src/lib/cache.c	Mon Dec 28 22:50:00 2009 +0200
+++ b/src/lib/cache.c	Mon Dec 28 23:15:18 2009 +0200
@@ -55,7 +55,7 @@
     return 0;
 }
 
-int pt_cache_stale (struct pt_cache *cache, const char *img_path)
+int pt_cache_status (struct pt_cache *cache, const char *img_path)
 {
     struct stat st_img, st_cache;
     
@@ -67,13 +67,17 @@
     if (stat(cache->path, &st_cache) < 0) {
         // always stale if it doesn't exist yet
         if (errno == ENOENT)
-            return 1;
+            return PT_CACHE_NONE;
         else
             return -1;
     }
 
     // compare mtime
-    return (st_img.st_mtime > st_cache.st_mtime);
+    if (st_img.st_mtime > st_cache.st_mtime)
+        return PT_CACHE_STALE;
+
+    else
+        return PT_CACHE_FRESH;
 }
 
 /**
--- a/src/lib/cache.h	Mon Dec 28 22:50:00 2009 +0200
+++ b/src/lib/cache.h	Mon Dec 28 23:15:18 2009 +0200
@@ -67,9 +67,11 @@
 int pt_cache_open (struct pt_cache **cache_ptr, const char *path, int mode);
 
 /**
- * Verify if the cached data has become stale compared to the given original file.
+ * Verify if the cached data eixsts, or has become stale compared to the given original file.
+ *
+ * @return one of pt_cache_status; <0 on error, 0 if fresh, >0 otherwise
  */
-int pt_cache_stale (struct pt_cache *cache, const char *img_path);
+int pt_cache_status (struct pt_cache *cache, const char *img_path);
 
 /**
  * Update the cache data from the given PNG image.
--- a/src/lib/image.c	Mon Dec 28 22:50:00 2009 +0200
+++ b/src/lib/image.c	Mon Dec 28 23:15:18 2009 +0200
@@ -203,9 +203,9 @@
     return 0;
 }
 
-int pt_image_stale (struct pt_image *image)
+int pt_image_status (struct pt_image *image)
 {
-    return pt_cache_stale(image->cache, image->path);
+    return pt_cache_status(image->cache, image->path);
 }
 
 int pt_image_update (struct pt_image *image)
--- a/src/lib/pngtile.h	Mon Dec 28 22:50:00 2009 +0200
+++ b/src/lib/pngtile.h	Mon Dec 28 23:15:18 2009 +0200
@@ -27,6 +27,23 @@
     PT_IMG_STALE    = 0x02,
 };
 
+/**
+ * Values for pt_image_cached
+ */
+enum pt_cache_status {
+    /** Cache status could not be determined */
+    PT_CACHE_ERROR      = -1,
+    
+    /** Cache is fresh */
+    PT_CACHE_FRESH      = 0,
+
+    /** Cache does not exist */
+    PT_CACHE_NONE       = 1,
+
+    /** Cache exists, but is stale */
+    PT_CACHE_STALE      = 2,
+};
+
 /** Metadata info for image */
 struct pt_image_info {
     /** Dimensions of image */
@@ -52,9 +69,11 @@
 int pt_image_info (struct pt_image *image, const struct pt_image_info **info_ptr);
 
 /**
- * Check the given image's cache is stale - in other words, the image needs to be updated.
+ * Check the given image's cache is stale - in other words, if the image needs to be update()'d.
+ *
+ * @return one of pt_cache_status
  */
-int pt_image_stale (struct pt_image *image);
+int pt_image_status (struct pt_image *image);
 
 /**
  * Update the given image's cache.
--- a/src/util/main.c	Mon Dec 28 22:50:00 2009 +0200
+++ b/src/util/main.c	Mon Dec 28 23:15:18 2009 +0200
@@ -87,7 +87,7 @@
 
     struct pt_ctx *ctx = NULL;
     struct pt_image *image = NULL;
-    int stale;
+    enum pt_cache_status status;
 
     log_debug("Processing %d images...", argc - optind);
 
@@ -105,17 +105,23 @@
         log_info("Opened image at: %s", img_path);
         
         // check if stale
-        if ((stale = pt_image_stale(image)) < 0) {
-            log_errno("pt_image_stale: %s", img_path);
+        if ((status = pt_image_status(image)) < 0) {
+            log_errno("pt_image_status: %s", img_path);
             goto error;
         }
         
         // update if stale
-        if (stale || force_update) {
-            if (stale)
-                log_debug("Image cache is stale, updating...");
-            else // force_update
-                log_debug("Updating image cache...");
+        if (status != PT_CACHE_FRESH || force_update) {
+            if (status == PT_CACHE_NONE)
+                log_debug("Image cache is missing");
+
+            else if (status == PT_CACHE_STALE)
+                log_debug("Image cache is stale");
+
+            else if (status == PT_CACHE_FRESH)
+                log_debug("Image cache is fresh");
+
+            log_debug("Updating image cache...");
 
             if (pt_image_update(image)) {
                 log_warn_errno("pt_image_update: %s", img_path);