FIXME: Save ServerFileName for NoteSheets
This commit is contained in:
parent
dd0bfc2672
commit
d221502bef
@ -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);
|
||||||
List<Integer> songIDs = result.stream().map(Song::getLocalID).collect(Collectors.toList());
|
if(response.getCreateResponses().isEmpty()) {
|
||||||
songSyncRepository.getNoteSheetFilesBySongIDs(songIDs, noteSheets -> {
|
syncViewModel.finishCreateSongSyncing();
|
||||||
songSyncService.uploadNoteSheetsOfCreatedSongs(noteSheets, response, uploadResponse -> {
|
} else {
|
||||||
syncViewModel.finishCreateSongSyncing();
|
List<Integer> songIDs = result.stream().map(Song::getLocalID).collect(Collectors.toList());
|
||||||
|
songSyncRepository.getNoteSheetFilesBySongIDs(songIDs, noteSheets -> {
|
||||||
|
songSyncService.uploadNoteSheetsOfCreatedSongs(noteSheets, response, uploadResponses -> {
|
||||||
|
songSyncRepository.markCreatedNoteSheetsAsSynced(uploadResponses);
|
||||||
|
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