500 |readBlock| |
500 |readBlock| |
501 |
501 |
502 readTask notNil ifTrue: [readTask terminate]. |
502 readTask notNil ifTrue: [readTask terminate]. |
503 readBlock := |
503 readBlock := |
504 [ |
504 [ |
505 |dir currentFilenames oldListOfFiles| |
505 |dir currentFilenames oldListOfFiles listOfFiles| |
506 |
506 |
507 dir := directory asFilename. |
507 dir := directory asFilename. |
508 currentFilenames := OrderedCollection new. |
508 currentFilenames := OrderedCollection new. |
509 (dir isReadable and:[dir isExecutable]) ifTrue: [ |
509 (dir isReadable and:[dir isExecutable]) ifTrue: [ |
510 self listOfFileFilters value do: |
510 self listOfFileFilters value do: |
515 currentFilenames add: file |
515 currentFilenames add: file |
516 ] |
516 ] |
517 ]. |
517 ]. |
518 ]. |
518 ]. |
519 ]. |
519 ]. |
520 oldListOfFiles := self listOfFiles copy. |
520 listOfFiles := self listOfFiles. |
|
521 |
|
522 oldListOfFiles := listOfFiles copy. |
521 (currentFilenames asSortedCollection: [:f1 :f2| f1 baseName < f2 baseName]) asSet |
523 (currentFilenames asSortedCollection: [:f1 :f2| f1 baseName < f2 baseName]) asSet |
522 do: [:fileName| |
524 do: [:fileName| |
523 (oldListOfFiles detect: [:fileRow| fileRow fileName = fileName] ifNone: nil) isNil |
525 (oldListOfFiles detect: [:fileRow| fileRow fileName = fileName] ifNone: nil) isNil |
524 ifTrue: [ |
526 ifTrue: [ |
525 |nearestFileRow r| |
527 |nearestFileRow newRow r| |
526 nearestFileRow := self listOfFiles indexOf: (self listOfFiles detect: [:fileRow| fileRow baseName > fileName baseName] ifNone: nil). |
528 |
|
529 newRow := FileRow new fileName: fileName asFilename. |
|
530 "/ cg: how stupid is that? |
|
531 "/ nearestFileRow := listOfFiles indexOf: (listOfFiles detect: [:fileRow| fileRow baseName > fileName baseName] ifNone: nil). |
|
532 nearestFileRow := listOfFiles findFirst:[:fileRow | fileRow baseName > fileName baseName]. |
527 nearestFileRow = 0 |
533 nearestFileRow = 0 |
528 ifTrue: [self listOfFiles add: (r := FileRow new fileName: fileName asFilename)] |
534 ifTrue: [listOfFiles add: newRow] |
529 ifFalse: [self listOfFiles add: (r := FileRow new fileName: fileName asFilename) beforeIndex: nearestFileRow]. |
535 ifFalse: [listOfFiles add: newRow beforeIndex: nearestFileRow]. |
530 monitoring ifTrue: [self selectionOfFile value: r]. |
536 monitoring ifTrue: [self selectionOfFile value: r]. |
531 ] |
537 ] |
532 ]. |
538 ]. |
533 self listOfFiles |
539 |
|
540 listOfFiles |
534 reverseDo: [:fileRow| |
541 reverseDo: [:fileRow| |
535 (currentFilenames includes: fileRow fileName) |
542 (currentFilenames includes: fileRow fileName) |
536 ifFalse: [self listOfFiles remove: fileRow] |
543 ifFalse: [listOfFiles remove: fileRow] |
537 ] |
544 ] |
538 ]. |
545 ]. |
539 |
546 |
540 monitoring ifTrue: [ |
547 monitoring ifTrue: [ |
541 readTask := readBlock forkAt: Processor userBackgroundPriority. |
548 readTask := readBlock forkAt: Processor userBackgroundPriority. |