ASCIInema Player integration nc16

Hi, i am starting a project for an app that is based on the pdf viewer.
the project should allow native support for “.cast” files to be viewed in nextcloud like opening pds currently. ( looks like this: https://asciinema.org/a/14?t=25&speed=2&theme=solarized-dark)

the javascript library i want to use is https://github.com/asciinema/asciinema-player

it should trigger whenever you want to open a cast file via webapp or mobile app.

the usage of the player is fairly simple and looks something like this:

<html>
<head>
  ...
  <link rel="stylesheet" type="text/css" href="/asciinema-player.css" />
  ...
</head>
<body>
  ...
  <asciinema-player src="/demo.cast"></asciinema-player>
  ...
  <script src="/asciinema-player.js"></script>
</body>
</html>

i was able to generate a git repository for the project: https://github.com/jrsmile/files_castviewer
it is forked from the nextcloud/files_pdfviewer.

it just started but if somebody wants to join the team feel free to contribute.

2 Likes

what i found so far is that i have to register a mime type for .cast files like:
<?php

namespace OCA\CastViewer\Migration;

use OCP\Migration\IOutput;
use OCP\Migration\IRepairStep;
use OCP\ILogger;

class RegisterMimeType implements IRepairStep {
    protected $logger;
    private $customMimetypeMapping;

public function __construct(ILogger $logger) {
    $this->logger = $logger;

    // Define the custom mimetype mapping
    $this->customMimetypeMapping = array(
        "cast" => array("application/cast")
    );
}

public function getName() {
    return 'Register MIME type for "application/cast"';
}

private function registerForExistingFiles() {
    $mimetypeMapping = $this->customMimetypeMapping;
    $mimeTypeLoader = \OC::$server->getMimeTypeLoader();

    foreach($mimetypeMapping as $mimetypeKey => $mimetypeValues) {
        foreach($mimetypeValues as $mimetypeValue) {
            $mimeId = $mimeTypeLoader->getId($mimetypeValue);
            $mimeTypeLoader->updateFilecache($mimetypeKey, $mimeId);
        }
    }
}

private function registerForNewFiles() {
    $mimetypeMapping = $this->customMimetypeMapping;
    $mimetypeMappingFile = \OC::$configDir . 'mimetypemapping.json';

    if (file_exists($mimetypeMappingFile)) {
        $existingMimetypeMapping = json_decode(file_get_contents($mimetypeMappingFile), true);
        $mimetypeMapping = array_merge($existingMimetypeMapping, $mimetypeMapping);
    }

    file_put_contents($mimetypeMappingFile, json_encode($mimetypeMapping, JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT));
}

public function run(IOutput $output) {
    $this->logger->info('Registering the mimetype...');

    // Register the mime type for existing files
    $this->registerForExistingFiles();

    // Register the mime type for new files
    $this->registerForNewFiles();

    $this->logger->info('The mimetype was successfully registered.');
}
}

and to register a default action like:

OCA.Files.fileActions.registerAction({
name: ‘audio’,
displayName: ‘audio’,
mime: mime,
permissions: OC.PERMISSION_READ,
icon: icon_url,
actionHandler: playFile
});
OCA.Files.fileActions.setDefault(mime, ‘audio’);

But how do i tell my template php which file to open?

It’s definitely a good idea for an app!

It would be nice to have the player also for the public shares.

Thank you; I am looking forward to see it ready!