Skip to content

Commit b7d87d2

Browse files
committed
Cleanup, update readme, update demos
1 parent 6b9e016 commit b7d87d2

7 files changed

Lines changed: 49 additions & 79 deletions

File tree

PowerSync/PowerSync.Common/Client/PowerSyncDatabase.cs

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1009,12 +1009,6 @@ public class SQLWatchOptions
10091009
public bool TriggerImmediately { get; set; } = false;
10101010
}
10111011

1012-
public class WatchHandler<T>
1013-
{
1014-
public Action<T[]> OnResult { get; set; } = null!;
1015-
public Action<Exception>? OnError { get; set; }
1016-
}
1017-
10181012
public class WatchOnChangeEvent
10191013
{
10201014
public string[] ChangedTables { get; set; } = [];

PowerSync/PowerSync.Common/README.md

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# PowerSync SDK .NET Common
1+
# PowerSync SDK .NET Common
22

33
This package contains a .NET implementation of a PowerSync database connector and streaming sync bucket implementation.
44

@@ -16,7 +16,7 @@ This package is published on [NuGet](https://www.nuget.org/packages/PowerSync.Co
1616
dotnet add package PowerSync.Common --prerelease
1717
```
1818

19-
## Usage
19+
## Usage
2020

2121
### Simple Query
2222

@@ -39,24 +39,23 @@ static async Task Main() {
3939
```
4040

4141
### Watched queries
42-
Watched queries will automatically update when a dependant table is updated.
43-
Awaiting `Watch()` ensures the watcher is fully initialized and ready to monitor database changes.
42+
43+
Watched queries will automatically update when a dependant table is updated.
44+
Call `Watch()` synchronously to ensure the watcher is fully initialized before execution continues.
4445

4546
```csharp
46-
await db.Watch("select * from lists", null, new WatchHandler<ListResult>
47+
var cts = new CancellationTokenSource();
48+
var listener = db.Watch<ListResult>("select * from lists", null, new SQLWatchOptions { Signal = cts.Token });
49+
_ = Task.Run(async () =>
4750
{
48-
OnResult = (results) =>
51+
await foreach (var results in listener)
4952
{
5053
table.Rows.Clear();
5154
foreach (var line in results)
5255
{
5356
table.AddRow(line.id, line.name, line.owner_id, line.created_at);
5457
}
55-
},
56-
OnError = (error) =>
57-
{
58-
Console.WriteLine("Error: " + error.Message);
5958
}
60-
});
59+
}, cts.Token);
60+
```
6161

62-
```

demos/CommandLine/Demo.cs

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -67,23 +67,20 @@ static async Task Main()
6767

6868
bool running = true;
6969

70-
await db.Watch("select * from lists", null, new WatchHandler<ListResult>
70+
var listener = db.Watch<ListResult>("select * from lists");
71+
_ = Task.Run(async () =>
7172
{
72-
OnResult = (results) =>
73+
await foreach (var results in listener)
7374
{
7475
table.Rows.Clear();
7576
foreach (var line in results)
7677
{
7778
table.AddRow(line.id, line.name, line.owner_id, line.created_at);
7879
}
79-
},
80-
OnError = (error) =>
81-
{
82-
Console.WriteLine("Error: " + error.Message);
8380
}
8481
});
8582

86-
var _ = Task.Run(async () =>
83+
_ = Task.Run(async () =>
8784
{
8885
while (running)
8986
{

demos/MAUITodo/Views/ListsPage.xaml.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,15 +34,12 @@ protected override async void OnAppearing()
3434
}
3535
});
3636

37-
await database.Db.Watch("select * from lists", null, new WatchHandler<TodoList>
37+
var listener = database.Db.Watch<TodoList>("select * from lists", null, new() { TriggerImmediately = true });
38+
_ = Task.Run(async () =>
3839
{
39-
OnResult = (results) =>
40+
await foreach (var results in listener)
4041
{
4142
MainThread.BeginInvokeOnMainThread(() => { ListsCollection.ItemsSource = results.ToList(); });
42-
},
43-
OnError = (error) =>
44-
{
45-
Console.WriteLine("Error: " + error.Message);
4643
}
4744
});
4845
}

demos/MAUITodo/Views/TodoListPage.xaml.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,12 @@ protected override async void OnAppearing()
2424
{
2525
base.OnAppearing();
2626

27-
await database.Db.Watch("select * from todos where list_id = ?", [selectedList.ID], new WatchHandler<TodoItem>
27+
var listener = database.Db.Watch<TodoItem>("select * from todos where list_id = ?", [selectedList.ID], new() { TriggerImmediately = true });
28+
_ = Task.Run(async () =>
2829
{
29-
OnResult = (results) =>
30+
await foreach (var results in listener)
3031
{
3132
MainThread.BeginInvokeOnMainThread(() => { TodoItemsCollection.ItemsSource = results.ToList(); });
32-
},
33-
OnError = (error) =>
34-
{
35-
Console.WriteLine("Error: " + error.Message);
3633
}
3734
});
3835
}

demos/WPF/ViewModels/TodoListViewModel.cs

Lines changed: 14 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -147,32 +147,25 @@ ORDER BY
147147
last_completed_at DESC NULLS LAST;
148148
";
149149

150-
await _db.Watch(
151-
query,
152-
null,
153-
new WatchHandler<TodoListWithStats>
150+
var listener = _db.Watch<TodoListWithStats>(query);
151+
_ = Task.Run(async () =>
152+
{
153+
await foreach (var results in listener)
154154
{
155-
OnResult = (results) =>
155+
var dispatcher = System.Windows.Application.Current?.Dispatcher;
156+
if (dispatcher != null)
156157
{
157-
var dispatcher = System.Windows.Application.Current?.Dispatcher;
158-
if (dispatcher != null)
158+
dispatcher.Invoke(() =>
159159
{
160-
dispatcher.Invoke(() =>
160+
TodoLists.Clear();
161+
foreach (var result in results)
161162
{
162-
TodoLists.Clear();
163-
foreach (var result in results)
164-
{
165-
TodoLists.Add(result);
166-
}
167-
});
168-
}
169-
},
170-
OnError = (error) =>
171-
{
172-
Console.WriteLine("Error: " + error.Message);
173-
},
163+
TodoLists.Add(result);
164+
}
165+
});
166+
}
174167
}
175-
);
168+
});
176169
}
177170

178171
private async Task AddList(string newListName)

demos/WPF/ViewModels/TodoViewModel.cs

Lines changed: 14 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -105,32 +105,25 @@ public void SetList(TodoList list)
105105

106106
private async void WatchForChanges()
107107
{
108-
await _db.Watch(
109-
"SELECT * FROM todos where list_id = ? ORDER BY created_at;",
110-
[_list!.Id],
111-
new WatchHandler<Todo>
108+
var listener = _db.Watch<Todo>("SELECT * FROM todos where list_id = ? ORDER BY created_at;", [_list!.Id]);
109+
_ = Task.Run(async () =>
110+
{
111+
await foreach (var results in listener)
112112
{
113-
OnResult = (results) =>
113+
var dispatcher = System.Windows.Application.Current?.Dispatcher;
114+
if (dispatcher != null)
114115
{
115-
var dispatcher = System.Windows.Application.Current?.Dispatcher;
116-
if (dispatcher != null)
116+
dispatcher.Invoke(() =>
117117
{
118-
dispatcher.Invoke(() =>
118+
Todos.Clear();
119+
foreach (var result in results)
119120
{
120-
Todos.Clear();
121-
foreach (var result in results)
122-
{
123-
Todos.Add(result);
124-
}
125-
});
126-
}
127-
},
128-
OnError = (error) =>
129-
{
130-
Console.WriteLine("Error: " + error.Message);
131-
},
121+
Todos.Add(result);
122+
}
123+
});
124+
}
132125
}
133-
);
126+
});
134127
}
135128

136129
private async void LoadTodos()

0 commit comments

Comments
 (0)