~ubuntu-branches/ubuntu/trusty/gmusicbrowser/trusty-proposed

« back to all changes in this revision

Viewing changes to gmusicbrowser_songs.pm

  • Committer: Package Import Robot
  • Author(s): Jackson Doak
  • Date: 2014-03-08 06:19:26 UTC
  • mfrom: (1.2.8)
  • Revision ID: package-import@ubuntu.com-20140308061926-853dpa53gr1yy8lu
Tags: 1.1.12-1
* New upstream release
* debian/rules: Use make distclean rather than make clean
* debian/control:
  - Add myself to uploaders
  - Add build-depends on markdown

Show diffs side-by-side

added added

removed removed

Lines of Context:
3364
3364
use base 'SongArray';
3365
3365
our %Filter;
3366
3366
our %Sort;
 
3367
our %needupdate;
 
3368
 
3367
3369
INIT
3368
3370
{ ::Watch(undef, SongsChanged   => \&SongsChanged_cb);
3369
3371
  ::Watch(undef, SongsAdded     => \&SongsAdded_cb);
3389
3391
{       my $self=$_[0];
3390
3392
        delete $Filter{$self};
3391
3393
        delete $Sort{$self};
 
3394
        delete $needupdate{$self};
3392
3395
        @list_of_AutoUpdate= grep defined, @list_of_AutoUpdate;
3393
3396
        ::weaken($_) for @list_of_AutoUpdate;
3394
3397
        $self->SUPER::DESTROY;
3405
3408
                @$self=@$list;
3406
3409
                ::HasChanged('SongArray',$self,'update',\@old);
3407
3410
        }
 
3411
        else { ::HasChanged('SongArray',$self,'mode'); }
3408
3412
}
3409
3413
sub Sort
3410
3414
{       my ($self,$sort)=@_;
3423
3427
sub SongsAdded_cb
3424
3428
{       my (undef,$IDs)=@_;
3425
3429
        for my $self (grep defined, @list_of_AutoUpdate)
3426
 
        {       my $filter=$Filter{$self};
 
3430
        {       next if ($needupdate{$self}||0)>1;
 
3431
                my $filter=$Filter{$self};
3427
3432
                my ($greponly)=$filter->info;
3428
3433
                if ($greponly)
3429
3434
                {       my $toadd=$filter->filter($IDs);
3436
3441
                        }
3437
3442
                }
3438
3443
                else
3439
 
                {       $self->_update_full;
 
3444
                {       $needupdate{$self}=2;
 
3445
                        ::IdleDo('7_autoupdate_update'.$self,6000, \&delayed_update_cb,$self);
 
3446
                }
 
3447
        }
 
3448
}
 
3449
sub delayed_update_cb
 
3450
{       my $self=shift;
 
3451
        my $need= delete $needupdate{$self};
 
3452
        return unless $need;
 
3453
        if ($need>1) { $self->_update_full }
 
3454
        else
 
3455
        {       my @old=@$self;
 
3456
                Songs::SortList($self,$Sort{$self});
 
3457
                if ("@old" ne "@$self") #only update if there was a change
 
3458
                {       ::HasChanged('SongArray',$self,'update',\@old);
3440
3459
                }
3441
3460
        }
3442
3461
}
3443
3462
sub _update_full
3444
3463
{       my $self=shift;
 
3464
        delete $needupdate{$self};
3445
3465
        my @old=@$self;
3446
3466
        my $list=$Filter{$self}->filter;
3447
3467
        Songs::SortList($list,$Sort{$self});
3452
3472
sub SongsChanged_cb
3453
3473
{       my (undef,$IDs,$fields)=@_;
3454
3474
        for my $self (grep defined, @list_of_AutoUpdate)
3455
 
        {       if ($Filter{$self}->changes_may_affect($IDs,$fields,$self))     #re-filter and re-sort
3456
 
                {       $self->_update_full;
3457
 
                }
3458
 
                elsif (::OneInCommon($fields,Songs::SortDepends($Sort{$self}))) #re-sort
3459
 
                {       $self->Sort($Sort{$self});
3460
 
                }
 
3475
        {       next if ($needupdate{$self}||0)>1;
 
3476
                my $delayed;
 
3477
                if ($Filter{$self}->changes_may_affect($IDs,$fields,$self))
 
3478
                {       #re-filter and re-sort
 
3479
                        $needupdate{$self}=2;
 
3480
                        $delayed=1;
 
3481
                }
 
3482
                elsif ($self->AreIn($IDs) && ::OneInCommon($fields,Songs::SortDepends($Sort{$self})))
 
3483
                {       #re-sort
 
3484
                        $needupdate{$self}=1;
 
3485
                        $delayed=1;
 
3486
                }
 
3487
                ::IdleDo('7_autoupdate_update'.$self,6000, \&delayed_update_cb,$self) if $delayed;
3461
3488
        }
3462
3489
}
3463
3490
 
3498
3525
        ::QHasChanged('Sort');
3499
3526
        ::QHasChanged('Pos');
3500
3527
}
3501
 
sub SetSortAndFilter    #FIXME could be optimized
 
3528
sub SetSortAndFilter    #FIXME could be optimized #FIXME only called from a songtree/songlist for now, and as these calls are usually not about setting the level 0 filter, it doesn't actually change the filter for now, just the list, as it needs multi-level filters to work properly
3502
3529
{       my ($self,$sort,$filter)=@_;
3503
 
        $self->SetFilter($filter);
 
3530
        $self->Replace($filter->filter,filter=>$filter); #$self->SetFilter($filter); #FIXME use SetFilter once multi-level filters are implemented
3504
3531
        $self->Sort($sort);
3505
3532
}
3506
3533
sub Replace