FIXME
This commit is contained in:
parent
d059f7ed8e
commit
da53e4507c
@ -78,4 +78,10 @@ public interface SongDao {
|
||||
|
||||
@Query("DELETE FROM NoteSheet WHERE songID = :localID")
|
||||
void deleteNoteSheetsByLocalSongID(int localID);
|
||||
|
||||
@Update
|
||||
void updateNoteSheet(NoteSheet noteSheet);
|
||||
|
||||
@Query("SELECT * FROM NoteSheet WHERE serverFileName =:serverFileName")
|
||||
NoteSheet getNoteSheetByServerFileName(String serverFileName);
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
package com.stormtales.notevault.data.entities;
|
||||
|
||||
import androidx.room.Entity;
|
||||
import androidx.room.Ignore;
|
||||
import androidx.room.PrimaryKey;
|
||||
import com.stormtales.notevault.data.sync.SyncStatus;
|
||||
|
||||
@ -17,12 +18,27 @@ public class NoteSheet {
|
||||
|
||||
private SyncStatus syncStatus;
|
||||
|
||||
@Ignore
|
||||
public NoteSheet(String localFileName, String hash) {
|
||||
this.localFileName = localFileName;
|
||||
this.hash = hash;
|
||||
this.syncStatus = SyncStatus.CREATED;
|
||||
}
|
||||
|
||||
@Ignore
|
||||
public NoteSheet(int songID, String localFileName, String serverFileName, String hash) {
|
||||
this.songID = songID;
|
||||
this.localFileName = localFileName;
|
||||
this.serverFileName = serverFileName;
|
||||
this.hash = hash;
|
||||
this.syncStatus = SyncStatus.REMOTE_MODIFIED;
|
||||
}
|
||||
|
||||
|
||||
public NoteSheet() {
|
||||
|
||||
}
|
||||
|
||||
public int getLocalID() {
|
||||
return localID;
|
||||
}
|
||||
|
@ -47,6 +47,12 @@ public class Song {
|
||||
public Song() {
|
||||
}
|
||||
|
||||
@Ignore
|
||||
public Song(String serverID) {
|
||||
this.serverID = serverID;
|
||||
this.syncStatus = SyncStatus.REMOTE_MODIFIED;
|
||||
}
|
||||
|
||||
public int getLocalID() {
|
||||
return localID;
|
||||
}
|
||||
|
@ -168,10 +168,27 @@ public class SongSyncRepository {
|
||||
public void markSongsAsRemotelyModified(List<String> serverIDs) {
|
||||
Executors.newSingleThreadExecutor().execute(() -> {
|
||||
List<Song> songs = songDao.getSongsByServerIDs(serverIDs);
|
||||
List<Song> createdSongs = new ArrayList<>();
|
||||
for(Song song : songs) {
|
||||
song.setSyncStatus(SyncStatus.REMOTE_MODIFIED);
|
||||
}
|
||||
|
||||
for(String serverID : serverIDs) {
|
||||
boolean foundServerSong = false;
|
||||
for(Song song : songs) {
|
||||
if(song.getServerID().equals(serverID)) {
|
||||
foundServerSong = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(!foundServerSong) {
|
||||
Song song = new Song(serverID);
|
||||
createdSongs.add(song);
|
||||
}
|
||||
}
|
||||
songDao.updateSongs(songs);
|
||||
songDao.insertSongs(createdSongs);
|
||||
});
|
||||
}
|
||||
|
||||
@ -192,6 +209,7 @@ public class SongSyncRepository {
|
||||
|
||||
List<Song> onlyRemoteExistingSongs = new ArrayList<>();
|
||||
List<NoteSheet> outdatedNoteSheets = new ArrayList<>();
|
||||
List<NoteSheet> onlyRemoteNoteSheets = new ArrayList<>();
|
||||
for(SongModel songModel : remoteSongs) {
|
||||
boolean found = false;
|
||||
for(Song song : songs) {
|
||||
@ -206,16 +224,32 @@ public class SongSyncRepository {
|
||||
song.setGenre(songModel.getGenre());
|
||||
song.setYear(songModel.getYear());
|
||||
|
||||
for(NoteSheet noteSheet : noteSheets) {
|
||||
for(RemotelyModifiedNoteSheetModel remoteNoteSheet : songModel.getNote_sheets()) {
|
||||
if(remoteNoteSheet.getServer_filename().equals(noteSheet.getServerFileName())) {
|
||||
if(!remoteNoteSheet.getHash().equals(noteSheet.getHash())) {
|
||||
outdatedNoteSheets.add(noteSheet);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
for(RemotelyModifiedNoteSheetModel remoteNoteSheet : songModel.getNote_sheets()) {
|
||||
if(noteSheets.isEmpty()) {
|
||||
NoteSheet noteSheet = new NoteSheet(song.getLocalID(), remoteNoteSheet.getFilename(), remoteNoteSheet.getServer_filename(), null);
|
||||
onlyRemoteNoteSheets.add(noteSheet);
|
||||
outdatedNoteSheets.add(noteSheet);
|
||||
} else {
|
||||
boolean foundNoteSheet = false;
|
||||
for(NoteSheet noteSheet : outdatedNoteSheets) {
|
||||
if(remoteNoteSheet.getServer_filename().equals(noteSheet.getServerFileName())) {
|
||||
foundNoteSheet = true;
|
||||
if(!remoteNoteSheet.getHash().equals(noteSheet.getHash())) {
|
||||
outdatedNoteSheets.add(noteSheet);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!foundNoteSheet) {
|
||||
NoteSheet noteSheet = new NoteSheet(song.getLocalID(), remoteNoteSheet.getFilename(), remoteNoteSheet.getServer_filename(), null);
|
||||
onlyRemoteNoteSheets.add(noteSheet);
|
||||
outdatedNoteSheets.add(noteSheet);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
} else {
|
||||
removeSong(song);
|
||||
}
|
||||
@ -230,6 +264,7 @@ public class SongSyncRepository {
|
||||
|
||||
songDao.updateSongs(songs);
|
||||
songDao.insertSongs(onlyRemoteExistingSongs);
|
||||
songDao.insert(onlyRemoteNoteSheets);
|
||||
|
||||
Handler mainHandler = new Handler(Looper.getMainLooper());
|
||||
mainHandler.post(()-> callback.onResult(outdatedNoteSheets));
|
||||
@ -250,6 +285,17 @@ public class SongSyncRepository {
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
public void saveUpdatedNoteSheet(String serverFileName, String localFileName, String hash) {
|
||||
Executors.newSingleThreadExecutor().execute(()-> {
|
||||
NoteSheet noteSheet = songDao.getNoteSheetByServerFileName(serverFileName);
|
||||
noteSheet.setHash(hash);
|
||||
noteSheet.setLocalFileName(localFileName);
|
||||
songDao.updateNoteSheet(noteSheet);
|
||||
});
|
||||
}
|
||||
|
||||
public interface LoadDataCallback<T> {
|
||||
void onResult(T result);
|
||||
}
|
||||
|
@ -10,7 +10,7 @@ import retrofit2.Retrofit;
|
||||
import retrofit2.converter.gson.GsonConverterFactory;
|
||||
|
||||
public class NetworkModule {
|
||||
private static final String BASE_URL = "https://192.168.178.30:8000/";
|
||||
private static final String BASE_URL = "https://notevault.fawkes100.de/";
|
||||
private static Retrofit retrofit;
|
||||
|
||||
public static Retrofit getRetrofitInstance(Context context) {
|
||||
@ -25,7 +25,7 @@ public class NetworkModule {
|
||||
.build();
|
||||
|
||||
retrofit = new Retrofit.Builder()
|
||||
.baseUrl("http://192.168.178.30:8000/")
|
||||
.baseUrl(BASE_URL)
|
||||
.client(client)
|
||||
.addConverterFactory(GsonConverterFactory.create())
|
||||
.build();
|
||||
|
@ -33,7 +33,7 @@ public interface SongSyncAPI {
|
||||
@GET("/sync/songs/fetch")
|
||||
Call<FetchResponse> fetchRemoteModifiedSongs(@Query(value = "last_client_sync") String last_client_sync);
|
||||
|
||||
@GET("/sync/songs/get")
|
||||
@GET("/sync/songs/get/")
|
||||
Call<SongModel> fetchRemotelyModifiedSongData(@Query(value = "songID") String songID);
|
||||
|
||||
@GET("/sync/songs/get/notesheet/")
|
||||
|
@ -9,6 +9,7 @@ import com.stormtales.notevault.data.repositories.SongSyncRepository;
|
||||
import com.stormtales.notevault.network.sync.models.*;
|
||||
import com.stormtales.notevault.ui.gallery.GalleryViewModel;
|
||||
import com.stormtales.notevault.utils.NoteSheetsUtil;
|
||||
import com.stormtales.notevault.utils.Tupel;
|
||||
|
||||
import java.io.File;
|
||||
import java.time.LocalDateTime;
|
||||
@ -97,10 +98,17 @@ public class SongSyncModule {
|
||||
|
||||
public void getRemotelyModifiedSongData() {
|
||||
songSyncRepository.loadRemotelyModifiedSongs(songs -> {
|
||||
songSyncService.getRemotelyModifiedSongData(songs, remoteSongs -> {
|
||||
songSyncRepository.saveRemoteSongs(remoteSongs, this::downloadNoteSheets);
|
||||
|
||||
});
|
||||
if(songs.isEmpty()) {
|
||||
syncViewModel.finishFetching();
|
||||
} else {
|
||||
songSyncService.getRemotelyModifiedSongData(songs, remoteSongs -> {
|
||||
if(remoteSongs.isEmpty()) {
|
||||
syncViewModel.finishFetching();
|
||||
} else {
|
||||
songSyncRepository.saveRemoteSongs(remoteSongs, this::downloadNoteSheets);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
@ -110,7 +118,8 @@ public class SongSyncModule {
|
||||
songSyncService.downloadNoteSheet(noteSheet, responseBody -> {
|
||||
String localFilename = noteSheet.getServerFileName().substring(36);
|
||||
|
||||
NoteSheetsUtil.saveImageFromServer(responseBody, context.getFilesDir());
|
||||
Tupel<String, String> result = NoteSheetsUtil.saveImageFromServer(responseBody, context.getFilesDir());
|
||||
songSyncRepository.saveUpdatedNoteSheet(noteSheet.getServerFileName(), result.getValue00(), result.getValue01());
|
||||
});
|
||||
}
|
||||
syncViewModel.finishFetching();
|
||||
|
Loading…
Reference in New Issue
Block a user