public static function execute( $params ) {
		// Set Gdrive client
		$gdrive = new ServMaskGdriveClient(
			get_option( 'ai1wmge_gdrive_token' ),
			get_option( 'ai1wmge_gdrive_ssl', true )
		);

		$backup_folder = $gdrive->listFolder( ai1wm_archive_folder() );

		if ( isset( $backup_folder['items'] ) && ( $item = array_shift( $backup_folder['items'] ) ) ) {
			$backup_folder = $item;
		} else {
			return $params;
		}

		$files = $gdrive->listFolder( null, $backup_folder['id'], array(
			'orderBy' => 'createdDate',
		) );

		$backups = array();
		foreach ( $files['items'] as $backup ) {
			if ( $backup['kind'] === 'drive#file' ) {
				$backups[] = $backup;
			}
		}

		// Skip calculations if there are no backups to delete
		if ( count( $backups ) === 0 ) {
			return $params;
		}

		// Number of backups
		if ( ( $backups_limit = get_option( 'ai1wmge_gdrive_backups', 0 ) ) ) {
			if ( ( $backups_to_remove = count( $backups ) - $backups_limit ) > 0 ) {
				for ( $index = 0; $index < $backups_to_remove; $index++ ) {
					$gdrive->delete( $backups[$index]['id'] );
				}
			}
		}

		// Sort backups by date desc
		$backups = array_reverse( $backups );

		// Get the size of the latest backup before we remove it
		$size_of_backups = $backups[0]['fileSize'];

		// Remove the latest backup, the user should have at least one backup
		array_shift( $backups );

		if ( ( $retention_size = ai1wm_parse_size( get_option( 'ai1wmge_gdrive_total', 0 ) ) ) ) {
			foreach ( $backups as $backup ) {
				$size_of_backups += $backup['fileSize'];
				if ( $size_of_backups > $retention_size ) {
					$gdrive->delete( $backup['id'] );
				}
			}
		}

		return $params;
	}
	public static function execute( $params ) {

		// Set progress
		Ai1wm_Status::info( __( 'Connecting to Google Drive...', AI1WMGE_PLUGIN_NAME ) );

		// Open achive file
		$archive = new Ai1wm_Compressor( ai1wm_archive_path( $params ) );

		// Append EOF block
		$archive->close( true );

		// Set Gdrive client
		$gdrive = new ServMaskGdriveClient(
			get_option( 'ai1wmge_gdrive_token' ),
			get_option( 'ai1wmge_gdrive_ssl', true )
		);

		// Get or Create folder
		$folder = $gdrive->listFolder( ai1wm_archive_folder() );
		if ( isset( $folder['items'] ) && ( $item = array_shift( $folder['items'] ) ) ) {
			$folder = $item;
		} else {
			$folder = $gdrive->createFolder( ai1wm_archive_folder() );
		}

		// Upload resumable
		$params['uploadUrl'] = $gdrive->uploadResumable(
			ai1wm_archive_name( $params ),
			ai1wm_archive_bytes( $params ),
			$folder['id']
		);

		return $params;
	}
 public static function execute($params)
 {
     // Set Dropbox client
     $dropbox = new ServMaskDropboxClient(get_option('ai1wmde_dropbox_token'), get_option('ai1wmde_dropbox_ssl', true));
     // Get metadata
     $metadata = $dropbox->metadata(ai1wm_archive_folder());
     // Number of backups
     if ($backups = get_option('ai1wmde_dropbox_backups')) {
         if ($backups = count($metadata['contents']) - $backups) {
             for ($i = 0; $i < $backups; $i++) {
                 if (empty($metadata['contents'][$i]['is_dir'])) {
                     $dropbox->delete($metadata['contents'][$i]['path']);
                 }
             }
         }
     }
     // Size of backups
     if ($total = ai1wm_parse_size(get_option('ai1wmde_dropbox_total'))) {
         $bytes = 0;
         if (isset($metadata['contents']) && ($contents = $metadata['contents'])) {
             foreach ($contents as $content) {
                 $bytes += $content['bytes'];
             }
             // Delete backups
             foreach ($contents as $content) {
                 if ($bytes > $total) {
                     if (empty($content['is_dir'])) {
                         $dropbox->delete($content['path']);
                         // Decrease bytes
                         $bytes -= $content['bytes'];
                     }
                 }
             }
         }
     }
     return $params;
 }
 public static function execute($params)
 {
     $completed = false;
     // Set offset
     if (!isset($params['offset'])) {
         $params['offset'] = 0;
     }
     // Set retry
     if (!isset($params['retry'])) {
         $params['retry'] = 0;
     }
     // Set Dropbox client
     $dropbox = new ServMaskDropboxClient(get_option('ai1wmde_dropbox_token'), get_option('ai1wmde_dropbox_ssl', true));
     // Get archive file
     $archive = fopen(ai1wm_archive_path($params), 'rb');
     // Read file chunk
     if (fseek($archive, $params['offset']) !== -1 && ($chunk = fread($archive, ServMaskDropboxClient::CHUNK_SIZE))) {
         try {
             // Increase number of retries
             $params['retry'] += 1;
             // Upload file chunk
             $dropbox->uploadFileChunk($chunk, $params);
         } catch (Exception $e) {
             // Retry 3 times
             if ($params['retry'] <= 3) {
                 return $params;
             }
             throw $e;
         }
         // Reset retry counter
         $params['retry'] = 0;
         // Set archive details
         $name = ai1wm_archive_name($params);
         $bytes = ai1wm_archive_bytes($params);
         $size = ai1wm_archive_size($params);
         // Get progress
         if (isset($params['offset'])) {
             $progress = (int) ($params['offset'] / $bytes * 100);
         } else {
             $progress = 100;
         }
         // Set progress
         Ai1wm_Status::info(__("<i class=\"ai1wm-icon-dropbox\"></i> " . "Uploading <strong>{$name}</strong> ({$size})<br />{$progress}% complete", AI1WMDE_PLUGIN_NAME));
     } else {
         // Set archive details
         $name = ai1wm_archive_name($params);
         $folder = ai1wm_archive_folder();
         // Commit upload file chunk
         $dropbox->uploadFileChunkCommit(sprintf('%s/%s', $folder, $name), $params);
         // Set last backup date
         update_option('ai1wmde_dropbox_timestamp', current_time('timestamp'));
         // Set progress
         Ai1wm_Status::done(__('Your WordPress archive has been uploaded to Dropbox.', AI1WMDE_PLUGIN_NAME), __('Dropbox', AI1WMDE_PLUGIN_NAME));
         // Upload completed
         $completed = true;
         self::notify_admin_of_new_backup($params);
     }
     // Close the archive file
     fclose($archive);
     // Set completed flag
     $params['completed'] = $completed;
     return $params;
 }