From 389a32204546ce812f04cf990725c18ee5514ecc Mon Sep 17 00:00:00 2001 From: Othmar Gsenger Date: Fri, 14 Jan 2011 03:50:24 +0000 Subject: added database support --- enqueue.pl | 18 ++++++++++++------ groups.pl | 39 +++++++++++++++++++++++++++++++++++++++ local/db.pm | 22 ++++++++++++++++++++++ local/nzbindex.pm | 2 +- local/user.pm | 34 ++++++++++++++++++++++++++++++++++ log.pl | 6 ------ mydl.pl | 33 +++++++++++++++++++++++++++++++++ pre_enqueue.pl | 28 ++++++++++++++++++++++++++++ search.pl | 3 +-- 9 files changed, 170 insertions(+), 15 deletions(-) create mode 100755 groups.pl create mode 100644 local/db.pm create mode 100644 local/user.pm create mode 100755 mydl.pl create mode 100755 pre_enqueue.pl diff --git a/enqueue.pl b/enqueue.pl index 5d53a28..1e5d30d 100755 --- a/enqueue.pl +++ b/enqueue.pl @@ -2,21 +2,27 @@ use strict; use CGI qw(:standard); use CGI::Carp 'fatalsToBrowser'; +use local::db; +use local::nzbget; +use local::user; +my $user = new local::user($ENV{REMOTE_USER}); +my $nzbget = new local::nzbget; -require RPC::XML; -require RPC::XML::Client; +my $cat = local::db::category->retrieve(name=>param('cat')); +die "Ungültige category" if not $cat; -my $cli = RPC::XML::Client->new('http://nzbget:tegbzn6789@127.0.0.1:6789/xmlrpc'); -my $resp = $cli->send_request('version') or die "Can't connect to nubget"; +my $category = $cat->name(); +my ($size) = param('description') =~ m/(.*)<\/b>/; +$size = 0; +my $download = local::db::download->insert({owner=>$user->get_id(),name=>param('name'),category=>param('cat'),description=>param('title'),size=>$size}); use LWP::Simple; my $nzb = get(param('url')); die "Couldn't get ".param('url') unless defined $nzb; use MIME::Base64; $nzb = encode_base64($nzb); -my $category = param('cat') || 'test'; -$resp = $cli->send_request('append',RPC::XML::string->new(param('name')),RPC::XML::string->new($category),RPC::XML::boolean->new(0),RPC::XML::string->new($nzb)); +my $resp = $nzbget->send_request('append',RPC::XML::string->new($download->download_id()),RPC::XML::string->new($category),RPC::XML::boolean->new(0),RPC::XML::string->new($nzb)); if ($resp->value) { diff --git a/groups.pl b/groups.pl new file mode 100755 index 0000000..4636c80 --- /dev/null +++ b/groups.pl @@ -0,0 +1,39 @@ +#!/usr/bin/perl +use strict; +use CGI qw(:standard); +use CGI::Carp 'fatalsToBrowser'; +use local::nzbget; +use local::db; +print header; +print start_html('nzbget groups'); + +my $cli = new local::nzbget; +print hr(); +print CGI::start_table(); +my $status = $cli->send_request('status') or die "Can't connect to nubget"; +#print Tr(td['download speed', 'cur', int($status->{DownloadRate}->value/(1024*1024)).'MB/s','average',int($status->{AverageDownloadRate}->value/(1024*1024)).'MB/s']); +print Tr(td['download speed', int($status->{DownloadRate}->value/(1024*1024)).'MB/s']); +print CGI::end_table(); +print hr(); + +my $row = $cli->send_request('listgroups') or die "Can't connect to nubget"; +print CGI::start_table(); +foreach my $value ( @$row) +{ + my ($download) = local::db::download->retrieve($value->{NZBNicename}->value) or die ' Error in groups'; + my $remaining=$value->{RemainingSizeMB}->value; + my $total=$value->{FileSizeMB}->value; + my $percent = int(100-100*$remaining/$total); + $download->size($total); + $download->update(); + print Tr(td([$download->category->name,$download->name,$download->owner->name,$percent.'%'])); + #foreach my $key (keys %$value) + #{ + # print Tr(td([$key,$value->{$key}->value])); + #} +} +; +print CGI::end_table(); + +print end_html; + diff --git a/local/db.pm b/local/db.pm new file mode 100644 index 0000000..344b5a8 --- /dev/null +++ b/local/db.pm @@ -0,0 +1,22 @@ +package local::db::dbi; +use base 'Class::DBI'; +local::db::dbi->connection('dbi:SQLite:/srv/nzbget/datenbank.sqlite', '', ''); + +package local::db::download; +use base 'local::db::dbi'; +local::db::download->table('download'); +local::db::download->columns(All => qw/download_id owner size time category name description/); +local::db::download->has_a(owner => 'local::db::owner'); +local::db::download->has_a(category => 'local::db::category'); + +package local::db::category; +use base 'local::db::dbi'; +local::db::category->table('category'); +local::db::category->columns(All => qw/category_id name/); +local::db::category->has_many(download => 'local::db::download'); + +package local::db::owner; +use base 'local::db::dbi'; +local::db::owner->table('owner'); +local::db::owner->columns(All => qw/owner_id name quoata quota_used/); +local::db::owner->has_many(download => 'local::db::download'); diff --git a/local/nzbindex.pm b/local/nzbindex.pm index 8352a5d..492ebb3 100755 --- a/local/nzbindex.pm +++ b/local/nzbindex.pm @@ -1,4 +1,4 @@ -package local::nzbget; +package local::nzbindex; require Exporter; use strict; use base "Exporter"; diff --git a/local/user.pm b/local/user.pm new file mode 100644 index 0000000..8e134a8 --- /dev/null +++ b/local/user.pm @@ -0,0 +1,34 @@ +package local::user; +require Exporter; +use strict; +use local::db; +use base "Exporter"; + +sub new +{ + my $invocant = shift; + my $class = ref($invocant) || $invocant; + # my $self = $class->SUPER::new(@_); + my $self=bless {}, $class; + ($self->{name})=@_; + my @user = local::db::owner->search(name => $self->{name}); + if (not @user) + { + push @user,local::db::owner->insert({name => $self->{name}}); + } + $self->{id}=$user[0]->owner_id(); + die 'Could not find you user' if not $self->{id}; + return $self; +} + +sub get_name +{ + my $self = shift; + return $self->{name}; +} + +sub get_id +{ + my $self = shift; + return $self->{id}; +} diff --git a/log.pl b/log.pl index 72b8c72..84ccbd1 100755 --- a/log.pl +++ b/log.pl @@ -8,14 +8,8 @@ use URI::Escape; print header; print start_html('nzbget status'); -print hr(); my $cli = new local::nzbget; print CGI::start_table(); -my $status = $cli->send_request('status') or die "Can't connect to nubget"; -print Tr(td['download speed', 'cur', int($status->{DownloadRate}->value/(1024*1024)).'MB/s','average',int($status->{AverageDownloadRate}->value/(1024*1024)).'MB/s']); -print CGI::end_table(); -print hr(); -print CGI::start_table(); my $resp = $cli->send_request('log',0,10) or die "Can't connect to nubget"; foreach my $row (@{ $resp->value}) { diff --git a/mydl.pl b/mydl.pl new file mode 100755 index 0000000..cfa3896 --- /dev/null +++ b/mydl.pl @@ -0,0 +1,33 @@ +#!/usr/bin/perl +use strict; +use CGI qw(:standard); +use CGI::Carp 'fatalsToBrowser'; +use local::nzbget; +use local::db; +use local::user; +my $user = new local::user($ENV{REMOTE_USER}); + + +print header; +print start_html('my downloads'); + +print CGI::start_table(); +my @downloads; +if (param('only_me')) +{ + @downloads = local::db::download->search(owner=>$user->get_id(),{ order_by => 'time DESC'}); +} else { + @downloads = local::db::download->retrieve_all({ order_by => 'time DESC'}); +} +foreach my $dl ( @downloads) +{ + print Tr(td([ + $dl->category->name,a({title=>$dl->description,href=>$dl->category->name.'/'.$dl->download_id},$dl->name),$dl->size.'MB' + + ])); +} +; +print CGI::end_table(); + +print end_html; + diff --git a/pre_enqueue.pl b/pre_enqueue.pl new file mode 100755 index 0000000..7b3df63 --- /dev/null +++ b/pre_enqueue.pl @@ -0,0 +1,28 @@ +#!/usr/bin/perl +use strict; +use CGI qw(:standard); +use CGI::Carp 'fatalsToBrowser'; +use local::db; + +my @cat = local::db::category->retrieve_all(); +die "Ungültige category" if not @cat; + +print header; +print start_html('nzbget pre_enqueue'); +print CGI::start_form(-action=>'/cgi-bin/nzbget/enqueue.pl'); +print table( + Tr(td(param('title'))), + Tr(td(param('description'))), +), +table( + Tr(td(['name',textfield('name').hidden('description',param('description')).hidden('url',param('url')).hidden('title',param('title'))])), + Tr(td(['category', + CGI::popup_menu( + -name=>'cat', + -values=>[0,map {$_->name()} @cat], + -labels => {0=>'---', map { ($_->category_id() => $_->name() ) } @cat} + )])), + Tr(td([submit()])), +); +print CGI::end_form; +print end_html(); diff --git a/search.pl b/search.pl index 66aafef..7767401 100755 --- a/search.pl +++ b/search.pl @@ -35,8 +35,7 @@ if ($param_obj->has_params()) print CGI::start_table(); foreach my $item (@search) { print Tr(td([ - a({href=>"./enqueue.pl?url=".uri_escape($item->{url})."&name=".uri_escape(param('q'))},$item->{title}).' '. - a({href=>"./enqueue.pl?url=".uri_escape($item->{url})."&name=".uri_escape(param('q'))."&cat=music"},'Music'). + a({href=>"./pre_enqueue.pl?url=".uri_escape($item->{url})."&name=".uri_escape(param('q'))."&description=".uri_escape($item->{description})."&title=".uri_escape($item->{title})},$item->{title}).' '. $item->{description}])); } print CGI::end_table(); -- cgit v1.2.3