Пример #1
0
/**
 * stopTransfer
 *
 * @param $transfer
 */
function dispatcher_stopTransfer($transfer)
{
    global $cfg;
    if ($cfg["transmission_rpc_enable"] && isHash($transfer)) {
        require_once 'inc/functions/functions.rpc.transmission.php';
        if (isValidTransmissionTransfer($cfg['uid'], $transfer)) {
            stopTransmissionTransfer($transfer);
            return;
        }
    }
    // valid
    if (tfb_isValidTransfer($transfer) !== true) {
        AuditAction($cfg["constants"]["error"], "INVALID TRANSFER: " . $transfer);
        @error("Invalid Transfer", "", "", array($transfer));
    }
    // ch
    $ch = ClientHandler::getInstance(getTransferClient($transfer));
    // permission
    dispatcher_checkTypePermission($transfer, $ch->type, "stop");
    // stop
    $ch->stop($transfer);
    // check
    if (count($ch->messages) > 0) {
        @error("There were Problems", "", "", $ch->messages);
    }
}
 /**
  * updateStatFiles
  *
  * @param $transfer string torrent name
  * @return boolean
  */
 function updateStatFiles($transfer = "")
 {
     global $cfg, $db;
     //$rpc = Transmission::getInstance();
     $tfs = $this->monitorRunningTransfers();
     if (!is_array($tfs)) {
         return false;
     }
     $sql = "SELECT hash, transfer, sharekill FROM tf_transfers WHERE type='torrent' AND client = 'transmissionrpc'";
     if ($transfer != "") {
         //only update one transfer...
         $sql .= " AND transfer=" . $db->qstr($transfer);
     } else {
         $hashes = array("''");
         foreach ($tfs as $hash => $t) {
             $hashes[] = "'" . strtolower($hash) . "'";
         }
         $sql .= " AND hash IN (" . implode(',', $hashes) . ")";
     }
     $recordset = $db->Execute($sql);
     while (list($hash, $transfer, $sharekill) = $recordset->FetchRow()) {
         $hash = strtolower($hash);
         $hashes[$hash] = $transfer;
         $sharekills[$hash] = $sharekill;
     }
     //convertTimeText
     require_once "inc/functions/functions.core.php";
     foreach ($tfs as $hash => $t) {
         if (!isset($hashes[$hash])) {
             continue;
         }
         $transfer = $hashes[$hash];
         $sf = new StatFile($transfer);
         $sf->running = $t['running'];
         $sf->percent_done = round($t['percentDone'] * 100, 2);
         if ($t['status'] == 8 || $t['status'] == 9) {
             $sf->sharing = round($t['uploadRatio'] * 100, 2);
         }
         $sf->downtotal = $t['downloadedEver'];
         $sf->uptotal = $t['uploadedEver'];
         $sf->write();
     }
     //SHAREKILLS Checks
     foreach ($tfs as $hash => $t) {
         if (!isset($sharekills[$hash])) {
             continue;
         }
         if (($t['status'] == 8 || $t['status'] == 9) && $t['uploadRatio'] * 100 > $sharekills[$hash]) {
             $transfer = $hashes[$hash];
             if (stopTransmissionTransfer($hash)) {
                 AuditAction($cfg["constants"]["stop_transfer"], $this->client . "-stat. : sharekill stopped {$transfer}");
                 stopTransferSettings($transfer);
             }
         }
     }
     return true;
 }