Skip to content
Extraits de code Groupes Projets
Sélectionner une révision Git
  • 12b0109cc39e6ac8060489c896b31db6d5e5fa81
  • master par défaut
  • cinch
  • ruby
  • gh-pages
  • v1.0.0
6 résultats

chan.pm

Blame
  • chan.pm 1,72 Kio
    package PlayBot::utils::db::chan;
    
    use strict;
    use warnings;
    
    use JSON;
    use Moose;
    
    use PlayBot::utils::db;
    
    
    has 'name'    => (is => 'ro', isa => 'Str');
    has 'sites'  => (is => 'ro', isa => 'ArrayRef[Str]', writer => '_set_sites');
    
    
    around 'BUILDARGS' => sub
    {
        my ($orig, $class, $name) = @_;
    
        not $name and die "missing arg 'name'";
    
        my $dbh = PlayBot::utils::db::main_session;
        my $sth = $dbh->prepare('
            select sites
            from playbot_config
            where name = ?
        ');
        $sth->execute($name);
    
        my $sites;
        my $row = $sth->fetch;
    
        if (not $row)
        {
            $sites = ['dailymotion', 'mixcloud', 'soundcloud', 'youtube', 'spotify', 'deezer'];
    
            $sth = $dbh->prepare('
                insert into playbot_config (name, sites)
                values (?, ?)
            ');
            $sth->execute($name, encode_json($sites));
        }
        else
        {
            eval
            {
                $sites = decode_json($row->[0]);
            };
    
            $@ and $sites = [];
        }
    
        $dbh->commit;
    
        return $class->$orig(
            name    => $name,
            sites   => $sites,
        );
    };
    
    
    sub add_site
    {
        my $self = shift;
        my $site = shift;
    
        my @new_sites = (@{ $self->sites }, $site);
    
        $self->_update_db(\@new_sites);
        $self->_set_sites(\@new_sites);