--- deliantra/Deliantra-Client/DC/Main.pm 2011/12/27 09:17:27 1.2
+++ deliantra/Deliantra-Client/DC/Main.pm 2011/12/31 04:23:42 1.6
@@ -19,6 +19,7 @@
use common::sense;
use Carp 'verbose';
+use Cwd ();
use EV;
BEGIN { *time = \&EV::time }
@@ -42,7 +43,15 @@
BEGIN {
$SIG{__DIE__} = sub {
- return if $^S;
+ return if $^S; # quick reject
+
+ # return if there are any eval contexts in the csall stack
+ for my $i (0..999) {
+ my ($sub, $is_require) = (caller $i)[3, 7]
+ or last;
+ return if $sub eq "(eval)" && !$is_require;
+ }
+
crash "CRASH/DIE: $_[0]" => 1;
DC::fatal Carp::longmess "$_[0]";
}
@@ -135,6 +144,7 @@
our $MUSIC_PLAYING_WIDGET;
our $LICENSE_WIDGET;
+our $DOWNLOADS_WIDGET;
our $PICKUP_PAGE;
our $INVENTORY_PAGE;
@@ -1133,7 +1143,7 @@
tooltip => "You can override the audio driver to use here. Leaving it empty will result "
. "in Deliantra picking one automatically. GNU/Linux users often prefer specific "
. "drivers though, and can experiment with alsa, dsp, esd, pulse, arts, nas "
- . "or other system-specific drivers. Selecting the wrong driver here will simply result"
+ . "or other system-specific drivers. Selecting the wrong driver here will simply result "
. "in no sound.",
on_changed => sub { my ($self, $value) = @_; $CFG->{audio_driver} = $value; 1 }
);
@@ -1843,12 +1853,12 @@
$table->add_at (1, $row++, new DC::UI::Label align => 0, text => $Deliantra::VARDIR, tooltip => "");
$table->add_at (0, $row , new DC::UI::Label align => 1, text => "Database Directory");
$table->add_at (1, $row++, new DC::UI::Label align => 0, text => $DC::DB::DBDIR, tooltip => "");
+ $table->add_at (0, $row , new DC::UI::Label align => 1, text => "Urlader (Prebuilt)");
+ $table->add_at (1, $row++, new DC::UI::Label align => 0, text => $ENV{URLADER_VERSION}, tooltip => "");
$table->add_at (0, $row , new DC::UI::Label align => 1, text => "Branch (Prebuilt)");
- $table->add_at (1, $row++, new DC::UI::Label align => 0, text => $::EXE_ID, tooltip => "");
+ $table->add_at (1, $row++, new DC::UI::Label align => 0, text => $ENV{URLADER_EXE_ID}, tooltip => "");
$table->add_at (0, $row , new DC::UI::Label align => 1, text => "Version (Prebuilt)");
- $table->add_at (1, $row++, new DC::UI::Label align => 0, text => $::EXE_VER, tooltip => "");
- $table->add_at (0, $row , new DC::UI::Label align => 1, text => "Update (Prebuilt)");
- $table->add_at (1, $row++, new DC::UI::Label align => 0, text => $::UPDPAR, tooltip => "");
+ $table->add_at (1, $row++, new DC::UI::Label align => 0, text => $ENV{URLADER_EXE_VER}, tooltip => "");
}
$vbox
@@ -2032,16 +2042,50 @@
my $vb = new DC::UI::VBox;
$vb->add (new DC::UI::FancyFrame
- label => "Currently playing music",
+ label => "Current background music",
child => new DC::UI::ScrolledWindow scroll_x => 1, scroll_y => 0,
child => ($MUSIC_PLAYING_WIDGET = new DC::UI::Label ellipsise => 0, fontsize => 0.8),
);
$vb->add (new DC::UI::FancyFrame
+ label => "Current downloads",
+ child => ($DOWNLOADS_WIDGET = new DC::UI::Table
+ expand => 1, fontsize => 0.8, padding_x => 4, padding_y => 4),
+ );
+
+ $DOWNLOADS_WIDGET->connect (visibility_change => sub {
+ my ($self) = @_;
+
+ delete $self->{updater};
+ return unless $_[1];
+
+ $self->{updater} = AE::timer 0, 1, sub {
+ $self->clear;
+
+ return unless $CONN;
+
+ my @nums = sort { $b <=> $a } keys %{ $CONN->{ix_recv_buf} };
+
+ $self->add_at (0, 0, new DC::UI::Label align => 1, text => "Face");
+ $self->add_at (1, 0, new DC::UI::Label align => 0, text => "Octets/Total");
+
+ for my $row (0 .. $#nums) {
+ my $num = $nums[$row];
+
+ my $total = length $CONN->{ix_recv_buf}{$num};
+ my $got = $total - $CONN->{ix_recv_ofs}{$num};
+
+ $self->add_at (0, $row + 1, new DC::UI::Label align => 1, text => $num, tooltip => "");
+ $self->add_at (1, $row + 1, new DC::UI::Label align => 0, text => "$got/$total", tooltip => "");
+ }
+ };
+ });
+
+ $vb->add (new DC::UI::FancyFrame
label => "Other media used in this session",
expand => 1,
child => ($LICENSE_WIDGET = new DC::UI::TextScroller
- expand => 1, fontsize => 0.8, padding_x => 4, padding_y => 4),
+ expand => 1, fontsize => 0.8, padding_x => 4, padding_y => 4),
);
$vb
@@ -2840,8 +2884,11 @@
}
}
- $ENV{FONTCONFIG_FILE} = DC::find_rcfile "fonts/fonts.conf";
- $ENV{FONTCONFIG_DIR} = DC::find_rcfile "fonts";
+ # fontconfig doesn't support relative paths anymore, so use abs_path and keep fingers crossed
+ # these are ignored under windows, for some reason, and thus set in the loader
+ $ENV{FONTCONFIG_FILE} = "fonts.conf";
+ $ENV{FONTCONFIG_PATH} = Cwd::abs_path DC::find_rcfile "fonts";
+ $ENV{FONTCONFIG_DIR} = $ENV{FONTCONFIG_PATH}; # helps with older versions
{
my @fonts = map DC::find_rcfile "fonts/$_", qw(