nextNoteVault #23
@ -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