Skip to content

Commit 23326a2

Browse files
daunjasonvarga
andauthored
[6.x] Add duration column to asset browser (#13331)
Co-authored-by: Jason Varga <jason@pixelfear.com>
1 parent 5902e9a commit 23326a2

6 files changed

Lines changed: 55 additions & 0 deletions

File tree

src/Fieldtypes/Assets/Assets.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,11 +259,19 @@ protected function getColumns()
259259
->defaultVisibility(false)
260260
->sortable(true);
261261

262+
$duration = Column::make('duration')
263+
->label(__('Duration'))
264+
->value('duration_formatted')
265+
->visible(true)
266+
->defaultVisibility(false)
267+
->sortable(true);
268+
262269
$columns->put('basename', $basename);
263270
$columns->put('size', $size);
264271
$columns->put('last_modified', $lastModified);
265272
$columns->put('width', $width);
266273
$columns->put('height', $height);
274+
$columns->put('duration', $duration);
267275

268276
$columns->setPreferred("assets.{$this->container()->handle()}.columns");
269277

src/Http/Controllers/CP/Assets/BrowserController.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,11 +245,19 @@ public function setColumns($container)
245245
->defaultVisibility(false)
246246
->sortable(true);
247247

248+
$duration = Column::make('duration')
249+
->label(__('Duration'))
250+
->value('duration_formatted')
251+
->visible(true)
252+
->defaultVisibility(false)
253+
->sortable(true);
254+
248255
$columns->put('basename', $basename);
249256
$columns->put('size', $size);
250257
$columns->put('last_modified', $lastModified);
251258
$columns->put('width', $width);
252259
$columns->put('height', $height);
260+
$columns->put('duration', $duration);
253261

254262
$columns->setPreferred("assets.{$container->handle()}.columns");
255263

src/Http/Resources/CP/Assets/FolderAsset.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public function toArray($request)
3838
'url' => $this->absoluteUrl(),
3939
'width' => $this->width(),
4040
'height' => $this->height(),
41+
'duration_formatted' => ($duration = $this->duration()) ? Str::durationForHumans($duration) : null,
4142
'size_formatted' => Str::fileSizeForHumans($this->size(), 0),
4243
'last_modified_relative' => $this->lastModified()->diffForHumans(),
4344
'editable' => User::current()->can('edit', $this->resource),

src/Http/Resources/CP/Assets/SearchedAssetsCollection.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,19 @@ public function setColumns()
6868
->defaultVisibility(false)
6969
->sortable(true);
7070

71+
$duration = Column::make('duration')
72+
->label(__('Duration'))
73+
->value('duration_formatted')
74+
->visible(true)
75+
->defaultVisibility(false)
76+
->sortable(true);
77+
7178
$columns->put('basename', $basename);
7279
$columns->put('size', $size);
7380
$columns->put('last_modified', $lastModified);
7481
$columns->put('width', $width);
7582
$columns->put('height', $height);
83+
$columns->put('duration', $duration);
7684

7785
if ($key = $this->columnPreferenceKey) {
7886
$columns->setPreferred($key);

src/Support/Str.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,19 @@ public static function fileSizeForHumans($bytes, $decimals = 2)
149149
return trans('statamic::messages.units.B', ['count' => $bytes]);
150150
}
151151

152+
public static function durationForHumans($s)
153+
{
154+
$hours = floor($s / 3600);
155+
$mins = floor(($s % 3600) / 60);
156+
$secs = $s % 60;
157+
158+
if ($hours > 0) {
159+
return sprintf('%d:%02d:%02d', $hours, $mins, $secs);
160+
}
161+
162+
return sprintf('%d:%02d', $mins, $secs);
163+
}
164+
152165
public static function timeForHumans($ms)
153166
{
154167
if ($ms < 1000) {

tests/Support/StrTest.php

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,23 @@ public function it_gets_time_for_humans()
147147
$this->assertEquals('1.57s', Str::timeForHumans(1570));
148148
}
149149

150+
#[Test]
151+
public function it_gets_duration_for_humans()
152+
{
153+
$this->assertEquals('0:00', Str::durationForHumans(0));
154+
$this->assertEquals('0:01', Str::durationForHumans(1));
155+
$this->assertEquals('0:12', Str::durationForHumans(12));
156+
$this->assertEquals('0:59', Str::durationForHumans(59));
157+
$this->assertEquals('1:00', Str::durationForHumans(60));
158+
$this->assertEquals('2:01', Str::durationForHumans(121));
159+
$this->assertEquals('16:40', Str::durationForHumans(1000));
160+
$this->assertEquals('59:59', Str::durationForHumans(3599));
161+
$this->assertEquals('1:00:00', Str::durationForHumans(3600));
162+
$this->assertEquals('1:01:01', Str::durationForHumans(3661));
163+
$this->assertEquals('2:10:00', Str::durationForHumans(7800));
164+
$this->assertEquals('10:05:30', Str::durationForHumans(36330));
165+
}
166+
150167
#[Test]
151168
public function it_widonts()
152169
{

0 commit comments

Comments
 (0)