nextNoteVault #23
@ -51,4 +51,13 @@ public interface SongDao {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @Query("SELECT * FROM NoteSheet WHERE songID IN (:localSongIDs)")
 | 
					    @Query("SELECT * FROM NoteSheet WHERE songID IN (:localSongIDs)")
 | 
				
			||||||
    List<NoteSheet> getNoteSheetsBySongIDs(List<Integer> localSongIDs);
 | 
					    List<NoteSheet> getNoteSheetsBySongIDs(List<Integer> localSongIDs);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Query("SELECT * FROM NoteSheet WHERE songID IN (:songIDs)")
 | 
				
			||||||
 | 
					    List<NoteSheet> getNoteSheetsByLocalFiles(List<Integer> songIDs);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Update
 | 
				
			||||||
 | 
					    void updateNoteSheets(List<NoteSheet> uploadedNoteSheets);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Query("SELECT localID FROM Song WHERE serverID IN (:serverIDs)")
 | 
				
			||||||
 | 
					    List<Integer> getLocalSongIDsByServerIDs(List<String> serverIDs);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -11,6 +11,7 @@ public class NoteSheet {
 | 
				
			|||||||
    private int localID;
 | 
					    private int localID;
 | 
				
			||||||
    private int songID;
 | 
					    private int songID;
 | 
				
			||||||
    private String localFileName;
 | 
					    private String localFileName;
 | 
				
			||||||
 | 
					    private String serverFileName;
 | 
				
			||||||
    private String hash;
 | 
					    private String hash;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public NoteSheet(String localFileName, String hash) {
 | 
					    public NoteSheet(String localFileName, String hash) {
 | 
				
			||||||
@ -42,6 +43,14 @@ public class NoteSheet {
 | 
				
			|||||||
        this.hash = hash;
 | 
					        this.hash = hash;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getServerFileName() {
 | 
				
			||||||
 | 
					        return serverFileName;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setServerFileName(String serverFileName) {
 | 
				
			||||||
 | 
					        this.serverFileName = serverFileName;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public boolean equals(Object o) {
 | 
					    public boolean equals(Object o) {
 | 
				
			||||||
        if (o == null || getClass() != o.getClass()) return false;
 | 
					        if (o == null || getClass() != o.getClass()) return false;
 | 
				
			||||||
 | 
				
			|||||||
@ -11,7 +11,9 @@ import com.stormtales.notevault.data.sync.SyncStatus;
 | 
				
			|||||||
import com.stormtales.notevault.network.sync.models.BatchCreateResponse;
 | 
					import com.stormtales.notevault.network.sync.models.BatchCreateResponse;
 | 
				
			||||||
import com.stormtales.notevault.network.sync.models.BatchModifyResponse;
 | 
					import com.stormtales.notevault.network.sync.models.BatchModifyResponse;
 | 
				
			||||||
import com.stormtales.notevault.network.sync.models.CreateResponse;
 | 
					import com.stormtales.notevault.network.sync.models.CreateResponse;
 | 
				
			||||||
 | 
					import com.stormtales.notevault.network.sync.models.UploadResponse;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.io.File;
 | 
				
			||||||
import java.time.LocalDateTime;
 | 
					import java.time.LocalDateTime;
 | 
				
			||||||
import java.util.ArrayList;
 | 
					import java.util.ArrayList;
 | 
				
			||||||
import java.util.List;
 | 
					import java.util.List;
 | 
				
			||||||
@ -102,6 +104,24 @@ public class SongSyncRepository {
 | 
				
			|||||||
        });
 | 
					        });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void markCreatedNoteSheetsAsSynced(List<UploadResponse> uploadResponses) {
 | 
				
			||||||
 | 
					        Executors.newSingleThreadExecutor().execute(() -> {
 | 
				
			||||||
 | 
					            List<String> serverSongIDs = uploadResponses.stream().map(UploadResponse::getServerID).collect(Collectors.toList());
 | 
				
			||||||
 | 
					            List<Integer> localSongIDs = songDao.getLocalSongIDsByServerIDs(serverSongIDs);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            List<NoteSheet> uploadedNoteSheets = songDao.getNoteSheetsBySongIDs(localSongIDs);
 | 
				
			||||||
 | 
					            for(UploadResponse uploadResponse : uploadResponses) {
 | 
				
			||||||
 | 
					                for(NoteSheet noteSheet : uploadedNoteSheets) {
 | 
				
			||||||
 | 
					                    if(new File(noteSheet.getLocalFileName()).getName().equals(uploadResponse.getLocalFile())) {
 | 
				
			||||||
 | 
					                        noteSheet.setServerFileName(uploadResponse.getServerFile());
 | 
				
			||||||
 | 
					                        break;
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					            songDao.updateNoteSheets(uploadedNoteSheets);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public interface LoadDataCallback<T> {
 | 
					    public interface LoadDataCallback<T> {
 | 
				
			||||||
        void onResult(T result);
 | 
					        void onResult(T result);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -6,6 +6,7 @@ import com.stormtales.notevault.data.repositories.SongRepository;
 | 
				
			|||||||
import com.stormtales.notevault.data.repositories.SongSyncRepository;
 | 
					import com.stormtales.notevault.data.repositories.SongSyncRepository;
 | 
				
			||||||
import com.stormtales.notevault.network.sync.models.BatchCreateResponse;
 | 
					import com.stormtales.notevault.network.sync.models.BatchCreateResponse;
 | 
				
			||||||
import com.stormtales.notevault.network.sync.models.BatchModifyResponse;
 | 
					import com.stormtales.notevault.network.sync.models.BatchModifyResponse;
 | 
				
			||||||
 | 
					import com.stormtales.notevault.network.sync.models.UploadResponse;
 | 
				
			||||||
import com.stormtales.notevault.ui.gallery.GalleryViewModel;
 | 
					import com.stormtales.notevault.ui.gallery.GalleryViewModel;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.util.ArrayList;
 | 
					import java.util.ArrayList;
 | 
				
			||||||
@ -29,12 +30,17 @@ public class SongSyncModule {
 | 
				
			|||||||
        songSyncRepository.loadCreatedSongs(result -> {
 | 
					        songSyncRepository.loadCreatedSongs(result -> {
 | 
				
			||||||
            songSyncService.syncCreatedSongs(result, response -> {
 | 
					            songSyncService.syncCreatedSongs(result, response -> {
 | 
				
			||||||
                songSyncRepository.markCreatedSongsAsSynced(response);
 | 
					                songSyncRepository.markCreatedSongsAsSynced(response);
 | 
				
			||||||
 | 
					                if(response.getCreateResponses().isEmpty()) {
 | 
				
			||||||
 | 
					                    syncViewModel.finishCreateSongSyncing();
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
                    List<Integer> songIDs = result.stream().map(Song::getLocalID).collect(Collectors.toList());
 | 
					                    List<Integer> songIDs = result.stream().map(Song::getLocalID).collect(Collectors.toList());
 | 
				
			||||||
                    songSyncRepository.getNoteSheetFilesBySongIDs(songIDs, noteSheets -> {
 | 
					                    songSyncRepository.getNoteSheetFilesBySongIDs(songIDs, noteSheets -> {
 | 
				
			||||||
                    songSyncService.uploadNoteSheetsOfCreatedSongs(noteSheets, response, uploadResponse -> {
 | 
					                        songSyncService.uploadNoteSheetsOfCreatedSongs(noteSheets, response, uploadResponses -> {
 | 
				
			||||||
 | 
					                            songSyncRepository.markCreatedNoteSheetsAsSynced(uploadResponses);
 | 
				
			||||||
                            syncViewModel.finishCreateSongSyncing();
 | 
					                            syncViewModel.finishCreateSongSyncing();
 | 
				
			||||||
                        });
 | 
					                        });
 | 
				
			||||||
                    });
 | 
					                    });
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
        });
 | 
					        });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
				
			|||||||
@ -45,8 +45,8 @@ public class SongSyncService {
 | 
				
			|||||||
        });
 | 
					        });
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public void uploadNoteSheetsOfCreatedSongs(List<NoteSheet> noteSheets, BatchCreateResponse batchCreateResponse, SongSyncModule.FinishSongCreateSyncingCallback callback) {
 | 
					    public void uploadNoteSheetsOfCreatedSongs(List<NoteSheet> noteSheets, BatchCreateResponse batchCreateResponse, UploadNoteSheetCallback callback) {
 | 
				
			||||||
        final int[] responses = {0};
 | 
					        List<UploadResponse> uploadResponses = new ArrayList<>();
 | 
				
			||||||
        for(CreateResponse createResponse : batchCreateResponse.getCreateResponses()) {
 | 
					        for(CreateResponse createResponse : batchCreateResponse.getCreateResponses()) {
 | 
				
			||||||
            for(NoteSheet noteSheet : noteSheets) {
 | 
					            for(NoteSheet noteSheet : noteSheets) {
 | 
				
			||||||
                if(noteSheet.getSongID() == createResponse.getLocalID()) {
 | 
					                if(noteSheet.getSongID() == createResponse.getLocalID()) {
 | 
				
			||||||
@ -61,9 +61,11 @@ public class SongSyncService {
 | 
				
			|||||||
                    songSyncAPI.uploadNoteSheet(serverID, fileName, image).enqueue(new Callback<UploadResponse>() {
 | 
					                    songSyncAPI.uploadNoteSheet(serverID, fileName, image).enqueue(new Callback<UploadResponse>() {
 | 
				
			||||||
                        @Override
 | 
					                        @Override
 | 
				
			||||||
                        public void onResponse(Call<UploadResponse> call, Response<UploadResponse> response) {
 | 
					                        public void onResponse(Call<UploadResponse> call, Response<UploadResponse> response) {
 | 
				
			||||||
                            responses[0]++;
 | 
					                            if(response.isSuccessful() && response.body() != null) {
 | 
				
			||||||
                            if(responses[0] == batchCreateResponse.getCreateResponses().size()) {
 | 
					                                uploadResponses.add(response.body());
 | 
				
			||||||
                                callback.finishSongSyncing(batchCreateResponse);
 | 
					                                if(uploadResponses.size() == noteSheets.size()) {
 | 
				
			||||||
 | 
					                                    callback.finishUploadNoteSheets(uploadResponses);
 | 
				
			||||||
 | 
					                                }
 | 
				
			||||||
                            }
 | 
					                            }
 | 
				
			||||||
                        }
 | 
					                        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -128,4 +130,8 @@ public class SongSyncService {
 | 
				
			|||||||
    public interface SyncDeletedSongsCallback {
 | 
					    public interface SyncDeletedSongsCallback {
 | 
				
			||||||
        void finishSongSyncing(List<String> remoteDeletedSongs, List<Integer> localDeletedSongs);
 | 
					        void finishSongSyncing(List<String> remoteDeletedSongs, List<Integer> localDeletedSongs);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public interface UploadNoteSheetCallback {
 | 
				
			||||||
 | 
					        void finishUploadNoteSheets(List<UploadResponse> uploadResponses);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -2,6 +2,8 @@ package com.stormtales.notevault.network.sync.models;
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
public class UploadResponse {
 | 
					public class UploadResponse {
 | 
				
			||||||
    private String serverID;
 | 
					    private String serverID;
 | 
				
			||||||
 | 
					    private String localFile;
 | 
				
			||||||
 | 
					    private String serverFile;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    public String getServerID() {
 | 
					    public String getServerID() {
 | 
				
			||||||
        return serverID;
 | 
					        return serverID;
 | 
				
			||||||
@ -10,4 +12,20 @@ public class UploadResponse {
 | 
				
			|||||||
    public void setServerID(String serverID) {
 | 
					    public void setServerID(String serverID) {
 | 
				
			||||||
        this.serverID = serverID;
 | 
					        this.serverID = serverID;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getLocalFile() {
 | 
				
			||||||
 | 
					        return localFile;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setLocalFile(String localFile) {
 | 
				
			||||||
 | 
					        this.localFile = localFile;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public String getServerFile() {
 | 
				
			||||||
 | 
					        return serverFile;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    public void setServerFile(String serverFile) {
 | 
				
			||||||
 | 
					        this.serverFile = serverFile;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user