Roxen.git / server / modules / graphics / cimg.pike

version» Context lines:

Roxen.git/server/modules/graphics/cimg.pike:1:   // This is a roxen module. Copyright © 1999 - 2009, Roxen IS.   //      #include <module.h>   inherit "module";   constant thread_safe=1;      roxen.ImageCache the_cache;    - constant cvs_version = "$Id: cimg.pike,v 1.82 2009/07/08 09:31:52 anders Exp $"; + constant cvs_version = "$Id: cimg.pike,v 1.83 2009/11/24 15:17:33 grubba Exp $";   constant module_type = MODULE_TAG;   constant module_name = "Graphics: Image converter";   constant module_doc = "Provides the tag <tt>&lt;cimg&gt;</tt> that can be used "   "to convert images between different image formats.";         mapping tagdocumentation()   {    Stdio.File file=Stdio.File();    if(!file->open(__FILE__,"r")) return 0;
Roxen.git/server/modules/graphics/cimg.pike:372:   {    inherit RXML.Tag;    constant name = "emit";    constant plugin_name = "cimg";       array get_dataset( mapping args, RequestID id )    {    mapping res = ([ ]);    mapping a = get_my_args( check_args( args ), id );    string data; +  +  int timeout = UNDEFINED; +  if (args["unix-time"]) { +  timeout = (int)args["unix-time"] - time(1); +  } +  timeout = Roxen.time_dequantifier(args, timeout); +  if (!zero_type(timeout)) { +  // Clean up the args mapping. +  foreach(({ "unix-time", "seconds", "minutes", "beats", "hours", +  "days", "weeks", "months", "years" }), string arg) { +  m_delete(args, arg); +  } +  // Make sure the timeout is positive (and reasonable). +  if (timeout < 60) timeout = 60; +  } +     mixed err = catch // This code will fail if the image does not exist.    {    // Store misc->cacheable since the image cache can raise it and    // disable protocol cache.    int cacheable = id->misc->cacheable;    int no_proto_cache = id->misc->no_proto_cache;   #ifdef DEBUG_CACHEABLE    report_debug("%s:%d saved cacheable flags\n", __FILE__, __LINE__);   #endif -  res->src=(query_absolute_internal_location(id)+the_cache->store( a,id )); +  res->src=(query_absolute_internal_location(id)+ +  the_cache->store( a, id, timeout ));    if(args->filename && sizeof(args->filename))    res->src += "/" + Roxen.http_encode_url(args->filename);    if(do_ext)    res->src += "." + a->format;    data = the_cache->data( a, id , 0 );    res["file-size"] = strlen(data);    res["file-size-kb"] = strlen(data)/1024;    if (lower_case(args->nodata || "no") == "no")    res["data"] = data;    res |= the_cache->metadata( a, id, 0 ); // enforce generation
Roxen.git/server/modules/graphics/cimg.pike:420:    inherit RXML.Tag;    constant name = "cimg";    constant flags = RXML.FLAG_EMPTY_ELEMENT;       class Frame    {    inherit RXML.Frame;       array do_return(RequestID id)    { +  int timeout = UNDEFINED; +  if (args["unix-time"]) { +  timeout = (int)args["unix-time"] - time(1); +  } +  timeout = Roxen.time_dequantifier(args, timeout); +  if (!zero_type(timeout)) { +  // Clean up the args mapping. +  foreach(({ "unix-time", "seconds", "minutes", "beats", "hours", +  "days", "weeks", "months", "years" }), string arg) { +  m_delete(args, arg); +  } +  // Make sure the timeout is positive (and reasonable). +  if (timeout < 60) timeout = 60; +  }    mapping a = get_my_args( check_args( args ), id );    args -= a;    string ext = "";    string filename = "";    if(args->filename && sizeof(args->filename))    filename += "/" + Roxen.http_encode_url(m_delete(args, "filename"));    if(do_ext)    ext = "." + a->format;    args->src = query_absolute_internal_location( id ) -  + the_cache->store( a, id ) + filename + ext; +  + the_cache->store( a, id, timeout ) + filename + ext;    int no_draw = !id->misc->generate_images;    mapping size;    if( !args->width && !args->height    && (size = the_cache->metadata( a, id, no_draw )) )    {    // image in cache (no_draw above prevents generation on-the-fly)    args->width = size->xsize;    args->height = size->ysize;    }    int xml=!args->noxml;
Roxen.git/server/modules/graphics/cimg.pike:458:    inherit RXML.Tag;    constant name = "cimg-url";    constant flags = RXML.FLAG_EMPTY_ELEMENT;       class Frame    {    inherit RXML.Frame;       array do_return(RequestID id)    { +  int timeout = UNDEFINED; +  if (args["unix-time"]) { +  timeout = (int)args["unix-time"] - time(1); +  } +  timeout = Roxen.time_dequantifier(args, timeout); +  if (!zero_type(timeout)) { +  // Clean up the args mapping. +  foreach(({ "unix-time", "seconds", "minutes", "beats", "hours", +  "days", "weeks", "months", "years" }), string arg) { +  m_delete(args, arg); +  } +  // Make sure the timeout is positive (and reasonable). +  if (timeout < 60) timeout = 60; +  }    string filename = "";    mapping a = get_my_args (check_args (args), id);       if(args->filename && sizeof(args->filename))    filename = "/" + Roxen.http_encode_url(args->filename);    result = query_absolute_internal_location(id) -  + the_cache->store(a, id) +  + the_cache->store(a, id, timeout)    + filename    + (do_ext ? "." + a->format : "");    return 0;    }    }   }