kopia lustrzana https://gitlab.com/mysocialportal/relatica
				
				
				
			
		
			
				
	
	
		
			56 wiersze
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Dart
		
	
	
			
		
		
	
	
			56 wiersze
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Dart
		
	
	
| import 'package:flutter/material.dart';
 | |
| import 'package:logging/logging.dart';
 | |
| import 'package:result_monad/result_monad.dart';
 | |
| 
 | |
| import '../globals.dart';
 | |
| import '../models/TimelineIdentifiers.dart';
 | |
| import '../models/entry_tree_item.dart';
 | |
| import '../models/exec_error.dart';
 | |
| import '../models/timeline.dart';
 | |
| import 'entry_manager_service.dart';
 | |
| 
 | |
| class TimelineManager extends ChangeNotifier {
 | |
|   static final _logger = Logger('$TimelineManager');
 | |
| 
 | |
|   final cachedTimelines = <TimelineIdentifiers, Timeline>{};
 | |
| 
 | |
|   // refresh timeline gets statuses newer than the newest in that timeline
 | |
|   Result<List<EntryTreeItem>, ExecError> getTimeline(TimelineIdentifiers type) {
 | |
|     final posts = cachedTimelines[type]?.posts;
 | |
|     if (posts != null) {
 | |
|       return Result.ok(posts);
 | |
|     }
 | |
| 
 | |
|     refreshTimeline(type);
 | |
| 
 | |
|     return Result.ok([]);
 | |
|   }
 | |
| 
 | |
|   Future<void> refreshTimeline(TimelineIdentifiers type) async {
 | |
|     final timeline = cachedTimelines.putIfAbsent(type, () => Timeline(type));
 | |
|     (await getIt<EntryManagerService>()
 | |
|             .updateTimeline(type, timeline.highestStatusId))
 | |
|         .match(onSuccess: (posts) {
 | |
|       _logger.finest('Posts returned for adding to $type: ${posts.length}');
 | |
|       timeline.addPosts(posts);
 | |
|       notifyListeners();
 | |
|     }, onError: (error) {
 | |
|       _logger.severe('Error getting timeline: $type}');
 | |
|     });
 | |
| 
 | |
|     notifyListeners();
 | |
|   }
 | |
|   // All statuses get dumped into the entity mangager and get full assembled posts out of it
 | |
|   // Timeline keeps track of posts level only so can query timeline manager for those
 | |
|   // Should put backing store on timelines and entity manager so can recover from restart faster
 | |
|   // Have a purge caches button to start that over from scratch
 | |
|   // Should have a contacts manager with backing store as well
 | |
|   // Timeline view is new control that knows how to load timeline, scrolling around with refresh and get more
 | |
|   // Timeline Item view displays itself and children
 | |
|   // Has "Add Comment" value
 | |
|   // Has like/dislke
 | |
|   // Has reshare/quote reshare (if can get that working somehow)
 | |
|   // If our own has delete
 | |
| 
 | |
| }
 |