@@ -18,7 +18,6 @@ public class SnackbarMessageQueue : ISnackbarMessageQueue, IDisposable
18
18
private readonly ManualResetEvent _disposedEvent = new ManualResetEvent ( false ) ;
19
19
private readonly ManualResetEvent _pausedEvent = new ManualResetEvent ( false ) ;
20
20
private readonly ManualResetEvent _messageWaitingEvent = new ManualResetEvent ( false ) ;
21
- private Tuple < SnackbarMessageQueueItem , DateTime > _latestShownItem ;
22
21
private int _pauseCounter ;
23
22
private bool _isDisposed ;
24
23
@@ -157,7 +156,7 @@ public SnackbarMessageQueue() : this(TimeSpan.FromSeconds(3))
157
156
public SnackbarMessageQueue ( TimeSpan messageDuration )
158
157
{
159
158
_messageDuration = messageDuration ;
160
- Task . Factory . StartNew ( PumpAsync ) ;
159
+ Task . Factory . StartNew ( PumpAsync , TaskCreationOptions . LongRunning ) ;
161
160
}
162
161
163
162
//oh if only I had Disposable.Create in this lib :) tempted to copy it in like dragabalz,
@@ -257,27 +256,27 @@ public void Enqueue(object content, object actionContent, Action<object> actionH
257
256
258
257
var snackbarMessageQueueItem = new SnackbarMessageQueueItem ( content , durationOverride ?? _messageDuration ,
259
258
actionContent , actionHandler , actionArgument , promote , neverConsiderToBeDuplicate ) ;
260
- if ( promote )
261
- InsertAsLastNotPromotedNode ( snackbarMessageQueueItem ) ;
262
- else
263
- _snackbarMessages . AddLast ( snackbarMessageQueueItem ) ;
259
+ InsertItem ( snackbarMessageQueueItem ) ;
264
260
265
261
_messageWaitingEvent . Set ( ) ;
266
262
}
267
263
268
- private void InsertAsLastNotPromotedNode ( SnackbarMessageQueueItem snackbarMessageQueueItem )
264
+ private void InsertItem ( SnackbarMessageQueueItem item )
269
265
{
270
266
var node = _snackbarMessages . First ;
271
267
while ( node != null )
272
268
{
273
- if ( ! node . Value . IsPromoted )
269
+ if ( ! IgnoreDuplicate && item . IsDuplicate ( node . Value ) )
270
+ return ;
271
+
272
+ if ( item . IsPromoted && ! node . Value . IsPromoted )
274
273
{
275
- _snackbarMessages . AddBefore ( node , snackbarMessageQueueItem ) ;
274
+ _snackbarMessages . AddBefore ( node , item ) ;
276
275
return ;
277
276
}
278
277
node = node . Next ;
279
278
}
280
- _snackbarMessages . AddLast ( snackbarMessageQueueItem ) ;
279
+ _snackbarMessages . AddLast ( item ) ;
281
280
}
282
281
283
282
private async void PumpAsync ( )
@@ -301,18 +300,9 @@ private async void PumpAsync()
301
300
//show message
302
301
if ( snackbar != null )
303
302
{
304
- var message = _snackbarMessages . First . Value ;
303
+ var message = _snackbarMessages . First ! . Value ;
304
+ await ShowAsync ( snackbar , message ) ;
305
305
_snackbarMessages . RemoveFirst ( ) ;
306
- if ( _latestShownItem == null
307
- || IgnoreDuplicate
308
- || message . IgnoreDuplicate
309
- || ! Equals ( _latestShownItem . Item1 . Content , message . Content )
310
- || ! Equals ( _latestShownItem . Item1 . ActionContent , message . ActionContent )
311
- || _latestShownItem . Item2 <= DateTime . Now . Subtract ( _latestShownItem . Item1 . Duration ) )
312
- {
313
- await ShowAsync ( snackbar , message ) ;
314
- _latestShownItem = new Tuple < SnackbarMessageQueueItem , DateTime > ( message , DateTime . Now ) ;
315
- }
316
306
}
317
307
else
318
308
{
0 commit comments