mirror of
https://github.com/johrpan/musicus_mobile.git
synced 2025-10-25 19:27:24 +02:00
client: Add sync support
When deleting items, this needs to be explicitly activated. For now, everything will allways be synced as soon as one update with sync set to true is made. In the future, this will be done in the background.
This commit is contained in:
parent
9194b08254
commit
57735337d6
3 changed files with 129 additions and 11 deletions
|
|
@ -297,7 +297,12 @@ class MusicusClient {
|
|||
));
|
||||
|
||||
final json = jsonDecode(response.body);
|
||||
return json.map<Person>((j) => Person.fromJson(j)).toList();
|
||||
return json
|
||||
.map<Person>((j) => Person.fromJson(j).copyWith(
|
||||
sync: true,
|
||||
synced: true,
|
||||
))
|
||||
.toList();
|
||||
}
|
||||
|
||||
/// Get a person by ID.
|
||||
|
|
@ -307,7 +312,10 @@ class MusicusClient {
|
|||
));
|
||||
|
||||
final json = jsonDecode(response.body);
|
||||
return Person.fromJson(json);
|
||||
return Person.fromJson(json).copyWith(
|
||||
sync: true,
|
||||
synced: true,
|
||||
);
|
||||
}
|
||||
|
||||
/// Delete a person by ID.
|
||||
|
|
@ -358,7 +366,12 @@ class MusicusClient {
|
|||
));
|
||||
|
||||
final json = jsonDecode(response.body);
|
||||
return json.map<Instrument>((j) => Instrument.fromJson(j)).toList();
|
||||
return json
|
||||
.map<Instrument>((j) => Instrument.fromJson(j).copyWith(
|
||||
sync: true,
|
||||
synced: true,
|
||||
))
|
||||
.toList();
|
||||
}
|
||||
|
||||
/// Get an instrument by ID.
|
||||
|
|
@ -368,7 +381,10 @@ class MusicusClient {
|
|||
));
|
||||
|
||||
final json = jsonDecode(response.body);
|
||||
return Instrument.fromJson(json);
|
||||
return Instrument.fromJson(json).copyWith(
|
||||
sync: true,
|
||||
synced: true,
|
||||
);
|
||||
}
|
||||
|
||||
/// Create or update an instrument.
|
||||
|
|
@ -500,7 +516,12 @@ class MusicusClient {
|
|||
));
|
||||
|
||||
final json = jsonDecode(response.body);
|
||||
return json.map<Ensemble>((j) => Ensemble.fromJson(j)).toList();
|
||||
return json
|
||||
.map<Ensemble>((j) => Ensemble.fromJson(j).copyWith(
|
||||
sync: true,
|
||||
synced: true,
|
||||
))
|
||||
.toList();
|
||||
}
|
||||
|
||||
/// Get an ensemble by ID.
|
||||
|
|
@ -510,7 +531,10 @@ class MusicusClient {
|
|||
));
|
||||
|
||||
final json = jsonDecode(response.body);
|
||||
return Ensemble.fromJson(json);
|
||||
return Ensemble.fromJson(json).copyWith(
|
||||
sync: true,
|
||||
synced: true,
|
||||
);
|
||||
}
|
||||
|
||||
/// Create or update an ensemble.
|
||||
|
|
|
|||
|
|
@ -45,6 +45,50 @@ class MusicusClientDatabase extends _$MusicusClientDatabase {
|
|||
this.client,
|
||||
}) : super.connect(connection);
|
||||
|
||||
/// Upload all changes to the server.
|
||||
///
|
||||
/// If [update] is true, this will also update existing items with new data
|
||||
/// from the server.
|
||||
Future<void> sync([bool update = false]) async {
|
||||
if (update) {
|
||||
for (final person in await oldSyncPersons().get()) {
|
||||
await updatePerson(await client.getPerson(person.id));
|
||||
}
|
||||
for (final instrument in await oldSyncInstruments().get()) {
|
||||
await updateInstrument(await client.getInstrument(instrument.id));
|
||||
}
|
||||
for (final work in await oldSyncWorks().get()) {
|
||||
final workInfo = await client.getWork(work.id);
|
||||
await updateWork(workInfo);
|
||||
}
|
||||
for (final ensemble in await oldSyncEnsembles().get()) {
|
||||
await updateEnsemble(await client.getEnsemble(ensemble.id));
|
||||
}
|
||||
for (final recording in await oldSyncRecordings().get()) {
|
||||
final recordingInfo = await client.getRecording(recording.id);
|
||||
await updateRecording(recordingInfo);
|
||||
}
|
||||
}
|
||||
|
||||
for (final person in await newSyncPersons().get()) {
|
||||
await client.putPerson(person);
|
||||
}
|
||||
for (final instrument in await newSyncInstruments().get()) {
|
||||
await client.putInstrument(instrument);
|
||||
}
|
||||
for (final work in await newSyncWorks().get()) {
|
||||
final workInfo = await getWorkInfo(work);
|
||||
await client.putWork(workInfo);
|
||||
}
|
||||
for (final ensemble in await newSyncEnsembles().get()) {
|
||||
await client.putEnsemble(ensemble);
|
||||
}
|
||||
for (final recording in await newSyncRecordings().get()) {
|
||||
final recordingInfo = await getRecordingInfo(recording);
|
||||
await client.putRecording(recordingInfo);
|
||||
}
|
||||
}
|
||||
|
||||
/// Get all available persons.
|
||||
///
|
||||
/// This will return a list of [pageSize] persons. You can get another page
|
||||
|
|
@ -69,10 +113,14 @@ class MusicusClientDatabase extends _$MusicusClientDatabase {
|
|||
person,
|
||||
mode: InsertMode.insertOrReplace,
|
||||
);
|
||||
|
||||
if (person.sync) {
|
||||
await sync();
|
||||
}
|
||||
}
|
||||
|
||||
/// Delete the person by [id].
|
||||
///
|
||||
///
|
||||
/// If [sync] is true, the person will be deleted from the server too. If
|
||||
/// that fails, a MusicusNotAuthorizedException or MusicusNotLoggedInException
|
||||
/// willl be thrown and the person will NOT be deleted.
|
||||
|
|
@ -108,10 +156,14 @@ class MusicusClientDatabase extends _$MusicusClientDatabase {
|
|||
instrument,
|
||||
mode: InsertMode.insertOrReplace,
|
||||
);
|
||||
|
||||
if (instrument.sync) {
|
||||
await sync();
|
||||
}
|
||||
}
|
||||
|
||||
/// Delete the instrument by [id].
|
||||
///
|
||||
///
|
||||
/// If [sync] is true, the instrument will be deleted from the server too. If
|
||||
/// that fails, a MusicusNotAuthorizedException or MusicusNotLoggedInException
|
||||
/// willl be thrown and the instrument will NOT be deleted.
|
||||
|
|
@ -235,10 +287,14 @@ class MusicusClientDatabase extends _$MusicusClientDatabase {
|
|||
await into(workSections).insert(section);
|
||||
}
|
||||
});
|
||||
|
||||
if (workInfo.work.sync) {
|
||||
await sync();
|
||||
}
|
||||
}
|
||||
|
||||
/// Delete the work by [id].
|
||||
///
|
||||
///
|
||||
/// If [sync] is true, the work will be deleted from the server too. If
|
||||
/// that fails, a MusicusNotAuthorizedException or MusicusNotLoggedInException
|
||||
/// willl be thrown and the work will NOT be deleted.
|
||||
|
|
@ -276,10 +332,14 @@ class MusicusClientDatabase extends _$MusicusClientDatabase {
|
|||
ensemble,
|
||||
mode: InsertMode.insertOrReplace,
|
||||
);
|
||||
|
||||
if (ensemble.sync) {
|
||||
await sync();
|
||||
}
|
||||
}
|
||||
|
||||
/// Delete the ensemble by [id].
|
||||
///
|
||||
///
|
||||
/// If [sync] is true, the ensemble will be deleted from the server too. If
|
||||
/// that fails, a MusicusNotAuthorizedException or MusicusNotLoggedInException
|
||||
/// willl be thrown and the ensemble will NOT be deleted.
|
||||
|
|
@ -325,6 +385,10 @@ class MusicusClientDatabase extends _$MusicusClientDatabase {
|
|||
));
|
||||
}
|
||||
});
|
||||
|
||||
if (recordingInfo.recording.sync) {
|
||||
await sync();
|
||||
}
|
||||
}
|
||||
|
||||
/// Retreive more information on an already queried recording.
|
||||
|
|
@ -359,7 +423,7 @@ class MusicusClientDatabase extends _$MusicusClientDatabase {
|
|||
}
|
||||
|
||||
/// Delete a recording by [id].
|
||||
///
|
||||
///
|
||||
/// If [sync] is true, the recording will be deleted from the server too. If
|
||||
/// that fails, a MusicusNotAuthorizedException or MusicusNotLoggedInException
|
||||
/// willl be thrown and the recording will NOT be deleted.
|
||||
|
|
|
|||
|
|
@ -74,6 +74,12 @@ allPersons:
|
|||
SELECT * FROM persons ORDER BY last_name, first_name
|
||||
LIMIT :limit OFFSET :offset;
|
||||
|
||||
newSyncPersons:
|
||||
SELECT * FROM persons WHERE sync = TRUE AND synced = FALSE;
|
||||
|
||||
oldSyncPersons:
|
||||
SELECT * FROM persons WHERE sync = TRUE AND synced = TRUE;
|
||||
|
||||
searchPersons:
|
||||
SELECT * FROM persons WHERE last_name LIKE :search
|
||||
ORDER BY last_name, first_name LIMIT :limit OFFSET :offset;
|
||||
|
|
@ -84,6 +90,12 @@ SELECT * FROM persons WHERE id = :id LIMIT 1;
|
|||
allInstruments:
|
||||
SELECT * FROM instruments ORDER BY name LIMIT :limit OFFSET :offset;
|
||||
|
||||
newSyncInstruments:
|
||||
SELECT * FROM instruments WHERE sync = TRUE AND synced = FALSE;
|
||||
|
||||
oldSyncInstruments:
|
||||
SELECT * FROM instruments WHERE sync = TRUE AND synced = TRUE;
|
||||
|
||||
searchInstruments:
|
||||
SELECT * FROM instruments WHERE name LIKE :search ORDER BY name
|
||||
LIMIT :limit OFFSET :offset;
|
||||
|
|
@ -91,6 +103,12 @@ SELECT * FROM instruments WHERE name LIKE :search ORDER BY name
|
|||
instrumentById:
|
||||
SELECT * FROM instruments WHERE id = :id LIMIT 1;
|
||||
|
||||
newSyncWorks:
|
||||
SELECT * FROM works WHERE sync = TRUE AND synced = FALSE;
|
||||
|
||||
oldSyncWorks:
|
||||
SELECT * FROM works WHERE sync = TRUE AND synced = TRUE;
|
||||
|
||||
workById:
|
||||
SELECT * FROM works WHERE id = :id LIMIT 1;
|
||||
|
||||
|
|
@ -131,6 +149,12 @@ SELECT instruments.* FROM part_instrumentations
|
|||
allEnsembles:
|
||||
SELECT * FROM ensembles ORDER BY name LIMIT :limit OFFSET :offset;
|
||||
|
||||
newSyncEnsembles:
|
||||
SELECT * FROM ensembles WHERE sync = TRUE AND synced = FALSE;
|
||||
|
||||
oldSyncEnsembles:
|
||||
SELECT * FROM ensembles WHERE sync = TRUE AND synced = TRUE;
|
||||
|
||||
searchEnsembles:
|
||||
SELECT * FROM ensembles WHERE name LIKE :search ORDER BY name
|
||||
LIMIT :limit OFFSET :offset;
|
||||
|
|
@ -138,6 +162,12 @@ SELECT * FROM ensembles WHERE name LIKE :search ORDER BY name
|
|||
ensembleById:
|
||||
SELECT * FROM ensembles WHERE id = :id LIMIT 1;
|
||||
|
||||
newSyncRecordings:
|
||||
SELECT * FROM recordings WHERE sync = TRUE AND synced = FALSE;
|
||||
|
||||
oldSyncRecordings:
|
||||
SELECT * FROM recordings WHERE sync = TRUE AND synced = TRUE;
|
||||
|
||||
recordingById:
|
||||
SELECT * FROM recordings WHERE id = :id;
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue