/**
  * @param $job_object BackWPup_Job
  * @return bool
  */
 public function job_run_archive(BackWPup_Job $job_object)
 {
     $job_object->substeps_todo = 2 + $job_object->backup_filesize;
     $job_object->log(sprintf(__('%d. Try to send backup to SugarSync …', 'backwpup'), $job_object->steps_data[$job_object->step_working]['STEP_TRY']), E_USER_NOTICE);
     try {
         $sugarsync = new BackWPup_Destination_SugarSync_API($job_object->job['sugarrefreshtoken']);
         //Check Quota
         $user = $sugarsync->user();
         if (!empty($user->nickname)) {
             $job_object->log(sprintf(__('Authenticated to SugarSync with nickname %s', 'backwpup'), $user->nickname), E_USER_NOTICE);
         }
         $sugarsyncfreespase = (double) $user->quota->limit - (double) $user->quota->usage;
         //float fixes bug for display of no free space
         if ($job_object->backup_filesize > $sugarsyncfreespase) {
             $job_object->log(sprintf(_x('Not enough disk space available on SugarSync. Available: %s.', 'Available space on SugarSync', 'backwpup'), size_format($sugarsyncfreespase, 2)), E_USER_ERROR);
             $job_object->substeps_todo = 1 + $job_object->backup_filesize;
             return TRUE;
         } else {
             $job_object->log(sprintf(__('%s available at SugarSync', 'backwpup'), size_format($sugarsyncfreespase, 2)), E_USER_NOTICE);
         }
         //Create and change folder
         $sugarsync->mkdir($job_object->job['sugardir'], $job_object->job['sugarroot']);
         $dirid = $sugarsync->chdir($job_object->job['sugardir'], $job_object->job['sugarroot']);
         //Upload to SugarSync
         $job_object->substeps_done = 0;
         $job_object->log(__('Starting upload to SugarSync …', 'backwpup'), E_USER_NOTICE);
         self::$backwpup_job_object =& $job_object;
         $reponse = $sugarsync->upload($job_object->backup_folder . $job_object->backup_file);
         if (is_object($reponse)) {
             if (!empty($job_object->job['jobid'])) {
                 BackWPup_Option::update($job_object->job['jobid'], 'lastbackupdownloadurl', network_admin_url('admin.php') . '?page=backwpupbackups&action=downloadsugarsync&file=' . (string) $reponse . '&jobid=' . $job_object->job['jobid']);
             }
             $job_object->substeps_done++;
             $job_object->log(sprintf(__('Backup transferred to %s', 'backwpup'), 'https://' . $user->nickname . '.sugarsync.com/' . $sugarsync->showdir($dirid) . $job_object->backup_file), E_USER_NOTICE);
         } else {
             $job_object->log(__('Cannot transfer backup to SugarSync!', 'backwpup'), E_USER_ERROR);
             return FALSE;
         }
         $backupfilelist = array();
         $files = array();
         $filecounter = 0;
         $dir = $sugarsync->showdir($dirid);
         $getfiles = $sugarsync->getcontents('file');
         if (is_object($getfiles)) {
             foreach ($getfiles->file as $getfile) {
                 $getfile->displayName = utf8_decode((string) $getfile->displayName);
                 if ($job_object->is_backup_archive($getfile->displayName)) {
                     $backupfilelist[strtotime((string) $getfile->lastModified)] = (string) $getfile->ref;
                 }
                 $files[$filecounter]['folder'] = 'https://' . (string) $user->nickname . '.sugarsync.com/' . $dir;
                 $files[$filecounter]['file'] = (string) $getfile->ref;
                 $files[$filecounter]['filename'] = (string) $getfile->displayName;
                 $files[$filecounter]['downloadurl'] = network_admin_url('admin.php') . '?page=backwpupbackups&action=downloadsugarsync&file=' . (string) $getfile->ref . '&jobid=' . $job_object->job['jobid'];
                 $files[$filecounter]['filesize'] = (int) $getfile->size;
                 $files[$filecounter]['time'] = strtotime((string) $getfile->lastModified) + get_option('gmt_offset') * 3600;
                 $filecounter++;
             }
         }
         if (!empty($job_object->job['sugarmaxbackups']) && $job_object->job['sugarmaxbackups'] > 0) {
             //Delete old backups
             if (count($backupfilelist) > $job_object->job['sugarmaxbackups']) {
                 ksort($backupfilelist);
                 $numdeltefiles = 0;
                 while ($file = array_shift($backupfilelist)) {
                     if (count($backupfilelist) < $job_object->job['sugarmaxbackups']) {
                         break;
                     }
                     $sugarsync->delete($file);
                     //delete files on Cloud
                     foreach ($files as $key => $filedata) {
                         if ($filedata['file'] == $file) {
                             unset($files[$key]);
                         }
                     }
                     $numdeltefiles++;
                 }
                 if ($numdeltefiles > 0) {
                     $job_object->log(sprintf(_n('One file deleted on SugarSync folder', '%d files deleted on SugarSync folder', $numdeltefiles, 'backwpup'), $numdeltefiles), E_USER_NOTICE);
                 }
             }
         }
         set_site_transient('BackWPup_' . $job_object->job['jobid'] . '_SUGARSYNC', $files, 60 * 60 * 24 * 7);
     } catch (Exception $e) {
         $job_object->log(E_USER_ERROR, sprintf(__('SugarSync API: %s', 'backwpup'), $e->getMessage()), $e->getFile(), $e->getLine());
         return FALSE;
     }
     $job_object->substeps_done++;
     return TRUE;
 }