Skip to content

Commit 76a3759

Browse files
committed
Fixed warning conditions. Improvements, stability updates.
1 parent 0805cf7 commit 76a3759

20 files changed

+206
-124
lines changed

Assets/_PackageRoot/Runtime/Future/CancelComponent/ComponentCancelOn.cs

Lines changed: 0 additions & 36 deletions
This file was deleted.
Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
using System;
2+
using UnityEngine;
3+
4+
namespace Extensions.Unity.ImageLoader
5+
{
6+
public abstract class ComponentTrigger : MonoBehaviour
7+
{
8+
// protected WeakAction onTrigger = new WeakAction();
9+
protected event Action onTrigger;
10+
protected bool isTriggered;
11+
12+
protected void Trigger()
13+
{
14+
isTriggered = true;
15+
onTrigger?.Invoke();
16+
onTrigger = null;
17+
}
18+
public void RegisterCancel<T>(IFuture<T> future)
19+
{
20+
if (future.Status == FutureStatus.Disposed || future.IsCompleted)
21+
return; // ignore completed futures
22+
23+
if (isTriggered)
24+
{
25+
future.Cancel();
26+
return;
27+
}
28+
29+
// TODO: check if future is completed during the onTrigger event
30+
// onTrigger += future.Cancel;
31+
// -------------------------------------------------------------
32+
var weakFuture = new WeakReference<IFuture<T>>(future);
33+
onTrigger += () =>
34+
{
35+
if (weakFuture.TryGetTarget(out var target))
36+
{
37+
if (future.Status == FutureStatus.Disposed || target.IsCompleted)
38+
return; // ignore completed futures
39+
40+
target.Cancel();
41+
}
42+
};
43+
}
44+
45+
public void RegisterDispose<T>(Reference<T> reference)
46+
{
47+
if (reference.IsDisposed)
48+
return; // ignore disposed references
49+
50+
if (isTriggered)
51+
{
52+
reference.Dispose();
53+
return;
54+
}
55+
56+
// TODO: check if reference is disposed during the onTrigger event
57+
// onTrigger += reference.Dispose;
58+
// -------------------------------------------------------------
59+
var weakReference = new WeakReference<Reference<T>>(reference);
60+
onTrigger += () =>
61+
{
62+
if (weakReference.TryGetTarget(out var target))
63+
{
64+
if (target.IsDisposed)
65+
return; // ignore disposed references
66+
67+
target.Dispose();
68+
}
69+
};
70+
}
71+
}
72+
}

Assets/_PackageRoot/Runtime/Future/CancelComponent/ComponentCancelOn.cs.meta renamed to Assets/_PackageRoot/Runtime/Future/CancelComponent/ComponentTrigger.cs.meta

File renamed without changes.

