DirectoryView.st
changeset 3018 31dc0e6c143e
parent 2999 a173c8753a07
child 3035 5a1ce9362a65
equal deleted inserted replaced
3017:d971763e5d03 3018:31dc0e6c143e
   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'!