Thread: [Phphtmllib-devel] SF.net SVN: phphtmllib:[3299] trunk/open2300/lib/core
Status: Beta
Brought to you by:
hemna
From: <he...@us...> - 2009-11-25 22:23:30
|
Revision: 3299 http://phphtmllib.svn.sourceforge.net/phphtmllib/?rev=3299&view=rev Author: hemna Date: 2009-11-25 22:23:15 +0000 (Wed, 25 Nov 2009) Log Message: ----------- added Added Paths: ----------- trunk/open2300/lib/core/daemon/ trunk/open2300/lib/core/daemon/AviProcessorDaemon.inc Added: trunk/open2300/lib/core/daemon/AviProcessorDaemon.inc =================================================================== --- trunk/open2300/lib/core/daemon/AviProcessorDaemon.inc (rev 0) +++ trunk/open2300/lib/core/daemon/AviProcessorDaemon.inc 2009-11-25 22:23:15 UTC (rev 3299) @@ -0,0 +1,222 @@ +<?php + +/** + * This class is responsible for processing + * the daily dir of images into an flv + * and shipping it off to the hosting provider + * where wx.hemna.com lives. + * + * + * @author waboring + * + */ +class AviProcessorDaemon extends Daemon { + + /** + * User ID + */ + protected $user_id = 1000; + + /** + * Group ID + */ + protected $group_id = 100; + + /** + * how long to wait in between + * processing. in seconds + */ + protected $wait_period = 5; + + + /** + * the log object. + */ + protected $log; + + protected $imagesdir; + + + /** + * Do any initialization here. + * + */ + protected function init() { + $this->log = new Log(); + $this->log->add_writer(FileLogWriter::factory(realpath($GLOBALS["path_base"])."/logs/daemon.log")); + + $config = Config::singleton(); + $this->imagesdir = $config->get("imagesdir"); + } + + /** + * any cleanup here + */ + protected function cleanup() { + + } + + /** + * This method is used to pause the scheduler so + * we aren't constantly running as fast as we can. + * + */ + protected function wait_state() { + $this->log->debug("::wait_state() sleeping for ".$this->wait_period." seconds"); + sleep($this->wait_period); + } + + + /** + * do the actual work here. + * + */ + protected function do_task() { + //now do a wait state + //so we aren't constantly running. + $this->wait_state(); + + //used for directory + $ymdDate = date("Ymd"); + + $hour = date("G"); + + $dirname = $this->imagesdir."/".$ymdDate; + //make sure the images dir exists. + $this->test_images_dir($dirname); + + + $num_images = $this->count_images($dirname); + if ($num_images == 0) { + //we have nothing to do + $this->log->info("::do_task() found no images to process"); + } else { + $this->log->info("::do_task() found ".$num_images." to process into a movie."); + $rate = $this->calculate_rate($num_images); + + $this->log->info("::do_task() rate is ".$rate." -> movie length = ".$num_images/$rate."s"); + //generate the avi + $cmd = "/home/waboring/bin/imgs2avi.sh -w 640 -h 480 -r ".$rate; + $this->exec_command($dirname, $cmd); + + //now convert the avi movie to a flash file + $aviname = "timelapse_640x480_".$rate."fps.avi"; + $cmd = "/usr/bin/ffmpeg -y -i ".$aviname." -b 1900k -f flv timelapse.flv"; + $this->exec_command($dirname, $cmd); + + //now send it to the hosting provider + $cmd = "/usr/bin/scp timelapse.flv wx.hemna.com:wx.hemna.com/htdocs/video/".$ymdDate; + $this->exec_command($dirname, $cmd); + } + + $this->log->info("Exiting"); + exit; + } + + /** + * This is used to execute an external command + * + */ + protected function exec_command($dirname, $cmd) { + $command = "cd ".$dirname."; ".$cmd." 2>&1 >>".$dirname."/processing.log"; + $this->log->info("::do_task() exec ".$command); + $last_line = system($command, $return); + } + + /** + * calculate the frame rate to use based + * on the # of images we have to process. + * + * @param $numimages + * @return rate + */ + protected function calculate_rate($num_images) { + $rate = 30; + if ($num_images < 10) { + $rate = 1; + } else if ($num_images < 100) { + $rate = 10; + } else if ($num_images < 400) { + $rate = 15; + } else if ($num_images < 800) { + $rate = 20; + } else if ($num_images < 1200) { + $rate = 25; + } + + return $rate; + } + + + + + /** + * Find out how many images are in the dir + * + * @return int + */ + protected function count_images($dirname) { + $count = 0; + + $this->log->debug("::count_images() : check ".$dirname); + if (file_exists($dirname)) { + if ($dir = opendir($dirname)) { + while (($file = readdir($dir)) !== false) { + if (strstr($file, '.jpg')) { + $count++; + } + } + closedir($dir); + } + } + + $this->log->debug("::count_images() : found ".$count); + return $count; + } + + + /** + * make sure the video dir exists. + * + */ + protected function test_images_dir($dirname) { + if (!file_exists($dirname)) { + $this->create_img_dir($dirname); + } + } + + /** + * Create the image directory + * (this is also done from the camera) + * + */ + protected function create_img_dir($dirname) { + $this->log->info("Creating directory (".$dirname.")"); + $ret = mkdir($dirname); + if (!$ret) { + $ex = new DaemonException("couldn't create directory (".$dirname.")"); + $this->log->err("Failed to creat directory", $ex); + throw $ex; + } + } + + + + + /** + * Create the process id file on disk + * so that we can store it for later use. + * + * @return string + */ + public function generate_pid_filename() { + return realpath($GLOBALS["path_base"]).'/bin/'.__CLASS__.'.pid'; + } + + protected function log_message($message, + $level=0, + $e=NULL) { + } +} + +?> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <he...@us...> - 2010-02-22 04:12:54
|
Revision: 3343 http://phphtmllib.svn.sourceforge.net/phphtmllib/?rev=3343&view=rev Author: hemna Date: 2010-02-22 04:12:47 +0000 (Mon, 22 Feb 2010) Log Message: ----------- added Added Paths: ----------- trunk/open2300/lib/core/widgets/ trunk/open2300/lib/core/widgets/Calendar.inc Added: trunk/open2300/lib/core/widgets/Calendar.inc =================================================================== --- trunk/open2300/lib/core/widgets/Calendar.inc (rev 0) +++ trunk/open2300/lib/core/widgets/Calendar.inc 2010-02-22 04:12:47 UTC (rev 3343) @@ -0,0 +1,59 @@ +<?php +# PHP Calendar (version 2.3), written by Keith Devens +# http://keithdevens.com/software/php_calendar +# see example at http://keithdevens.com/weblog +# License: http://keithdevens.com/software/license + +class Calendar { + + public static function factory($year, $month, $days = array(), + $day_name_length=3, $month_href=NULL, + $first_day = 0, $pn = array()) { + + $first_of_month = gmmktime(0,0,0,$month,1,$year); + #remember that mktime will automatically correct if invalid dates are entered + # for instance, mktime(0,0,0,12,32,1997) will be the date for Jan 1, 1998 + # this provides a built in "rounding" feature to generate_calendar() + + $day_names = array(); #generate all the day names according to the current locale + for($n=0,$t=(3+$first_day)*86400; $n<7; $n++,$t+=86400) #January 4, 1970 was a Sunday + $day_names[$n] = ucfirst(gmstrftime('%A',$t)); #%A means full textual day name + + list($month, $year, $month_name, $weekday) = explode(',',gmstrftime('%m,%Y,%B,%w',$first_of_month)); + $weekday = ($weekday + 7 - $first_day) % 7; #adjust for $first_day + $title = htmlentities(ucfirst($month_name)).' '.$year; #note that some locales don't capitalize month and day names + + #Begin calendar. Uses a real <caption>. See http://diveintomark.org/archives/2002/07/03 + @list($p, $pl) = each($pn); @list($n, $nl) = each($pn); #previous and next links, if applicable + if($p) $p = '<span class="calendar-prev">'.($pl ? '<a class="calendar-prev" href="'.htmlspecialchars($pl).'">'.$p.'</a>' : $p).'</span> '; + if($n) $n = ' <span class="calendar-next">'.($nl ? '<a class="calendar-next" href="'.htmlspecialchars($nl).'">'.$n.'</a>' : $n).'</span>'; + $calendar = '<table class="calendar">'."\n". + '<caption class="calendar-month">'.$p.($month_href ? '<a href="'.htmlspecialchars($month_href).'">'.$title.'</a>' : $title).$n."</caption>\n<tr>"; + + if($day_name_length){ #if the day names should be shown ($day_name_length > 0) + #if day_name_length is >3, the full name of the day will be printed + foreach($day_names as $d) + $calendar .= '<th abbr="'.htmlentities($d).'">'.htmlentities($day_name_length < 4 ? substr($d,0,$day_name_length) : $d).'</th>'; + $calendar .= "</tr>\n<tr>"; + } + + if($weekday > 0) $calendar .= '<td colspan="'.$weekday.'"> </td>'; #initial 'empty' days + for($day=1,$days_in_month=gmdate('t',$first_of_month); $day<=$days_in_month; $day++,$weekday++){ + if($weekday == 7){ + $weekday = 0; #start a new week + $calendar .= "</tr>\n<tr>"; + } + if(isset($days[$day]) and is_array($days[$day])){ + @list($link, $classes, $content) = $days[$day]; + if(is_null($content)) $content = $day; + $calendar .= '<td'.($classes ? ' class="'.htmlspecialchars($classes).'">' : '>'). + ($link ? '<a class="linked-day" href="'.htmlspecialchars($link).'">'.$content.'</a>' : $content).'</td>'; + } + else $calendar .= "<td>$day</td>"; + } + if($weekday != 7) $calendar .= '<td colspan="'.(7-$weekday).'"> </td>'; #remaining "empty" days + + return $calendar."</tr>\n</table>\n"; + } +} +?> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <he...@us...> - 2010-06-15 17:50:53
|
Revision: 3442 http://phphtmllib.svn.sourceforge.net/phphtmllib/?rev=3442&view=rev Author: hemna Date: 2010-06-15 17:50:47 +0000 (Tue, 15 Jun 2010) Log Message: ----------- added AirportCache Added Paths: ----------- trunk/open2300/lib/core/cache/ trunk/open2300/lib/core/cache/AirportCache.inc Added: trunk/open2300/lib/core/cache/AirportCache.inc =================================================================== --- trunk/open2300/lib/core/cache/AirportCache.inc (rev 0) +++ trunk/open2300/lib/core/cache/AirportCache.inc 2010-06-15 17:50:47 UTC (rev 3442) @@ -0,0 +1,75 @@ +<?php + +class AirportCache extends FileCache { + + protected static $cache_dir; + + private static $default_cache_dir = '/tmp/phphtmllib-cache'; + + + /** + * Holds instance of the class + * + * @var object + */ + static private $instance = null; + + public static function singleton() { + if (!Cache::$cache_enabled) { + return NoCache::singleton(); + } + + if (!self::$instance) { + self::$instance = new AirportCache(); + } + + return self::$instance; + } + + /** + * Sets cache directory + * + * @param string $dir + */ + public static function set_cache_dir($dir) { + AirportCache::$cache_dir = $dir; + } + + /** + * This function returns a file name + * based on the cache key + * + * @param string $key + * + * @return string + */ + protected function make_key($key) { + if (substr(AirportCache::$cache_dir, -1, 1) == '/') { + $seperator = ''; + } else { + $seperator = FileCache::PATH_SEPERATOR; + } + return AirportCache::$cache_dir . $seperator . preg_replace("/[^A-Za-z0-9\_\.\-\+\040]/", '', $key) . '.cache'; + } + + /** + * This function initializes + * the cache directory + * + */ + protected function init_cache() { + self::$cache_enabled = $GLOBALS['config']->get('cache_enabled', true); + //if there is a config setting + //we'll use it. + $this->set_cache_dir($GLOBALS['config']->get('airport_file_cache_dir',AirportCache::$default_cache_dir)); + + // make sure the cache directory exists + if (!file_exists(AirportCache::$cache_dir)) { + if (!mkdir(AirportCache::$cache_dir, 0755, TRUE)) { + throw new CacheException("AirportCache::Failed to create " . AirportCache::$cache_dir); + } + } + } +} + +?> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |