Author: sparky
Date: Sun Oct 11 20:37:30 2009
New Revision: 10756

Modified:
   toys/rsget.pl/README.config
   toys/rsget.pl/RSGet/AutoUpdate.pm
   toys/rsget.pl/RSGet/Captcha.pm
   toys/rsget.pl/RSGet/Curl.pm
   toys/rsget.pl/RSGet/Dispatch.pm
   toys/rsget.pl/RSGet/FileList.pm
   toys/rsget.pl/RSGet/Get.pm
   toys/rsget.pl/RSGet/Main.pm
   toys/rsget.pl/RSGet/Tools.pm
Log:
- reworked configuration options
- slowly preparing for multiuser support


Modified: toys/rsget.pl/README.config
==============================================================================
--- toys/rsget.pl/README.config (original)
+++ toys/rsget.pl/README.config Sun Oct 11 20:37:30 2009
@@ -4,12 +4,17 @@
 #
 # Copy it to $HOME/.rsget.pl/config and make necessary adjustments.
 
-# backup allows 4 settings:
-#  copy,move - backups are always made
-#  move - make backup only if starting file from beggining (move old file)
-#  copy - make backup only if continuing partially-downloaded file (copy old)
-#  none - backups are never made
-backup = move
+# backups may be disabled or enabled for 3 different cases:
+#  done - make backup of file in donedir
+#  continue - make backup of file in workdir if continuing partial download
+#  scratch - make backup of file in workdir if downloading it from scratch
+#  no - backups are never made
+# make backups always:
+backup = done,continue,scratch
+# make backups of completed downloads only:
+#backup = done
+# never make make backups:
+#backup = no
 
 # for file FILE_NAME.EXT by default backups will be named as:
 # FILE_NAME-{N}.EXT where {N} is 1, 2, 3...
@@ -21,6 +26,18 @@
 # authentification
 http_port = 5666
 
+# require authentication for http:
+#  user: root
+#  password: qwerty
+http_pass = qwerty
+
+# Some services have no parallel-downloads limitation, set max slots
+# for such services. If you've got fast connection and only one
+# ip address / interface, increase this number to a large value.
+# Number of maximum connections is the number of max_slots multiplied
+# by number of ip addresses / interfaces.
+max_slots = 8
+
 # if you are blessed with multiple interfaces:
 #interfaces = eth0, tun0, tun1
 # same thing for multiple IP addresses:
@@ -43,7 +60,7 @@
 #use_svn = update
 
 # save erroneous pages (only useful for getter debugging):
-#errorlog = 1
+#debug = 1
 
 # be verbose (useful for debugging):
 #verbose = 2

