|
|
<?php
class Download { public $_id; public $timestamp; public $premURL; public $premFilename; public $url; public $filename; public $cstate; public $worker; static public $validStates = ['added', 'downloaded', 'downloading', 'dupp'];
/** * Retourne les infos sur le prochain fichier a telecharger * * @return Download Instance du fichier a dl */ static function findNextJob() { $db = DbMongo::get(); $coll = $db->download; $dbRet = $coll->findOne([ 'cstate' => 'added', 'worker' => getenv('WORKER') ]); $myDownload = new Download(); $myDownload->db2Inst($dbRet);
// $myDownload->updateState('downloading');
// $myDownload->addEvent([
// 'state' => 'downloading'
// ]);
//
if (!empty($myDownload->_id)) { echo 'New job: '.$myDownload->dtype.':'.$myDownload->url; } else { echo 'No job in the queue'; }
return $myDownload; } static function addDownload($url, $worker, $dtype) { $myDownload = new Download(); $db = DbMongo::get(); $coll = $db->download; $values = [ '_id' => new MongoId(), 'timestamp' => time(), 'cstate' => 'added', 'url' => $url, 'dtype' => $dtype, 'from' => $_SERVER['REMOTE_ADDR'], 'worker' => $worker ];
// TODO : verifier le retour
$coll->insert($values); $myDownload->db2Inst($values);
return $myDownload; } private function db2Inst($dbRet) { $this->_id = $dbRet['_id']; $this->timestamp = $dbRet['timestamp']; $this->url = $dbRet['url']; $this->cstate = $dbRet['cstate']; $this->dtype = $dbRet['dtype']; $this->worker = $dbRet['worker']; } public function addEvent($event) { $db = DbMongo::get(); $coll = $db->download; $dbRet = $coll->update( ['_id' => $this->_id], ['$push' => [ 'event' => array_merge( [ 'timestamp' => time() ], $event ) ]] ); }
/** * Telecharge le fichier * * @return array Informations sur le transfert */ public function get() { set_time_limit(0); if ('premiumizeme' === $this->dtype) { PremiumizeMe::get($this); } elseif ('dlink' === $this->dtype) { DLink::get($this); } }
// TODO: coder un changeState + option c'est utilisé à trop d'endroit mee sur premiumizeme
public function updateState($state, $extras = []) { $db = DbMongo::get(); $coll = $db->download; $dbRet = $coll->update( ['_id' => $this->_id], ['$set' => [ 'cstate' => $state, 'extras' => $extras ]] ); $this->cstate = $state; }
public function updateFilename($filename) { $db = DbMongo::get(); $coll = $db->download; $dbRet = $coll->update( ['_id' => $this->_id], ['$set' => [ 'filename' => $filename ]] ); $this->filename = $filename; }
/** * Lance le telechargement du prochain fichier a dl */ static function launchNextDownload() { if ('cgi-fcgi' === php_sapi_name()) { //fastcgi_finish_request();
} $toDownload = self::findNextJob(); $toDownload->get(); }
static function listByState($state) { $db = DbMongo::get(); $coll = $db->download; $retour = []; foreach ($coll->find(['cstate' => $state])->sort(['timestamp' => -1]) as $element) { $element['time'] = DateTime::createFromFormat('U', $element['timestamp']);
if (empty($element['filename'])) { $element['href'] = false; } elseif (file_exists(DOWNLOADEDDIR.DIRECTORY_SEPARATOR.$element['filename'])) { $element['href'] = true; } else { $element['href'] = false; } $retour[] = $element; } return $retour; }
static function clear($state) { $db = DbMongo::get(); $coll = $db->download;
$coll->remove(['cstate' => $state]); }}
|