Skip to content

Commit

Permalink
(feat) Add reupload cli command (#2)
Browse files Browse the repository at this point in the history
* (feat) Add reupload cli command

This allows us to reupload everything when the account info changes.

* Format code

* Add docs
  • Loading branch information
nitriques authored Oct 16, 2023
1 parent 62232c0 commit 4163fd0
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 0 deletions.
6 changes: 6 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,6 +83,12 @@ query MyQuery {
}
```

8) You can also mass re-upload everything via Craft's cli

```sh
./craft cloudflare-stream/reupload
```

This extension uses Craft's Queue system, so make sure it works properly.
Please make sure that Craft's max upload limit is also properly set.

Expand Down
20 changes: 20 additions & 0 deletions src/Plugin.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,13 @@

namespace deuxhuithuit\cfstream;

use craft\console\Controller;
use craft\events\DefineConsoleActionsEvent;
use craft\events\RegisterComponentTypesEvent;
use craft\events\RegisterTemplateRootsEvent;
use craft\services\Fields;
use craft\web\View;
use deuxhuithuit\cfstream\controllers\ReuploadController;
use deuxhuithuit\cfstream\fields\CloudflareVideoStreamField;
use deuxhuithuit\cfstream\jobs\DeleteVideoJob;
use deuxhuithuit\cfstream\jobs\UploadVideoJob;
Expand Down Expand Up @@ -199,6 +202,23 @@ function (\craft\events\AssetPreviewEvent $event) {
[$this, 'autoDelete']
);

Event::on(
ReuploadController::class,
Controller::EVENT_DEFINE_ACTIONS,
function (DefineConsoleActionsEvent $event) {
$event->actions['reupload'] = [
'options' => [],
'helpSummary' => 'Re-uploads all Cloudflare stream assets.',
'action' => function (): int {
/** @var CliController $controller */
$controller = \Craft::$app->controller;

return $controller->actionReupload();
},
];
}
);

parent::init();
}

Expand Down
59 changes: 59 additions & 0 deletions src/controllers/ReuploadController.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
<?php

namespace deuxhuithuit\cfstream\controllers;

use craft\console\Controller;
use craft\elements\Asset;
use craft\helpers\Console;
use deuxhuithuit\cfstream\fields\CloudflareVideoStreamField;
use deuxhuithuit\cfstream\jobs\UploadVideoJob;
use yii\console\ExitCode;

class ReuploadController extends Controller
{
public $defaultAction = 'reupload';

public function actionReupload(): int
{
$fields = \Craft::$app->getFields()->getFieldsByType(CloudflareVideoStreamField::class);
$fieldsCount = is_array($fields) ? count($fields) : 0;

$this->stdout("Found {$fieldsCount} fields", Console::FG_GREEN);
$this->stdout(PHP_EOL);

$volumes = \Craft::$app->getVolumes()->getAllVolumes();
$volumeCount = is_array($volumes) ? count($volumes) : 0;

$this->stdout("Found {$volumeCount} volumes", Console::FG_GREEN);
$this->stdout(PHP_EOL);

$uploadCount = 0;
foreach ($volumes as $volume) {
$this->stdout("Volume: {$volume->name}");
$this->stdout(PHP_EOL);
foreach ($fields as $field) {
$this->stdout(" Field: {$field->handle}");
$this->stdout(PHP_EOL);

$entries = Asset::find()->volumeId($volume->id)->all();
foreach ($entries as $asset) {
if (isset($asset->videoStream)) {
$uploadJob = new UploadVideoJob([
'fieldHandle' => $field->handle,
'elementId' => $asset->id,
'videoUrl' => $asset->getUrl(),
'videoName' => $asset->title ?? $asset->filename,
]);
\Craft::$app->getQueue()->push($uploadJob);
++$uploadCount;
}
}
}
}

$this->stdout("Created {$uploadCount} new upload jobs!", Console::FG_GREEN);
$this->stdout(PHP_EOL);

return ExitCode::OK;
}
}

0 comments on commit 4163fd0

Please sign in to comment.