Ignore:
Timestamp:
Mar 29, 2009, 12:51:40 PM (15 years ago)
Author:
ronosman
Message:

Feature 955 added : add a "Work Offline" mode to pLoader login.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • extras/pLoader/trunk/src/Uploader/GUI/wxApp.pm

    r3198 r3227  
    302302          locale
    303303          current_language
     304          version
     305          imagelist_version
     306          use_offline
     307          login_dlg
    304308      /
    305309);
     
    313317}
    314318
     319
    315320sub OnInit {
    316321    my( $self ) = @_;
     322   
     323    $self->version(
     324        '2.0.1a'
     325    );
     326   
     327    # to check if we can use stored cache
     328    $self->imagelist_version(
     329        '2'
     330    );
    317331
    318332    Wx::InitAllImageHandlers();
     
    353367        $self->{current_language}||wxLANGUAGE_ENGLISH
    354368    );
    355 
    356369   
    357370    $self->init_locale;
    358    
    359 
    360 
    361     my $ok = $self->Login();
     371
     372    my $not_exit = $self->Login();
    362373    # user pressed OK
    363     if($ok){
    364         $self->pwg(
    365             # get these parameters from dialog or from file
    366             Uploader::PWG->new(
    367                 {
    368                     site_url       => $self->site_url,
    369                     site_username  => $self->site_username,
    370                     site_password  => $self->site_password,
    371                 }
    372             )
    373         );
    374      
    375    
     374    if($not_exit){
     375        if( !$self->use_offline ){
     376            while( $not_exit and !$self->_is_connected ){
     377                $not_exit = $self->Login();
     378            }
     379        }
    376380        $self->_init_imagelist;
    377381        $self->_init_thumbimagelist;
    378        
    379382        $self->_init_frame;
    380383    }
    381384
    382     $ok;
    383 }
     385    $not_exit;
     386}
     387
     388
     389sub _is_connected {
     390    my ( $self ) = @_;
     391
     392    my $is_connected;
     393
     394    if($self->pwg->login_result->{stat} eq 'ok'){
     395        $is_connected = 1;
     396    }
     397    else{
     398        Wx::MessageBox(
     399            sprintf(
     400                "%s\n\n%s %s %s",
     401                $self->pwg->login_result->{message},
     402                gettext("Connection to"),
     403                $self->site_url,
     404                gettext("failed"),
     405            ),
     406            gettext("Piwigo login error"),
     407            wxOK | wxICON_EXCLAMATION,
     408        );
     409    }
     410   
     411    $is_connected;
     412}
     413
    384414
    385415my $locale;
     
    397427    $locale->AddCatalogLookupPathPrefix( '../locale');
    398428    if(!$locale->AddCatalog( 'pLoader.mo' )){
    399         print "Cannot find translation catalog files. Use default language\n";
     429        Wx::LogMessage gettext("Cannot find translation catalog files. Use default language");
    400430    }
    401431       
     
    428458    my $stored_imagelist;
    429459   
     460    my $use_new_imagelist;
     461   
    430462    if( -e $self->storable_file ){
    431463        eval {
     
    434466        if($@){
    435467            Wx::LogMessage(
    436                 "An error has occured. Can not read %s\n%s",
     468                gettext("An error has occured. Can not read %s\n%s"),
    437469                $self->storable_file,
    438470                $@
    439471            );
    440             $stored_imagelist = $self->_default_imagelist_params ;
     472            $use_new_imagelist = 1 ;
    441473        }
     474        # should have a valid imagelist
     475        else{
     476            $use_new_imagelist = 1 unless $self->imagelist_version eq $stored_imagelist->{imagelist_version};
     477            if($use_new_imagelist){
     478                Wx::LogMessage(gettext("pLoader has to reset image cache."));
     479            }
     480        }
    442481    }
    443482    else{
     483        $use_new_imagelist = 1 ;
     484    }
     485
     486    if($use_new_imagelist){
    444487        $stored_imagelist = $self->_default_imagelist_params ;
    445488    }
     489
    446490
    447491    $self->imagelist(
     
    449493            $stored_imagelist
    450494        )
     495    );
     496
     497    $self->imagelist->RescaleCallback(
     498        sub { $self->RescaleImage(@_) }
    451499    );
    452500
     
    483531        count            => 0,
    484532        storable_file    => $self->storable_file,
    485         images           => [],
    486533        userdata_dir     => $self->userdata_dir,
    487534        default_name_prefix => 'Photo',
    488         upload_rejects  =>  [],
    489         ResizeCallback  => sub { $self->ResizeImage(@_) },
     535        upload_rejects   =>  [],
     536        image_sums       => {},
     537        sums             => [],
     538        version          => $self->version,
     539        imagelist_version => $self->imagelist_version,
     540        RescaleCallback  => sub { $self->RescaleImage(@_) },
     541        ResizeCallback   => sub { $self->ResizeImage(@_) },
    490542    };
    491543
     
    496548    my ( $self ) = @_; 
    497549
    498     my $dlg = Uploader::GUI::wxLoginDlg->new(
    499         {
    500             title         => gettext("Piwigo login"),
    501             site_url      => sub { $self->site_url(@_) },
    502             site_username => sub { $self->site_username(@_) }, 
    503             site_password => sub { $self->site_password(@_) }, 
    504         }
    505     );
     550    $self->login_dlg(
     551        Uploader::GUI::wxLoginDlg->new(
     552            {
     553                title         => gettext("Piwigo login"),
     554                site_url      => sub { $self->site_url(@_) },
     555                site_username => sub { $self->site_username(@_) },     
     556                site_password => sub { $self->site_password(@_) },
     557                use_offline   => sub { $self->use_offline(@_) },       
     558            }
     559        )
     560    ) unless $self->login_dlg;
    506561
    507562    my $icon = Wx::Icon->new();
    508563    $icon->LoadFile('../res/favicon.ico', wxBITMAP_TYPE_ICO);
    509     $dlg->SetIcon($icon);       
    510 
    511    
    512     my $rval = $dlg->ShowModal();
    513     $dlg->Destroy;
     564    $self->login_dlg->SetIcon($icon);   
     565
     566   
     567    my $rval = $self->login_dlg->ShowModal();
     568    $self->login_dlg->Show(0);
     569
     570    $self->pwg(
     571        # get these parameters from dialog or from file
     572        Uploader::PWG->new(
     573            {
     574                site_url       => $self->site_url,
     575                site_username  => $self->site_username,
     576                site_password  => $self->site_password,
     577            }
     578        )
     579    );
    514580   
    515581    $rval;
     
    605671   
    606672    my $wximagelist = $self->imagelist->wx_thumb_imglist;
    607     my $images = $self->imagelist->images;
     673    my $sums = $self->imagelist->sums;
    608674
    609675    map {
     676        my $image = $self->imagelist->image_sums->{$_};
     677
    610678        $wximagelist->Add(
    611679            Wx::Bitmap->new(
    612                 $_->wx_thumb_file,
     680                $image->wx_thumb_file,
    613681                $self->GetWxBitmapType($self->imagelist->type),
    614682            )
    615683        );
    616684    }
    617     @$images ;
     685    @$sums ;
    618686
    619687}
     
    626694
    627695
    628 sub ResizeImage {
     696sub RescaleImage {
    629697    my ( $self, $image_file, $image_file_out, $type, $ratio, $width, $height, $quality ) = @_;
    630698   
     
    682750    )){
    683751        Wx::LogMessage(
    684             "An error has occured. Can not save file %s",
     752            gettext("An error has occured. Can not save file %s"),
    685753            $image_file_out,
    686754        )
     
    688756}
    689757
     758sub ResizeImage {
     759    my ( $self, $image_file, $image_file_out, $type, $width, $height, $quality ) = @_;
     760   
     761
     762    my $image = Wx::Image->new(
     763            $image_file,
     764            $self->GetWxBitmapType($type),
     765            0
     766    );
     767
     768    my $w;
     769    my $h;
     770
     771    my $img_w = $image->GetWidth;
     772    my $img_h = $image->GetHeight;
     773   
     774        # portrait
     775        if( $img_w < $img_h ){
     776            $w = $height;
     777        }
     778        else{
     779            $w = $width;
     780        }
     781        # to respect aspect ratio
     782        $h = sprintf(
     783            "%.0f",
     784            ($w*$img_h)/$img_w
     785        );
     786
     787   
     788
     789    $image->Rescale(
     790        $w,
     791        $h,
     792        wxIMAGE_QUALITY_HIGH
     793    );
     794
     795    $image->Resize(
     796        [ $width, $height ], [ 0, 20],
     797    );
     798   
     799    $quality ||= 90;
     800   
     801    $image->SetOption(
     802        "quality",
     803        $quality
     804    );
     805   
     806    if(!$image->SaveFile(
     807        $image_file_out,
     808        $self->GetWxBitmapType($type),
     809    )){
     810        Wx::LogMessage(
     811            gettext("An error has occured. Can not save file %s"),
     812            $image_file_out,
     813        )
     814    };
     815}
     816
     817
     818
     819
    690820sub _init_frame {
    691     my ( $self ) = @_ ;
     821    my ( $self ) = @_
    692822
    693823    my $config = Wx::ConfigBase::Get;
     
    699829    my $sv = $config->ReadInt( "splitVertical", 150 );
    700830    my $sh = $config->ReadInt( "splitHorizontal", 300 );
    701        
    702     my $url;
    703     my $is_connected;
    704     if($self->pwg->login_result->{stat} eq 'ok'){
    705         $url = $self->site_url;
    706         $is_connected = 1;   
    707     }
    708     else{
    709         $url = gettext("Not connected");
    710         Wx::MessageBox(
    711             sprintf(
    712                 "%s\n\n%s %s %s",
    713                 $self->pwg->login_result->{message},
    714                 gettext("Connection to"),
    715                 $self->site_url,
    716                 gettext("failed"),
    717             ),
    718             gettext("Piwigo login error"),
    719             wxOK | wxICON_EXCLAMATION,
    720         );
    721     }   
    722        
     831   
     832    my $url = $self->site_url;
     833   
     834    if($self->use_offline){
     835        $url = gettext("Work Offline");
     836    }
    723837
    724838    my ( $frame ) = Uploader::GUI::wxFrameAUI->new(
     
    728842            width     => $w,
    729843            height    => $h,
    730             title     => "pLoader - Piwigo uploader 2.0.1a - [$url]" ,
     844            title     => sprintf("pLoader - Piwigo uploader %s - [%s]", $self->version, $url),
    731845            pwg       => $self->pwg,
    732846            imagelist => $self->imagelist,
    733             is_connected => $is_connected,
    734847        }
    735848    );
     
    743856    $icon->LoadFile('../res/favicon.ico', wxBITMAP_TYPE_ICO);
    744857    $frame->SetIcon($icon);     
    745 
    746 
    747     return 1;
    748 }
    749 
     858}
    750859
    751860sub _readParams {
Note: See TracChangeset for help on using the changeset viewer.