PluginProbe ʕ •ᴥ•ʔ
JetBackup – Backup, Restore & Migrate / 3.1.22.4
JetBackup – Backup, Restore & Migrate v3.1.22.4
3.1.22.4 3.1.22.3 1.4.3 1.4.4 1.4.5 1.4.6 1.4.7 1.4.8 1.4.8.1 1.4.9 1.5.0 1.5.1 1.5.1.1 1.5.2 1.5.3 1.5.4 1.5.5 1.5.6 1.5.7 1.5.8 1.6.0 1.6.10 1.6.11 1.6.12 1.6.13 1.6.15 1.6.5.1 1.6.8.8 1.6.9 1.6.9.1 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7.5 2.0.8.7 2.0.9.11 2.0.9.14 2.0.9.15 2.0.9.6 2.0.9.7 2.0.9.9 3.1.10.7 3.1.11.1 3.1.12.3 3.1.13.4 3.1.14.17 3.1.15.4 3.1.16.1 3.1.17.5 3.1.18.10 3.1.18.8 3.1.18.9 3.1.19.8 3.1.20.3 3.1.21.3 3.1.7.9 3.1.9.2 trunk 1.1.90 1.1.91 1.2.0 1.2.5 1.2.6 1.2.7 1.2.8 1.2.9 1.3.0 1.3.1 1.3.2 1.3.3 1.3.4 1.3.6 1.3.7 1.3.8 1.3.9 1.4.0 1.4.1 1.4.2
backup / src / JetBackup / Destination / Vendors / Box / ChunkedUpload.php
backup / src / JetBackup / Destination / Vendors / Box Last commit date
Client 1 year ago .htaccess 1 year ago Box.php 1 year ago Cache.php 1 year ago ChunkedDownload.php 1 year ago ChunkedUpload.php 1 year ago DirIterator.php 1 year ago index.html 1 year ago web.config 1 year ago
ChunkedUpload.php
101 lines
1 <?php
2
3 namespace JetBackup\Destination\Vendors\Box;
4
5 use JetBackup\Destination\Integration\DestinationChunkedUpload;
6 use JetBackup\Destination\Vendors\Box\Client\Client;
7 use JetBackup\Exception\IOException;
8 use JetBackup\Web\File\FileChunk;
9 use JetBackup\Web\File\FileException;
10 use JetBackup\Web\File\FileStream;
11
12 if (!defined( '__JETBACKUP__')) die('Direct access is not allowed');
13
14 class ChunkedUpload implements DestinationChunkedUpload {
15
16 private Box $_client;
17 private FileStream $_source;
18 private string $_destination;
19 private string $_parent;
20 private object $_data;
21 private array $_parts;
22
23 /**
24 * @throws FileException
25 */
26 public function __construct(Box $client, $source, $destination, $parent=Client::ROOT_FOLDER) {
27 $this->_client = $client;
28 $this->_source = new FileStream($source);
29 $this->_destination = $destination;
30 $this->_parent = $parent;
31 $this->_parts = [];
32 $this->_data = new \stdClass();
33 }
34
35 /**
36 * @return object|mixed
37 * @throws IOException
38 */
39 public function prepare():object {
40 return $this->_client->_retries(function() {
41 return $this->_client->getClient()->startUploadSession(basename($this->_destination), $this->_source->getSize(), $this->_parent);
42 }, "Failed creating upload session");
43 }
44
45 public function setData(object $data):void {
46 $this->_data = $data;
47 }
48
49 /**
50 * @return int
51 * @throws IOException
52 */
53 public function getOffset():int {
54 if(!isset($this->_data->id)) throw new IOException("No session id was found");
55
56 return $this->_client->_retries(function() {
57 $this->_parts = $this->_client->getClient()->listUploadSessionParts($this->_data->id)->entries;
58
59 $offset = 0;
60 foreach ($this->_parts as $part) $offset += $part->size;
61 $res = max( $offset, 0 );
62 $this->_client->getLogController()->logDebug("[getOffset] Offset: " . $res);
63 return $res;
64
65 }, "Failed fetching upload offset");
66 }
67
68 /**
69 * @return int|null
70 */
71 public function getChunkSize():?int { return $this->_data->part_size; }
72
73 /**
74 * @param FileChunk $chunk
75 *
76 * @return void
77 * @throws IOException
78 */
79 public function upload(FileChunk $chunk):void {
80 if(!isset($this->_data->id)) throw new IOException("No session id was found");
81
82 $this->_client->_retries(function() use ($chunk) {
83 $this->_parts[] = $this->_client->getClient()->appendUploadSession($this->_data->id, $chunk)->part;
84 $this->_client->getLogController()->logDebug("[upload] Uploading chunk..." . $chunk->getSize());
85 }, "Failed uploading chunk");
86 }
87
88 /**
89 * @return void
90 * @throws IOException
91 */
92 public function finalize():void {
93 if(!isset($this->_data->id)) throw new IOException("No session id was found");
94
95 $this->_client->_retries(function() {
96 $this->_source->rewind();
97 $this->_client->getClient()->commitUploadSession($this->_data->id, $this->_source, $this->_parts);
98 $this->_client->getLogController()->logDebug("[finalize] Finalized upload session");
99 }, "Failed commiting upload session");
100 }
101 }