Assets/_PackageRoot/Runtime/Future/CancelComponent/ComponentCancelOnDestroy.cs renamed to Assets/_PackageRoot/Runtime/Future/CancelComponent/ComponentTriggerOnDestroy.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
namespace Extensions.Unity.ImageLoader
22
{
3-
internal class ComponentCancelOnDestroy : ComponentCancelOn
3+
internal class ComponentTriggerOnDestroy : ComponentTrigger
44
{
55
private void OnDestroy() => Trigger();
66
}

Assets/_PackageRoot/Runtime/Future/CancelComponent/ComponentCancelOnDestroy.cs.meta renamed to Assets/_PackageRoot/Runtime/Future/CancelComponent/ComponentTriggerOnDestroy.cs.meta

File renamed without changes.

Assets/_PackageRoot/Runtime/Future/CancelComponent/ComponentCancelOnDisable.cs renamed to Assets/_PackageRoot/Runtime/Future/CancelComponent/ComponentTriggerOnDisable.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
namespace Extensions.Unity.ImageLoader
22
{
3-
internal class ComponentCancelOnDisable : ComponentCancelOn
3+
internal class ComponentTriggerOnDisable : ComponentTrigger
44
{
55
private void OnDisable() => Trigger();
66
}

Assets/_PackageRoot/Runtime/Future/CancelComponent/ComponentCancelOnDisable.cs.meta renamed to Assets/_PackageRoot/Runtime/Future/CancelComponent/ComponentTriggerOnDisable.cs.meta

File renamed without changes.

Assets/_PackageRoot/Runtime/Future/CancelComponent/ComponentCancelOnEnable.cs renamed to Assets/_PackageRoot/Runtime/Future/CancelComponent/ComponentTriggerOnEnable.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
namespace Extensions.Unity.ImageLoader
22
{
3-
internal class ComponentCancelOnEnable : ComponentCancelOn
3+
internal class ComponentTriggerOnEnable : ComponentTrigger
44
{
55
private void OnEnable() => Trigger();
66
}

Assets/_PackageRoot/Runtime/Future/CancelComponent/ComponentCancelOnEnable.cs.meta renamed to Assets/_PackageRoot/Runtime/Future/CancelComponent/ComponentTriggerOnEnable.cs.meta

File renamed without changes.

Assets/_PackageRoot/Runtime/Future/Future.API.cs

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -164,14 +164,14 @@ public IFuture<T> Canceled(Action action)
164164
if (IsCancelled)
165165
{
166166
if (LogLevel.IsActive(DebugLevel.Log))
167-
Debug.Log($"[ImageLoader] Future[id={Id}] Canceled\n{Url}");
167+
Debug.Log($"[ImageLoader] Future[id={Id}] Canceled. Status={Status}\n{Url}");
168168
Safe.Run(action, LogLevel);
169169
return this;
170170
}
171171
if (cleared)
172172
{
173173
if (LogLevel.IsActive(DebugLevel.Warning))
174-
Debug.LogWarning($"[ImageLoader] Future[id={Id}] Canceled event is not set because Future is cleared\n{Url}");
174+
Debug.LogWarning($"[ImageLoader] Future[id={Id}] Canceled event is not set because Future is cleared. Status={Status}\n{Url}");
175175
return this;
176176
}
177177
OnCanceled += action;
@@ -186,19 +186,19 @@ public virtual void Cancel()
186186
if (IsLoaded)
187187
{
188188
if (LogLevel.IsActive(DebugLevel.Warning))
189-
Debug.LogWarning($"[ImageLoader] Future[id={Id}] Can't cancel. Task is already loaded\n{Url}");
189+
Debug.LogWarning($"[ImageLoader] Future[id={Id}] Can't cancel. Task is already loaded. Status={Status}\n{Url}");
190190
return;
191191
}
192192
if (IsCancelled)
193193
{
194194
if (LogLevel.IsActive(DebugLevel.Warning))
195-
Debug.LogWarning($"[ImageLoader] Future[id={Id}] Can't cancel. Task is already canceled\n{Url}");
195+
Debug.LogWarning($"[ImageLoader] Future[id={Id}] Can't cancel. Task is already canceled. Status={Status}\n{Url}");
196196
return;
197197
}
198198
if (cleared)
199199
{
200200
if (LogLevel.IsActive(DebugLevel.Warning))
201-
Debug.LogWarning($"[ImageLoader] Future[id={Id}] Can't cancel. Task is already cleared\n{Url}");
201+
Debug.LogWarning($"[ImageLoader] Future[id={Id}] Can't cancel. Task is already cleared. Status={Status}\n{Url}");
202202
return;
203203
}
204204
if (LogLevel.IsActive(DebugLevel.Log))
@@ -224,18 +224,18 @@ public IFuture<Reference<T>> AsReference(DebugLevel logLevel = DebugLevel.Trace)
224224

225225
LoadedFromMemoryCache(obj =>
226226
{
227-
if (weakReference.TryGetTarget(out var reference))
228-
reference.Loaded(new Reference<T>(url, obj), FutureLoadedFrom.MemoryCache);
227+
if (weakReference.TryGetTarget(out var future))
228+
future.Loaded(new Reference<T>(url, obj), FutureLoadedFrom.MemoryCache);
229229
});
230230
LoadingFromDiskCache(() =>
231231
{
232-
if (weakReference.TryGetTarget(out var reference))
233-
reference.Loading(FutureLoadingFrom.DiskCache);
232+
if (weakReference.TryGetTarget(out var future))
233+
future.Loading(FutureLoadingFrom.DiskCache);
234234
});
235235
LoadedFromDiskCache(obj =>
236236
{
237-
if (weakReference.TryGetTarget(out var reference))
238-
reference.Loaded(new Reference<T>(url, obj), FutureLoadedFrom.DiskCache);
237+
if (weakReference.TryGetTarget(out var future))
238+
future.Loaded(new Reference<T>(url, obj), FutureLoadedFrom.DiskCache);
239239
});
240240
LoadingFromSource(() =>
241241
{
@@ -244,18 +244,21 @@ public IFuture<Reference<T>> AsReference(DebugLevel logLevel = DebugLevel.Trace)
244244
});
245245
LoadedFromSource(obj =>
246246
{
247-
if (weakReference.TryGetTarget(out var reference))
248-
reference.Loaded(new Reference<T>(url, obj), FutureLoadedFrom.Source);
247+
if (weakReference.TryGetTarget(out var future))
248+
future.Loaded(new Reference<T>(url, obj), FutureLoadedFrom.Source);
249249
});
250250
Failed(e =>
251251
{
252-
if (weakReference.TryGetTarget(out var reference))
253-
reference.FailToLoad(e);
252+
if (weakReference.TryGetTarget(out var future))
253+
future.FailToLoad(e);
254254
});
255255
Canceled(() =>
256256
{
257-
if (weakReference.TryGetTarget(out var reference))
258-
reference.Cancel();
257+
if (weakReference.TryGetTarget(out var future))
258+
{
259+
if (future.Status != FutureStatus.Disposed && !future.IsCompleted && !future.IsCancelled)
260+
future.Cancel();
261+
}
259262
});
260263

261264
// ┌─────────┬────────────────────────────────────────────────────────────────────────┐

0 commit comments

Comments
 (0)