App-MHFS

 view release on metacpan or  search on metacpan

lib/MHFS/Plugin/Youtube.pm  view on Meta::CPAN

    return undef if(! $qs->{'id'});
    my $media;
    if(defined $qs->{'media'} && (defined $self->{'fmts'}{$qs->{'media'}})) {
        $media = $qs->{'media'};
    }
    else  {
        $media = 'video';
    }
    return $qs->{'id'} . '_' . $media;
}
sub new {
    my ($class, $settings, $server) = @_;
    my $self =  {'settings' => $settings};
    bless $self, $class;
    $self->{'routes'} = [
    ['/youtube', sub {
        my ($request) = @_;
        $self->onYoutube($request);
    }],
    ['/yt', sub {
        my ($request) = @_;
        $self->onYoutube($request);
    }],
    ['/ytmusic', sub {
        my ($request) = @_;
        $request->{'qs'}{'media'} //= 'music';
        $self->onYoutube($request);
    }],
    ['/ytaudio', sub {
        my ($request) = @_;
        $request->{'qs'}{'media'} //= 'music';
        $self->onYoutube($request);
    }],
    ['/ytplayer', sub {
        my ($request) = @_;
        my $html = $self->searchbox($request);
        $html .= $self->ytplayer($request);
        $request->SendHTML($html);
    }],
    ['/ytembedplayer', sub {
        my ($request) = @_;
        $request->SendHTML($self->ytplayer($request));
    }],
    ];
    $self->{'fmts'} = {'music' => 'bestaudio', 'video' => 'best'};
    $self->{'minsize'} = '1048576';
    say __PACKAGE__.': adding video format yt';
    $server->{'loaded_plugins'}{'MHFS::Plugin::GetVideo'}{'VIDEOFORMATS'}{yt} = {'lock' => 1, 'ext' => 'yt', 'plugin' => $self};
    my $pstart = __PACKAGE__.": ";
    # check for youtube-dl and install if not specified
    my $youtubedl = $settings->{'Youtube'}{'youtube-dl'};
    my $installed;
    if(!$youtubedl) {
        my $mhfsytdl = $settings->{'GENERIC_TMPDIR'}.'/youtube-dl';
        if(! -e $mhfsytdl) {
            say $pstart."Attempting to download youtube-dl";
            if(system('curl', '-L', 'https://yt-dl.org/downloads/latest/youtube-dl', '-o', $mhfsytdl) != 0) {
                say $pstart . "Failed to download youtube-dl. plugin load failed";
                return undef;
            }
            if(system('chmod', 'a+rx', $mhfsytdl) != 0) {
                say $pstart . "Failed to set youtube-dl permissions. plugin load failed";
                return undef;
            }
            $installed = 1;
            say $pstart."youtube-dl successfully installed!";
        }
        $youtubedl = $mhfsytdl;
    }
    elsif( ! -e $youtubedl) {
        say $pstart . "youtube-dl not found. plugin load failed";
        return undef;
    }
    $self->{'youtube-dl'} = $youtubedl;
    # update if we didn't just install
    if(! $installed) {
        say  $pstart . "Attempting to update youtube-dl";
        if(fork() == 0)
        {
            system "$youtubedl", "-U";
            exit 0;
        }
    }
    return $self;
}
1;



( run in 1.364 second using v1.01-cache-2.11-cpan-39bf76dae61 )