Modified: toys/rsget.pl/RSGet/AutoUpdate.pm
==============================================================================
--- toys/rsget.pl/RSGet/AutoUpdate.pm   (original)
+++ toys/rsget.pl/RSGet/AutoUpdate.pm   Sun Oct 11 20:37:30 2009
@@ -8,12 +8,17 @@
 set_rev qq$Id$;
 
 def_settings(
-       use_svn => [ "Set to 'update' to automatically update rsget.pl 
components from SVN. " .
-               "Set to 'yes' to use downloaded components without updating 
first.",
-               "no", qr{no|yes|update} ],
-       svn_uri => [ "SVN path to rsget.pl source code.",
-               'http://svn.pld-linux.org/svn/toys/rsget.pl',
-               qr{(svn|https?)://.{4,}} ],
+       use_svn => {
+               desc => "Set to 'update' to automatically update rsget.pl 
components from SVN. " .
+                       "Set to 'yes' to use downloaded components without 
updating first.",
+               default => "no",
+               allowed => qr{no|yes|update},
+       },
+       svn_uri => {
+               desc => "SVN path to rsget.pl source code.",
+               default => 'http://svn.pld-linux.org/svn/toys/rsget.pl',
+               allowed => qr{(svn|https?)://.{4,}},
+       },
 );
 
 my @update_dirs = qw(data RSGet Get Link Video);

Modified: toys/rsget.pl/RSGet/Captcha.pm
==============================================================================
--- toys/rsget.pl/RSGet/Captcha.pm      (original)
+++ toys/rsget.pl/RSGet/Captcha.pm      Sun Oct 11 20:37:30 2009
@@ -6,6 +6,21 @@
 use RSGet::Tools;
 set_rev qq$Id$;
 
+=unused
+def_settings(
+       allow_captcha => {
+               desc => "Allow captchas which need to be solved manually.",
+               default => "http",
+               allowed => qr/(http|yes|no)/,
+               dynamic => {
+                       http => "Allow only if control page is opened.",
+                       yes => "Allow always",
+                       no => "Never allow",
+               },
+       },
+);
+=cut
+
 our %needed;
 our %solved;
 

Modified: toys/rsget.pl/RSGet/Curl.pm
==============================================================================
--- toys/rsget.pl/RSGet/Curl.pm (original)
+++ toys/rsget.pl/RSGet/Curl.pm Sun Oct 11 20:37:30 2009
@@ -13,13 +13,37 @@
 set_rev qq$Id$;
 
 def_settings(
-       backup => [ "Make backups if downloaded file exists.",
-       "copy,move", qr/copy,move|copy|move|no(ne)?/ ],
-       backup_suf => [ "Rename backup files with specified suffix. " .
-               "If none defined -N will be added to file name, without 
disrupting file extension.",
-               undef, qr/.+/ ],
-       outdir => [ "Output directory; where finished files are moved to.", 
'.', qr/.+/ ],
-       workdir => [ "Work directory; where unfinished files are stored.", '.', 
qr/.+/ ],
+       backup => {
+               desc => "Make backups if downloaded file exists.",
+               default => "done,continue,scratch",
+               allowed => qr/(no|(done|continue|scratch)(?:,(?2))*)/,
+               dynamic => {
+                       'done,continue,scratch' => "Always.",
+                       done => "Only if it would replace file in donedir.",
+                       'continue,scratch' => "Only if it whould replace file 
in workdir.",
+                       no => "Never.",
+               },
+               user => 1,
+       },
+       backup_suf => {
+               desc => "Rename backup files with specified suffix. " .
+                       "If none defined -N will be added to file name, without 
disrupting file extension.",
+               allowed => qr/\S*/,
+               dynamic => "STRING",
+               user => 1,
+       },
+       outdir => {
+               desc => "Output directory; where finished files are moved to.",
+               default => '.',
+               dynamic => "STRING",
+               user => 1,
+       },
+       workdir => {
+               desc => "Work directory; where unfinished files are stored.",
+               default => '.',
+               dynamic => "STRING",
+               user => 1,
+       },
 );
 
 

Modified: toys/rsget.pl/RSGet/Dispatch.pm
==============================================================================
--- toys/rsget.pl/RSGet/Dispatch.pm     (original)
+++ toys/rsget.pl/RSGet/Dispatch.pm     Sun Oct 11 20:37:30 2009
@@ -6,7 +6,12 @@
 set_rev qq$Id$;
 
 def_settings(
-       max_slots => [ "Number of slots (per IP) to use if getter has no 
limitation.", 8, qr/0*[1-9]\d*/ ],
+       max_slots => {
+               desc => "Number of slots (per IP) to use if getter has no 
limitation.",
+               default => 8,
+               allowed => qr/0*[1-9]\d*/,
+               dynamic => "NUMBER",
+       },
 );
 
 our %downloading;

Modified: toys/rsget.pl/RSGet/FileList.pm
==============================================================================
--- toys/rsget.pl/RSGet/FileList.pm     (original)
+++ toys/rsget.pl/RSGet/FileList.pm     Sun Oct 11 20:37:30 2009
@@ -7,8 +7,17 @@
 set_rev qq$Id$;
 
 def_settings(
-       list_lock => [ "If lock file exists, list file won't be updated.", 
'${dir}/.${file}.swp', qr/.+/ ],
-       list_file => [ "Use specified file as URI list.", undef, qr/.+/ ],
+       list_lock => {
+               desc => "If lock file exists, list file won't be updated.",
+               default => '${dir}/.${file}.swp',
+               allowed => qr/.+/,
+               user => 1,
+       },
+       list_file => {
+               desc => "Use specified file as URI list.",
+               allowed => qr/.+/,
+               user => 1,
+       }
 );
 
 my $file;

Modified: toys/rsget.pl/RSGet/Get.pm
==============================================================================
--- toys/rsget.pl/RSGet/Get.pm  (original)
+++ toys/rsget.pl/RSGet/Get.pm  Sun Oct 11 20:37:30 2009
@@ -8,8 +8,14 @@
 use RSGet::Wait;
 use URI;
 set_rev qq$Id$;
+
 def_settings(
-       errorlog => [ "Save errors.", 0, qr/\d/ ],
+       debug => {
+               desc => "Save errors.",
+               default => 0,
+               allowed => qr/\d/,
+               dynamic => "NUMBER",
+       },
 );
 
 BEGIN {
@@ -237,7 +243,7 @@
 {
        my $self = shift;
        my $msg = shift;
-       if ( $self->{body} and setting("errorlog") ) {
+       if ( $self->{body} and setting( "debug" ) ) {
                my $n = 0;
                my $name;
                do {

Modified: toys/rsget.pl/RSGet/Main.pm
==============================================================================
--- toys/rsget.pl/RSGet/Main.pm (original)
+++ toys/rsget.pl/RSGet/Main.pm Sun Oct 11 20:37:30 2009
@@ -21,12 +21,30 @@
 set_rev qq$Id$;
 
 def_settings(
-       interfaces => [ "Specify output interfaces or IP addresses.", undef, 
qr/.+/ ],
-       http_port => [ "Start HTTP server on specified port.", undef, qr/\d+/ ],
-       http_pass => [ "HTTP password, as plain text, user is 'root'.", undef, 
qr/\S+/ ],
-       verbose => [ "Verbosity level.", 0, qr/\d+/ ],
+       interfaces => {
+               desc => "Specify output interfaces or IP addresses.",
+       },
+       http_port => {
+               desc => "Start HTTP server on specified port.",
+               allowed => qr/\d+/,
+       },
+       http_pass => {
+               desc => "HTTP password, as plain text, user is 'root'.",
+               allowed => qr/\S+/,
+       },
+       verbose => {
+               desc => "Verbosity level.",
+               default => 0,
+               allowed => qr/\d+/,
+       },
+       userconfig => {
+               desc => "User configuration file.",
+               allowed => qr/.+/,
+       },
 );
 
+our %usettings;
+
 my $http = undef;
 sub init
 {
@@ -41,6 +59,7 @@
 
        $SIG{CHLD} = "IGNORE";
        maybe_update( $argv );
+       read_userconfig();
        RSGet::Line::init();
        print_settings() if verbose( 1 );
        RSGet::FileList::set_file();
@@ -77,8 +96,8 @@
                } else {
                        print $option . " " x ( $optlen - $l );
                }
-               my @text = split /\s+/, $main::def_settings{ $s }->[0];
-               my $defval = $main::def_settings{ $s }->[1];
+               my @text = split /\s+/, $main::def_settings{ $s }->{desc};
+               my $defval = $main::def_settings{ $s }->{default};
                push @text, "Default:", $defval if defined $defval;
                my $line = "";
                foreach my $word ( @text ) {
@@ -119,11 +138,12 @@
                        next;
                }
                my $value = $v->[0];
-               my $re = $def->[2];
-               unless ( $value =~ m/^$re$/ ) {
-                       warn "Setting '$s' has invalid value: '$value' -- 
defined in $v->[1].\n";
-                       $die = 1;
-                       next;
+               if ( my $re = $def->{allowed} ) {
+                       unless ( $value =~ m/^$re$/ ) {
+                               warn "Setting '$s' has invalid value: '$value' 
-- defined in $v->[1].\n";
+                               $die = 1;
+                               next;
+                       }
                }
        }
        die "ERROR: Found invalid settings.\n" if $die;
@@ -154,6 +174,36 @@
        }
 }
 
+sub read_userconfig
+{
+       my $cfg = setting( "userconfig" );
+       return unless $cfg;
+       die "Cannot read user config '$cfg' file\n" unless -r $cfg;
+
+       my $line = 0;
+       my $user = undef;
+       open F_IN, "<", $cfg;
+       while ( <F_IN> ) {
+               $line++;
+               next if /^\s*(?:#.*)?$/;
+               chomp;
+               if ( /^\s*\[([a-zA-Z0-9_]+)\]\s*$/ ) {
+                       $user = $1;
+                       $usettings{ $user } = {};
+                       next;
+               } elsif ( /^\s*([a-z_]+)\s*=\s*(.*?)\s*$/ ) {
+                       die "User not defined, at user config file, line 
($line):\n$_\n"
+                               unless $user;
+                       $usettings{ $user }->{$1} = [ $2, "user config file, 
line $line" ];
+                       next;
+               }
+               warn "Incorrect config line: $_\n";
+       }
+       close F_IN;
+
+
+}
+
 sub set_interfaces
 {
        my $ifs = shift;

Modified: toys/rsget.pl/RSGet/Tools.pm
==============================================================================
--- toys/rsget.pl/RSGet/Tools.pm        (original)
+++ toys/rsget.pl/RSGet/Tools.pm        Sun Oct 11 20:37:30 2009
@@ -130,10 +130,25 @@
 sub def_settings
 {
        my %s = @_;
+       my %options = (
+               desc => "Setting description.",
+               default => "Default value.",
+               allowed => "RegExp that defines allowed values.",
+               dynamic => "May be changed after start.",
+               user => "May be modified by user.",
+       );
        foreach my $k ( keys %s ) {
                my $v = $s{ $k };
-               die "Incorrect setting '$k' declaration\n"
-                       if ref $v ne "ARRAY" or scalar @$v != 3;
+               if ( ref $v ne "HASH" ) {
+                       die "Setting '$k' is not a HASH\n";
+               }
+               if ( not $v->{desc} ) {
+                       die "Setting '$k' is missing description\n";
+               }
+               foreach ( keys %$v ) {
+                       die "Setting '$k' has unknown option: $_\n"
+                               unless exists $options{ $_ };
+               }
                $main::def_settings{ $k } = $v;
        }
 }
@@ -143,7 +158,7 @@
        my $name = shift;
        die "Setting '$name' is not defined\n" unless exists 
$main::def_settings{ $name };
        return $main::settings{ $name }->[0] if exists $main::settings{ $name };
-       return $main::def_settings{ $name }->[1];
+       return $main::def_settings{ $name }->{default};
 }
 
 sub verbose
_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to