Athorcis/athorrent-frontend

View on GitHub
src/Filesystem/FileUtils.php

Summary

Maintainability
A
35 mins
Test Coverage
<?php

namespace Athorrent\Filesystem;

use FilesystemIterator;
use Symfony\Component\Filesystem\Exception\IOException;

class FileUtils extends \Symfony\Component\Filesystem\Filesystem
{
    public function getSize($files): int
    {
        $size = 0;
        $files = $this->toIterable($files);

        foreach ($files as $file) {
            if (is_dir($file)) {
                $iterator = new FilesystemIterator($file, FilesystemIterator::CURRENT_AS_PATHNAME | FilesystemIterator::SKIP_DOTS);
                $size += $this->getSize($iterator);
            } else {
                $bytes = @filesize($file);

                if ($bytes === false) {
                    $error = error_get_last();
                    throw new IOException(sprintf('Failed to get size of file "%s": %s.', $file, $error['message']));
                }

                $size += $bytes;
            }
        }

        return $size;
    }

    private function toIterable($files): iterable
    {
        return is_iterable($files) ? $files : [$files];
    }

    public static function encodeFilename(string $path): string
    {
        $parts = pathinfo($path);
        return $parts['dirname'] . '/'. base64_encode($parts['filename']) . '.' . $parts['extension'];
    }
}