Changeset 3227


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.

Location:
extras/pLoader/trunk/src/Uploader/GUI
Files:
3 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 {
  • extras/pLoader/trunk/src/Uploader/GUI/wxFrameAUI.pm

    r3198 r3227  
    298298use File::Spec;
    299299use Wx::Locale qw/:default/;
     300use Encode qw/encode decode is_utf8/;;
    300301
    301302
     
    333334          thumbnail_settings
    334335          preview_settings
    335           is_connected
    336 
     336          toolbar
    337337      /;
    338338__PACKAGE__->mk_accessors( @properties );
     
    346346          EVT_LIST_ITEM_SELECTED
    347347          EVT_TREE_ITEM_RIGHT_CLICK
    348           EVT_LIST_KEY_DOWN       
     348          EVT_LIST_KEY_DOWN
     349          EVT_UPDATE_UI       
    349350      /;
    350351     
     
    373374                                      wxDEFAULT_FRAME_STYLE|wxMAXIMIZE
    374375                                   );
    375     $self->is_connected(
    376         $params->{is_connected}
    377     );
    378376    $self->pwg( $params->{pwg} );
    379377    $self->imagelist( $params->{imagelist} );
     
    467465            },
    468466            {
    469                 label => "Comment :",
     467                label => gettext("Comment :"),
    470468                value => sub { $self->imagelist->current_image->site_comment(@_) },
    471469                type  => "LongText",
    472470            },
    473471            {
    474                 label => "Author :",
     472                label => gettext("Author :"),
    475473                value => sub { $self->imagelist->current_image->site_author(@_) },
    476474            },
    477475            {
    478                 label    => "File name :",
     476                label    => gettext("File name :"),
    479477                value    => sub { $self->imagelist->current_image->file(@_) },
    480478                readonly => 1,
    481479            },
    482480            {
    483                 label    => "Create date :",
     481                label    => gettext("Create date :"),
    484482                value    => sub { $self->imagelist->current_image->create_date(@_) },
    485483                readonly => 1,
     
    699697    $self->init_aui;
    700698    $self->init_dnd_targets;
    701 
    702699    if( $self->imagelist->wx_thumb_imglist->GetImageCount){
     700printf("%s images\n", $self->imagelist->wx_thumb_imglist->GetImageCount);
    703701        $self->ShowImageViewer;
    704702       
     
    876874
    877875sub init_aui {
    878     my ( $self ) = @_; 
     876    my ( $self ) = @_;
     877   
     878    my $url = wxTheApp->site_url;
     879   
     880    $url = gettext("empty - work Offline") if wxTheApp->use_offline;
    879881
    880882    $self->manager->AddPane
     
    884886    $self->manager->AddPane
    885887      ( $self->create_tree, Wx::AuiPaneInfo->new->Name( "categories" )->Caption(
    886           sprintf("%s - %s", gettext("Piwigo categories"), wxTheApp->site_url )
     888          sprintf("%s - %s", gettext("Piwigo categories"), $url )
    887889      )
    888890        ->Right->Position( 0 )->Resizable->CloseButton(0) );
     
    895897    $self->_init_aui_settings_panels;
    896898
    897     my $tb = $self->create_toolbar;
     899    $self->toolbar(
     900        $self->create_toolbar
     901    );
    898902
    899903    $self->manager->AddPane
    900       ( $tb, Wx::AuiPaneInfo->new->Name( "tb1" )->Caption( gettext("Tools") )
    901         ->ToolbarPane->Top->Row( 1 )->LeftDockable( 0 )->RightDockable( 0 ) ) if defined $tb;
     904      ( $self->toolbar, Wx::AuiPaneInfo->new->Name( "tb1" )->Caption( gettext("Tools") )
     905        ->ToolbarPane->Top->Row( 1 )->LeftDockable( 0 )->RightDockable( 0 ) ) if defined $self->toolbar;
    902906
    903907    $self->manager->Update;
     
    921925    my ( $self ) = @_;
    922926
     927    $self->toolbar->EnableTool(104, 0 );
    923928    $self->manager->GetPane("global_settings")->Show(1);
    924929    $self->manager->Update();   
     
    10761081
    10771082    $self->tree->SetImageList( $self->treeimglist );
    1078     $self->populate_tree_categories if $self->is_connected;
     1083    $self->populate_tree_categories if !wxTheApp->use_offline;
    10791084    $self->tree ;
    10801085}
     
    11981203    EVT_LIST_KEY_DOWN($self, $self->imageviewer, \&OnImageViewerKeyDown) ;
    11991204    EVT_CLOSE( $self, \&OnClose );
     1205    Wx::Event::EVT_UPDATE_UI( $self, $self, \&OnUpdateUI );
    12001206
    12011207
     
    12251231}
    12261232
     1233sub OnUpdateUI {
     1234    my( $self, $event ) = @_;
     1235   
     1236    if( $self->manager ){
     1237        if($self->manager->GetPane("global_settings")->IsShown){
     1238            $self->toolbar->EnableTool(104, 0);                 
     1239        }
     1240        else{
     1241            $self->toolbar->EnableTool(104, 1);                 
     1242        }
     1243    }
     1244}
     1245
    12271246sub OnRemoveImages {
    12281247    my( $self, $event ) = @_;
     
    12471266    $self->progressdlg->Show(1);
    12481267    Wx::Yield();
     1268   
     1269    my $files = [
     1270        map {
     1271            encode('iso-8859-1', $_)
     1272        }@$file_paths   
     1273    ];
     1274   
     1275    # last is first !
     1276    if ( scalar @$files > 1 ){
     1277        my $first = shift @$files;
     1278        push @$files, $first;   
     1279    }
     1280    #print Dumper $files;
    12491281
    12501282    $self->imagelist->SetNewFiles(
    1251         $file_paths
     1283        $files
    12521284    );
    12531285
     
    13351367    my( $self, $event ) = @_;
    13361368 
    1337     my $image = $self->imagelist->images->[$event->GetIndex];
     1369    my $image = $self->imagelist->GetImage($event->GetIndex);
    13381370    $image->site_name(
    13391371        $event->GetLabel
     
    13891421    my( $self, $event ) = @_;
    13901422
    1391 #    eval {
     1423    eval {
    13921424        $self->ProcessImageSelection();   
    1393 #    };
     1425    };
    13941426}
    13951427
     
    14951527        )
    14961528    ) if defined $self->imagelist->current_image->wx_thumb_file;
    1497    
     1529    print $self->imagelist->current_image->wx_thumb_file, " added with index ", $indx, "\n";   
    14981530    $self->imageviewer->Refresh(
    14991531        $wximagelist
     
    15091541    my ( $self ) = @_;
    15101542
    1511     return if !scalar @{$self->imagelist->images};
     1543    return if !scalar @{$self->imagelist->sums};
    15121544
    15131545    if( scalar @{$self->imagelist->categories} ){
     
    15181550            Uploader::GUI::wxImageProcessingProgressDlg->new(
    15191551                {
    1520                     title => gettext("Image upload progress information"),
     1552                    title    => gettext("Image upload progress information"),
    15211553                    bt_label => gettext("Cancel upload"),
    15221554                 }
     
    15871619
    15881620    # allways store
    1589    
     1621 
    15901622    wxTheApp->StoreConnectionProperties;
    15911623   
    15921624    $self->imagelist->Store;
     1625    wxTheApp->login_dlg->Destroy;       
    15931626    $self->Destroy;
    15941627}
     
    16191652    (
    16201653        [
    1621             101, gettext("Add photo to selection"), '../res/tb_add.png', wxBITMAP_TYPE_PNG, 1, '../res/tb_add.png', gettext("Add photo to selection for resizing and uploading")
     1654            101,
     1655            gettext("Add photo to selection"),
     1656            '../res/tb_add.png',
     1657            wxBITMAP_TYPE_PNG,
     1658            1,
     1659            '../res/tb_add.png',
     1660            gettext("Add photo to selection for resizing and uploading")
    16221661        ],
    16231662        [
    1624             102, gettext("Remove photo from selection"), '../res/tb_remove.png', wxBITMAP_TYPE_PNG, 1, '../res/tb_remove.png',gettext("Remove photo from selection. Files are not deleted ")
     1663            102,
     1664            gettext("Remove photo from selection"),
     1665            '../res/tb_remove.png',
     1666            wxBITMAP_TYPE_PNG,
     1667            1,
     1668            '../res/tb_remove.png',
     1669            gettext("Remove photo from selection. Files are not deleted ")
    16251670        ],
    16261671        [
    1627             103, gettext("Upload to Piwigo"), '../res/tb_upload.png', wxBITMAP_TYPE_PNG, 1, '../res/tb_upload.png',gettext("Upload photos to Piwigo.")
     1672            103,
     1673            gettext("Upload to Piwigo"),
     1674            '../res/tb_upload.png',
     1675            wxBITMAP_TYPE_PNG,
     1676            wxTheApp->use_offline ? 0 : 1,
     1677            '../res/tb_upload.png',
     1678            gettext("Upload photos to Piwigo.")
    16281679        ],
    16291680        [
    1630             104, gettext("Global settings"), '../res/tb_settings.png', wxBITMAP_TYPE_PNG, 1, '../res/tb_settings.png',gettext("Change global settings.")
     1681            104,
     1682            gettext("Global settings"),
     1683            '../res/tb_settings.png',
     1684            wxBITMAP_TYPE_PNG,
     1685            0,
     1686            '../res/tb_settings.png',
     1687            gettext("Change global settings.")
    16311688        ],
    16321689        [
    1633             105, gettext("Language choice"), '../res/tb_i18n.png', wxBITMAP_TYPE_PNG, 1, '../res/tb_i18n.png',gettext("Language choice")
     1690            105,
     1691            gettext("Language choice"),
     1692            '../res/tb_i18n.png',
     1693            wxBITMAP_TYPE_PNG,
     1694            1,
     1695            '../res/tb_i18n.png',
     1696            gettext("Language choice")
    16341697        ],
    16351698   
     
    17001763  $self->frame->SetNewFiles($files) ;
    17011764}
     1765
     1766
     1767
    17021768
    170317691;
  • extras/pLoader/trunk/src/Uploader/GUI/wxLoginDlg.pm

    r2597 r3227  
    3939           username
    4040           password
     41           use_offline
    4142      /
    4243);
     
    5253    # load controls
    5354    &main::Login($self, 1);
     55
     56    $self->use_offline(
     57        $params->{use_offline}
     58    );
    5459   
    5560    $self->url(
     
    9196    EVT_BUTTON( $self, $main::ID_PWG_OK, \&OnLoginOK );
    9297    EVT_BUTTON( $self, $main::ID_PWG_CANCEL, \&OnLoginCancel );
     98    EVT_BUTTON( $self, $main::ID_PWG_OFFLINE, \&OnLoginOffline );
    9399   
    94100       
    95101}
    96102
     103sub OnLoginOffline {
     104    my ( $self, $event ) = @_;
     105    $self->use_offline->(1);
     106       
     107    $self->EndModal(2);
     108}
    97109
    98110
Note: See TracChangeset for help on using the changeset viewer.