Skip to content

Commit 4d1960a

Browse files
Merge pull request #78 from yueyinqiu/fix-more
fix some warnings
2 parents 6f8ff63 + 80041bb commit 4d1960a

File tree

8 files changed

+85
-101
lines changed

8 files changed

+85
-101
lines changed

Magic.IndexedDb/Extensions/MagicJsInvoke.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,9 @@ internal async Task CallInvokeVoidDefaultJsAsync(string modulePath, string funct
142142
}
143143

144144
private async IAsyncEnumerable<T?> MagicYieldJsAsync<T>(
145-
string modulePath, string functionName, CancellationToken token, params ITypedArgument[] args)
145+
string modulePath, string functionName,
146+
[EnumeratorCancellation] CancellationToken token,
147+
params ITypedArgument[] args)
146148
{
147149
var settings = new MagicJsonSerializationSettings() { UseCamelCase = true };
148150

Magic.IndexedDb/Extensions/ServiceCollectionExtensions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ public static IServiceCollection AddMagicBlazorDB(this IServiceCollection servic
4141
long jsMessageSizeBytes, bool isDebug)
4242
{
4343
services.AddScoped<IMagicIndexedDb>(sp =>
44-
new MagicDbFactory(sp, sp.GetRequiredService<IJSRuntime>(), jsMessageSizeBytes));
44+
new MagicDbFactory(sp.GetRequiredService<IJSRuntime>(), jsMessageSizeBytes));
4545

4646
if (isDebug)
4747
{

Magic.IndexedDb/Factories/MagicDbFactory.cs

Lines changed: 65 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -7,44 +7,60 @@
77
using System.Collections.Concurrent;
88
using System.Reflection;
99
using Magic.IndexedDb.LinqTranslation.Interfaces;
10+
using System.Diagnostics;
11+
using System.Threading;
1012

1113
namespace Magic.IndexedDb.Factories
1214
{
1315
internal class MagicDbFactory : IMagicIndexedDb, IAsyncDisposable
1416
{
15-
internal MagicDbFactory(long jsMessageSizeBytes)
17+
// null value indicates that the factory is disposed
18+
Lazy<Task<IJSObjectReference>>? _jsModule;
19+
Lazy<Task<IndexedDbManager>> _magicJsManager;
20+
public MagicDbFactory(IJSRuntime jSRuntime, long jsMessageSizeBytes)
1621
{
17-
Cache.JsMessageSizeBytes = jsMessageSizeBytes;
18-
}
19-
20-
Lazy<Task<IJSObjectReference>>? _jsRuntime;
21-
readonly IServiceProvider _serviceProvider;
22-
public static IndexedDbManager? _MagicJsManager { get; set; } = null;
23-
private IJSObjectReference? _cachedJsModule; // Shared JS module instance
24-
public MagicDbFactory(IServiceProvider serviceProvider, IJSRuntime jSRuntime, long jsMessageSizeBytes)
25-
{
26-
_serviceProvider = serviceProvider;
27-
this._jsRuntime = new(() => jSRuntime.InvokeAsync<IJSObjectReference>(
22+
this._jsModule = new(() => jSRuntime.InvokeAsync<IJSObjectReference>(
2823
"import",
29-
"./_content/Magic.IndexedDb/magicDbMethods.js").AsTask());
30-
}
24+
"./_content/Magic.IndexedDb/magicDbMethods.js").AsTask(),
25+
isThreadSafe: true);
3126

32-
/// <summary>
33-
/// Get or initialize the shared JavaScript module.
34-
/// </summary>
35-
private async Task<IJSObjectReference> GetJsModuleAsync()
36-
{
37-
if (_cachedJsModule is not null)
38-
return _cachedJsModule;
27+
this._magicJsManager = new(async () =>
28+
{
29+
var jsModule = await this._jsModule.Value;
30+
31+
var dbSchemas = SchemaHelper.GetAllSchemas();
32+
// Create & Open the database (formerly in IndexedDbManager)
33+
var manager = new IndexedDbManager(jsModule);
3934

40-
_cachedJsModule = await _jsRuntime.Value;
41-
return _cachedJsModule;
35+
var dbSets = SchemaHelper.GetAllIndexedDbSets();
36+
37+
if (dbSets != null)
38+
{
39+
foreach (var dbSet in dbSets)
40+
{
41+
await new MagicJsInvoke(jsModule).CallJsAsync(Cache.MagicDbJsImportPath,
42+
IndexedDbFunctions.CREATE_LEGACY, default,
43+
new TypedArgument<DbStore>(new DbStore()
44+
{
45+
Name = dbSet.DatabaseName,
46+
Version = 1,
47+
StoreSchemas = dbSchemas
48+
}));
49+
}
50+
}
51+
else
52+
{
53+
Console.WriteLine("No IndexedDbSet found and/or no found IMagicRepository.");
54+
}
55+
return manager;
56+
},
57+
isThreadSafe: true);
4258
}
4359

4460
public async ValueTask DisposeAsync()
4561
{
46-
var js = _jsRuntime;
47-
_jsRuntime = null;
62+
var js = _jsModule;
63+
_jsModule = null;
4864

4965
if (js is null || !js.IsValueCreated)
5066
return;
@@ -79,58 +95,23 @@ public async ValueTask DisposeAsync()
7995
}
8096
}
8197

82-
/// <summary>
83-
/// Ensure a database is opened and properly associated with the shared JS module.
84-
/// </summary>
85-
private async ValueTask<IndexedDbManager> GetOrCreateDatabaseAsync(CancellationToken cancellationToken = default)
86-
{
87-
if (_MagicJsManager != null)
88-
return _MagicJsManager; // Return cached instance
89-
90-
var jsModule = await GetJsModuleAsync(); // Ensure shared JS module is ready
91-
92-
var dbSchemas = SchemaHelper.GetAllSchemas();
93-
// Create & Open the database (formerly in IndexedDbManager)
94-
var manager = new IndexedDbManager(jsModule);
95-
96-
var dbSets = SchemaHelper.GetAllIndexedDbSets();
97-
98-
if (dbSets != null)
99-
{
100-
foreach (var dbSet in dbSets)
101-
{
102-
await new MagicJsInvoke(jsModule).CallJsAsync(Cache.MagicDbJsImportPath,
103-
IndexedDbFunctions.CREATE_LEGACY, cancellationToken,
104-
new TypedArgument<DbStore>(new DbStore()
105-
{
106-
Name = dbSet.DatabaseName,
107-
Version = 1,
108-
StoreSchemas = dbSchemas
109-
}));
110-
}
111-
}
112-
else
113-
{
114-
Console.WriteLine("No IndexedDbSet found and/or no found IMagicRepository.");
115-
}
116-
_MagicJsManager = manager; // Cache the opened database
117-
return _MagicJsManager;
118-
}
119-
120-
12198
/// <summary>
12299
/// Get storage estimate using the shared JS module.
123100
/// </summary>
124101
public async Task<QuotaUsage> GetStorageEstimateAsync(CancellationToken cancellationToken = default)
125102
{
126-
var jsModule = await GetJsModuleAsync(); // Shared JS module reference
103+
ObjectDisposedException.ThrowIf(this._jsModule is null, this);
104+
105+
var jsModule = await this._jsModule.Value;
127106
var magicUtility = new MagicUtilities(jsModule);
128107
return await magicUtility.GetStorageEstimateAsync();
129108
}
130109
[Obsolete("Not fully implemented yet until full migration protocol finished.")]
131110
public async ValueTask<IMagicQuery<T>> Query<T>(IndexedDbSet indexedDbSet)
132-
where T : class, IMagicTableBase, new()
111+
where T : class, IMagicTableBase, new()
133112
{
113+
ObjectDisposedException.ThrowIf(this._jsModule is null, this);
114+
134115
// Get database name and schema name
135116
string databaseName = indexedDbSet.DatabaseName;
136117
string schemaName = SchemaHelper.GetTableName<T>();
@@ -140,9 +121,11 @@ public async ValueTask<IMagicQuery<T>> Query<T>(IndexedDbSet indexedDbSet)
140121

141122

142123
public async ValueTask<IMagicQuery<T>> Query<T>(
143-
Func<T, IndexedDbSet> dbSetSelector)
144-
where T : class, IMagicTableBase, new()
124+
Func<T, IndexedDbSet> dbSetSelector)
125+
where T : class, IMagicTableBase, new()
145126
{
127+
ObjectDisposedException.ThrowIf(this._jsModule is null, this);
128+
146129
// Create an instance of T to access `DbSets`
147130
var modelInstance = new T();
148131

@@ -153,39 +136,43 @@ public async ValueTask<IMagicQuery<T>> Query<T>(
153136
string databaseName = selectedDbSet.DatabaseName;
154137
string schemaName = SchemaHelper.GetTableName<T>();
155138

139+
#pragma warning disable CS0618
156140
return await QueryOverride<T>(databaseName, schemaName);
141+
#pragma warning restore CS0618
157142
}
158143

159144
/// <summary>
160145
/// Query the database for a given type. Automatically opens the database if needed.
161146
/// </summary>
162147
public async ValueTask<IMagicQuery<T>> Query<T>()
163148
where T : class, IMagicTableBase, new()
164-
{
149+
{
150+
ObjectDisposedException.ThrowIf(this._jsModule is null, this);
151+
165152
string databaseName = SchemaHelper.GetDefaultDatabaseName<T>();
166153
string schemaName = SchemaHelper.GetTableName<T>();
167-
var dbManager = await GetOrCreateDatabaseAsync();
154+
var dbManager = await this._magicJsManager.Value;
155+
#pragma warning disable CS0618
168156
return await QueryOverride<T>(databaseName, schemaName);
157+
#pragma warning restore CS0618
169158
}
170159

171160
[Obsolete("Not decided if this will be built in further or removed")]
172161
public async ValueTask<IMagicQuery<T>> QueryOverride<T>(string databaseNameOverride, string schemaNameOverride)
173162
where T: class, IMagicTableBase, new ()
174163
{
175-
var dbManager = await GetOrCreateDatabaseAsync(); // Ensure database is open
164+
ObjectDisposedException.ThrowIf(this._jsModule is null, this);
165+
166+
var dbManager = await this._magicJsManager.Value;
176167
return dbManager.Query<T>(databaseNameOverride, schemaNameOverride);
177168
}
178169

179170
public async ValueTask<IMagicDatabaseScoped> Database(IndexedDbSet indexedDbSet)
180171
{
181-
var dbManager = await GetOrCreateDatabaseAsync(); // Ensure database is open
172+
ObjectDisposedException.ThrowIf(this._jsModule is null, this);
173+
174+
var dbManager = await this._magicJsManager.Value;
182175
return dbManager.Database(dbManager, indexedDbSet);
183176
}
184-
185-
//public async ValueTask<IMagicDatabaseScoped> Database()
186-
//{
187-
// throw new Exception("Still working on it.");
188-
//}
189-
190177
}
191178
}

Magic.IndexedDb/Helpers/ExpressionFlattener.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -200,11 +200,11 @@ private class LogicalExpressionComparer : IEqualityComparer<Expression>, ICompar
200200
{
201201
public static readonly LogicalExpressionComparer Instance = new();
202202

203-
public bool Equals(Expression x, Expression y) => Compare(x, y) == 0;
203+
public bool Equals(Expression? x, Expression? y) => Compare(x, y) is 0;
204204

205205
public int GetHashCode(Expression obj) => obj.ToString().GetHashCode();
206206

207-
public int Compare(Expression x, Expression y)
207+
public int Compare(Expression? x, Expression? y)
208208
{
209209
if (ReferenceEquals(x, y)) return 0;
210210
if (x is null) return -1;

Magic.IndexedDb/LinqTranslation/Interfaces/IMagicExecute.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public interface IMagicExecute<T> where T : class
1818
/// </summary>
1919
/// <param name="cancellationToken"></param>
2020
/// <returns></returns>
21-
IAsyncEnumerable<T> AsAsyncEnumerable([EnumeratorCancellation] CancellationToken cancellationToken = default);
21+
IAsyncEnumerable<T> AsAsyncEnumerable(CancellationToken cancellationToken = default);
2222

2323
/// <summary>
2424
/// The order you apply does get applied correctly in the query,

Magic.IndexedDb/Models/MagicContractResolver.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -159,9 +159,9 @@ private bool IsSimpleJsonNull(JsonElement element)
159159
object? value = ReadPropertyValue(ref reader, mpe, options);
160160
propertyValues[csharpPropertyName] = value;
161161
}
162-
catch (Exception ex)
162+
catch
163163
{
164-
164+
// do nothing
165165
}
166166
}
167167
else
@@ -324,9 +324,9 @@ private bool SerializeSimple(Utf8JsonWriter writer, object value)
324324
/// <summary>
325325
/// 🔥 Serializes lists (IEnumerable)
326326
/// </summary>
327-
private bool SerializeIEnumerable(Utf8JsonWriter writer, object value, JsonSerializerOptions options)
327+
private bool SerializeIEnumerable(Utf8JsonWriter writer, object? value, JsonSerializerOptions options)
328328
{
329-
if (value == null)
329+
if (value is null)
330330
{
331331
writer.WriteNullValue();
332332
return true;

TestServer/TestServer/Components/Pages/Home.razor

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -158,9 +158,6 @@
158158
{
159159
if (firstRender)
160160
{
161-
try
162-
{
163-
164161
// Targets the default database automatically if called without any parameters.
165162
IMagicQuery<Person> personQuery = await _MagicDb.Query<Person>();
166163
await personQuery.ClearTable();
@@ -758,11 +755,6 @@
758755
759756

760757
StateHasChanged();
761-
}
762-
catch (Exception ex)
763-
{
764-
Console.WriteLine(ex.Message);
765-
}
766758
}
767759
}
768760
}
Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
{
2-
"Logging": {
3-
"LogLevel": {
4-
"Default": "Information",
5-
"Microsoft.AspNetCore": "Warning"
6-
}
7-
}
2+
"Logging":
3+
{
4+
"LogLevel":
5+
{
6+
"Default": "Information",
7+
"Microsoft.AspNetCore": "Warning"
8+
}
9+
},
10+
"DetailedErrors": true
811
}

0 commit comments

Comments
 (0)