class FikoYTQueuedTask { final Future Function() task; final String? tag; final int priority; FikoYTQueuedTask({ required this.task, this.tag, this.priority = 0, }); } class FikoYTRequestQueue { static final FikoYTRequestQueue _instance = FikoYTRequestQueue._internal(); factory FikoYTRequestQueue() => _instance; final List _queue = []; final Set _cancelledTags = {}; final int _maxConcurrent = 5; int _currentRunning = 0; FikoYTRequestQueue._internal(); void enqueue(Future Function() task, {String? tag, int priority = 0}) { final newTask = FikoYTQueuedTask(task: task, tag: tag, priority: priority); _queue.add(newTask); _queue.sort((a, b) => b.priority.compareTo(a.priority)); // büyük öncelik öne _tryExecuteNext(); } void cancelByTag(String tag) { _cancelledTags.add(tag); _queue.removeWhere((task) => task.tag == tag); } void clearQueue() { _queue.clear(); } void cancelAll() { _cancelledTags.clear(); for (final task in _queue) { if (task.tag != null) { _cancelledTags.add(task.tag); } } _queue.clear(); } void _tryExecuteNext() { while (_queue.isNotEmpty && _currentRunning < _maxConcurrent) { final task = _queue.removeAt(0); if (task.tag != null && _cancelledTags.contains(task.tag)) { continue; } _currentRunning++; Future(() => task.task()).whenComplete(() { _currentRunning--; _tryExecuteNext(); }); } } }