--- deliantra/Deliantra-Client/DC/MapWidget.pm 2006/10/01 14:48:51 1.83 +++ deliantra/Deliantra-Client/DC/MapWidget.pm 2006/10/01 18:17:38 1.84 @@ -80,10 +80,69 @@ local $ENV{CFPLUS_UPLOAD} = $::CONN->{upload}; local $ENV{CROSSFIRE_MAPDIR} = $::CONN->{cvs_root}; -# CFPlus::set_proxy; + CFPlus::set_proxy; - # TODO: move into editor - require LWP::Simple; + my $map = "map:$::CONN->{map_info}[0]"; + + if (fork == 0) { + $SIG{__DIE__} = sub { + warn "@_"; + CFPlus::_exit 99; + }; + + # TODO: move into editor + require LWP::UserAgent; + + my $ua = LWP::UserAgent->new ( + agent => "cfplus $CFPlus::VERSION", + keep_alive => 1, + env_proxy => 1, + ); + + if ($map =~ /^map:(.*)/) { + my $mapname = $1; + # try to get the most recent head revision, what a hack + my $log = $ua->get ("$ENV{CROSSFIRE_MAPDIR}/$mapname?view=log&logsort=rev")->decoded_content; + + if ($log =~ /\?rev=(\d+\.\d+)"/) { + my $rev = $1; + my $map = $ua->get ("$ENV{CROSSFIRE_MAPDIR}/$mapname?rev=$rev")->decoded_content; + warn "revision is $rev " .(length $map)."\n";#d# + + # now upload it + my $comment = "some comment"; + + require HTTP::Request::Common; + + my $res = $ua->post ( + $ENV{CFPLUS_UPLOAD}, + Content_Type => 'multipart/form-data', + Content => [ + path => $mapname, + mapdir => $ENV{CROSSFIRE_MAPDIR}, + map => $map, + revision => $rev, + cf_login => $ENV{CFPLUS_LOGIN}, + cf_password => $ENV{CFPLUS_PASSWORD}, + comment => "", + ] + ); + + if ($res->is_error) { + # fatal condition + warn $res->status_line; + } else { + # script replies are marked as {{..}} + my @msgs = $res->decoded_content =~ m/\{\{(.*?)\}\}/g; + warn map "$_\n", @msgs; + } + } else { + # error, could not detect revision + } + } + + CFPlus::_exit; + } } sub invoke_button_down { @@ -136,10 +195,12 @@ sub { $::PICKUP_ENABLE->toggle } ], $::CONN && length $::CONN->{cvs_root} - ? ["Edit this map (" . (CFPlus::asxml $::CONN->{map_info}[0]) . ")", \&editor_invoke] + ? ["Edit this map (" . (CFPlus::asxml $::CONN->{map_info}[0]) . ")", + \&editor_invoke] : (), $::CONN && length $::CONN->{test_server} - ? ["Login on Test Server", \&test_server_login] + ? ["Login on Test Server (" . (CFPlus::asxml $::CONN->{test_server}) . ")", + \&test_server_login] : (), ["Quit", sub {