2217 ]. |
2217 ]. |
2218 newItems := self evaluateFilter:newAllItems. |
2218 newItems := self evaluateFilter:newAllItems. |
2219 oldItems := filteredItems copy. |
2219 oldItems := filteredItems copy. |
2220 addItems := OrderedCollection new. |
2220 addItems := OrderedCollection new. |
2221 remItems := OrderedCollection new. |
2221 remItems := OrderedCollection new. |
2222 filteredItems size == 0 ifTrue:[ |
2222 |
|
2223 oldItems isEmptyOrNil ifTrue:[ |
2223 remItems := oldItems. |
2224 remItems := oldItems. |
2224 ] ifFalse:[ |
2225 ] ifFalse:[ |
2225 "/ MERGE WITH CURRENT CONTENTS |
2226 "/ MERGE WITH CURRENT CONTENTS |
2226 oldItems copy do:[:anOldItem| |
2227 oldItems copy do:[:anOldItem| |
2227 "/ remove no longer valid files |
2228 "/ remove no longer valid files |
2228 (newItems detectLast:[:aNewItem| aNewItem = anOldItem] ifNone:nil) isNil ifTrue:[ |
2229 (newItems includes:anOldItem) ifFalse:[ |
2229 remItems add:anOldItem. |
2230 remItems add:anOldItem. |
2230 oldItems removeIdentical:anOldItem |
2231 oldItems removeIdentical:anOldItem |
2231 ] |
2232 ] |
2232 ]. |
2233 ]. |
2233 ]. |
2234 ]. |
2234 "/ add new files |
2235 "/ add new files |
2235 newItems do:[:aNewItem| |
2236 newItems do:[:aNewItem| |
2236 (oldItems detect:[:anOldItem| anOldItem = aNewItem] ifNone:nil) isNil ifTrue:[ |
2237 (oldItems includes:aNewItem) ifFalse:[ |
2237 addItems add:aNewItem. |
2238 addItems add:aNewItem. |
2238 ] |
2239 ] |
2239 ]. |
2240 ]. |
2240 theAllItems := self allItems. |
2241 "/ theAllItems := self allItems. |
2241 remItems notEmpty ifTrue:[ |
2242 "/ remItems notEmpty ifTrue:[ |
2242 theAllItems removeAll:remItems |
2243 "/ theAllItems removeAll:remItems |
2243 ]. |
2244 "/ ]. |
2244 addItems do:[: aNewItem | |
2245 "/ addItems do:[: aNewItem | |
2245 (theAllItems includes:aNewItem) not ifTrue:[ |
2246 "/ (theAllItems includes:aNewItem) not ifTrue:[ |
2246 theAllItems add:aNewItem. |
2247 "/ theAllItems add:aNewItem. |
2247 ] |
2248 "/ ] |
2248 ]. |
2249 "/ ]. |
2249 |
2250 |
2250 self |
2251 self |
2251 enqueueMessage:#value |
2252 enqueueMessage:#value |
2252 for:[ self browserItemListAdd:addItems remove:remItems. ] |
2253 for:[ self browserItemListAdd:addItems remove:remItems. ] |
2253 arguments:#(). |
2254 arguments:#(). |
2329 updateTask notNil ifTrue:[ |
2330 updateTask notNil ifTrue:[ |
2330 updateTask terminate. |
2331 updateTask terminate. |
2331 ]. |
2332 ]. |
2332 ! |
2333 ! |
2333 |
2334 |
2334 updateBlock |
|
2335 |
|
2336 ^ [ : timeOut | |
|
2337 "/ Transcript showCR:'START'. |
|
2338 self isBusy:true. |
|
2339 [ |
|
2340 self directoryChangeFlag ifTrue:[ |
|
2341 self directoryChangeFlag:false. |
|
2342 self debugMessage:'directoryChanged'. |
|
2343 self directoryChanged. |
|
2344 ]. |
|
2345 self directoryContentsChangeFlag ifTrue:[ |
|
2346 self directoryContentsChangeFlag:false. |
|
2347 self debugMessage:'directoryContentsChanged'. |
|
2348 self directoryContentsChanged. |
|
2349 ]. |
|
2350 self filterChangeFlag ifTrue:[ |
|
2351 self filterChangeFlag:false. |
|
2352 self debugMessage:'filterChanged'. |
|
2353 self filterChanged. |
|
2354 ]. |
|
2355 self sortBlockChangeFlag ifTrue:[ |
|
2356 self sortBlockChangeFlag:false. |
|
2357 self debugMessage:'sortBlockChanged'. |
|
2358 self sortBlockChanged. |
|
2359 ]. |
|
2360 timeOut ifTrue:[ |
|
2361 self debugMessage:'evaluate modification'. |
|
2362 self modificationCycle |
|
2363 ]. |
|
2364 self updateColumnsCycle ifTrue:[ |
|
2365 self debugMessage:'next time another columns update'. |
|
2366 self changeSema signal |
|
2367 ]. |
|
2368 ] ensure:[ |
|
2369 self isBusy:false. |
|
2370 ]. |
|
2371 "/ Transcript showCR:'STOP'. |
|
2372 ] |
|
2373 ! |
|
2374 |
|
2375 updateStep |
2335 updateStep |
2376 AbortSignal handle:[ |
2336 AbortSignal handle:[ |
2377 self debugMessage:'got an abort signal'. |
2337 self debugMessage:'got an abort signal'. |
2378 self directoryContentsChangeFlag:false. |
2338 self directoryContentsChangeFlag:false. |
2379 self filterChangeFlag:false. |
2339 self filterChangeFlag:false. |
2387 |
2347 |
2388 (self filterChangeFlag |
2348 (self filterChangeFlag |
2389 or:[self sortBlockChangeFlag |
2349 or:[self sortBlockChangeFlag |
2390 or:[self directoryChangeFlag]]) ifTrue:[ |
2350 or:[self directoryChangeFlag]]) ifTrue:[ |
2391 self withCursor:Cursor execute do:[ |
2351 self withCursor:Cursor execute do:[ |
2392 self updateBlock value:timedOut. |
2352 self updateWithTimeout:timedOut. |
2393 ] |
2353 ] |
2394 ] ifFalse:[ |
2354 ] ifFalse:[ |
2395 self updateBlock value:timedOut. |
2355 self updateWithTimeout:timedOut. |
2396 ] |
2356 ] |
2397 ] |
2357 ] |
|
2358 ! |
|
2359 |
|
2360 updateWithTimeout:timeOut |
|
2361 |
|
2362 "/ Transcript showCR:'START'. |
|
2363 self isBusy:true. |
|
2364 [ |
|
2365 self directoryChangeFlag ifTrue:[ |
|
2366 self directoryChangeFlag:false. |
|
2367 self debugMessage:'directoryChanged'. |
|
2368 self directoryChanged. |
|
2369 ]. |
|
2370 self directoryContentsChangeFlag ifTrue:[ |
|
2371 self directoryContentsChangeFlag:false. |
|
2372 self debugMessage:'directoryContentsChanged'. |
|
2373 self directoryContentsChanged. |
|
2374 ]. |
|
2375 self filterChangeFlag ifTrue:[ |
|
2376 self filterChangeFlag:false. |
|
2377 self debugMessage:'filterChanged'. |
|
2378 self filterChanged. |
|
2379 ]. |
|
2380 self sortBlockChangeFlag ifTrue:[ |
|
2381 self sortBlockChangeFlag:false. |
|
2382 self debugMessage:'sortBlockChanged'. |
|
2383 self sortBlockChanged. |
|
2384 ]. |
|
2385 timeOut ifTrue:[ |
|
2386 self debugMessage:'evaluate modification'. |
|
2387 self modificationCycle |
|
2388 ]. |
|
2389 self updateColumnsCycle ifTrue:[ |
|
2390 self debugMessage:'next time another columns update'. |
|
2391 self changeSema signal |
|
2392 ]. |
|
2393 ] ensure:[ |
|
2394 self isBusy:false. |
|
2395 ]. |
|
2396 "/ Transcript showCR:'STOP'. |
2398 ! ! |
2397 ! ! |
2399 |
2398 |
2400 !DirectoryContentsBrowser methodsFor:'update task trigger'! |
2399 !DirectoryContentsBrowser methodsFor:'update task trigger'! |
2401 |
2400 |
2402 wakeUp |
2401 wakeUp |