493 |
493 |
494 "Modified: / 23.9.1998 / 17:00:42 / cg" |
494 "Modified: / 23.9.1998 / 17:00:42 / cg" |
495 ! |
495 ! |
496 |
496 |
497 readMonitoringDirectory |
497 readMonitoringDirectory |
498 |
|
499 |readBlock| |
498 |readBlock| |
|
499 |
500 readTask notNil ifTrue: [readTask terminate]. |
500 readTask notNil ifTrue: [readTask terminate]. |
501 readBlock := |
501 readBlock := |
502 [ |
|
503 |dir currentFilenames oldListOfFiles| |
|
504 dir := directory asFilename. |
|
505 currentFilenames := OrderedCollection new. |
|
506 (dir isReadable and:[dir isExecutable]) ifTrue: |
|
507 [ |
502 [ |
508 self listOfFileFilters value do: |
503 |dir currentFilenames oldListOfFiles| |
509 [:filter| |
504 |
510 (dir filesMatchingWithoutDotDirs: filter) do: |
505 dir := directory asFilename. |
511 [:aFileName| |
506 currentFilenames := OrderedCollection new. |
512 |file| |
507 (dir isReadable and:[dir isExecutable]) ifTrue: [ |
513 (file := dir construct: aFileName) isDirectory |
508 self listOfFileFilters value do: |
514 ifFalse: |
509 [:filter| |
515 [ |
510 (dir filesMatchingWithoutDotDirs: filter) do: [:aFileName| |
516 currentFilenames add: file |
511 |file| |
|
512 (file := dir construct: aFileName) isDirectory ifFalse: [ |
|
513 currentFilenames add: file |
|
514 ] |
|
515 ]. |
|
516 ]. |
|
517 ]. |
|
518 oldListOfFiles := self listOfFiles copy. |
|
519 (currentFilenames asSortedCollection: [:f1 :f2| f1 baseName < f2 baseName]) asSet |
|
520 do: [:fileName| |
|
521 (oldListOfFiles detect: [:fileRow| fileRow fileName = fileName] ifNone: nil) isNil |
|
522 ifTrue: [ |
|
523 |nearestFileRow r| |
|
524 nearestFileRow := self listOfFiles indexOf: (self listOfFiles detect: [:fileRow| fileRow baseName > fileName baseName] ifNone: nil). |
|
525 nearestFileRow = 0 |
|
526 ifTrue: [self listOfFiles add: (r := FileRow new fileName: fileName asFilename)] |
|
527 ifFalse: [self listOfFiles add: (r := FileRow new fileName: fileName asFilename) beforeIndex: nearestFileRow]. |
|
528 monitoring ifTrue: [self selectionOfFile value: r]. |
517 ] |
529 ] |
518 ]. |
530 ]. |
519 ]. |
531 self listOfFiles |
|
532 reverseDo: [:fileRow| |
|
533 (currentFilenames includes: fileRow fileName) |
|
534 ifFalse: [self listOfFiles remove: fileRow] |
|
535 ] |
520 ]. |
536 ]. |
521 oldListOfFiles := self listOfFiles copy. |
537 |
522 (currentFilenames asSortedCollection: [:f1 :f2| f1 baseName < f2 baseName]) asSet do: |
538 monitoring ifTrue: [ |
523 [:fileName| |
|
524 (oldListOfFiles detect: [:fileRow| fileRow fileName = fileName] ifNone: nil) isNil |
|
525 ifTrue: |
|
526 [ |
|
527 |nearestFileRow r| |
|
528 nearestFileRow := self listOfFiles indexOf: (self listOfFiles detect: [:fileRow| fileRow baseName > fileName baseName] ifNone: nil). |
|
529 nearestFileRow = 0 |
|
530 ifTrue: [self listOfFiles add: (r := FileRow new fileName: fileName asFilename)] |
|
531 ifFalse: [self listOfFiles add: (r := FileRow new fileName: fileName asFilename) beforeIndex: nearestFileRow]. |
|
532 monitoring ifTrue: [self selectionOfFile value: r]. |
|
533 ] |
|
534 ]. |
|
535 self listOfFiles reverseDo: |
|
536 [:fileRow| |
|
537 (currentFilenames includes: fileRow fileName) |
|
538 ifFalse: [self listOfFiles remove: fileRow] |
|
539 ] |
|
540 ]. |
|
541 |
|
542 monitoring |
|
543 ifTrue: |
|
544 [ |
|
545 readTask := readBlock forkAt: Processor userBackgroundPriority. |
539 readTask := readBlock forkAt: Processor userBackgroundPriority. |
546 Processor addTimedBlock: monitoringTimeBlock afterSeconds: 1 |
540 Processor addTimedBlock: monitoringTimeBlock afterSeconds: 1 |
547 ] |
541 ] ifFalse: [ |
548 ifFalse: |
|
549 [ |
|
550 Cursor wait showWhile: [readBlock value] |
542 Cursor wait showWhile: [readBlock value] |
551 ] |
543 ] |
552 ! ! |
544 ! ! |
553 |
545 |
554 !DirectoryView methodsFor:'selection'! |
546 !DirectoryView methodsFor:'selection'! |