From 6169a5e7cd1ea9196be7e802aec20f430ff1ead0 Mon Sep 17 00:00:00 2001 From: Jannik Date: Sat, 28 Oct 2017 16:43:04 +0200 Subject: [PATCH] added support for cemu 1.11 save path change see https://github.com/Seil0/cemu_UI/issues/6 --- bin/.gitignore | 1 + .../GoogleDriveController.class | Bin 14789 -> 14981 bytes .../GoogleDriveController.java | 39 +++++++++++------- 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/bin/.gitignore b/bin/.gitignore index b42b859..c23bbb3 100644 --- a/bin/.gitignore +++ b/bin/.gitignore @@ -1 +1,2 @@ /application/ +/cloudControllerInstances/ diff --git a/bin/cloudControllerInstances/GoogleDriveController.class b/bin/cloudControllerInstances/GoogleDriveController.class index e70cd05bf5fda810f121db748c412a540bc46c11..2a866440f47a36cfada1a0e75e1a55089c760247 100644 GIT binary patch delta 5166 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 delta 4925 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 diff --git a/src/cloudControllerInstances/GoogleDriveController.java b/src/cloudControllerInstances/GoogleDriveController.java index 7589d4c..9bcc3aa 100644 --- a/src/cloudControllerInstances/GoogleDriveController.java +++ b/src/cloudControllerInstances/GoogleDriveController.java @@ -56,7 +56,7 @@ import com.google.api.services.drive.model.FileList; public class GoogleDriveController { Drive service; - private String cemuDirectory; + private String saveDirectory; private String folderID; private ArrayList localSavegames = new ArrayList<>(); private ArrayList cloudSavegames = new ArrayList<>(); @@ -64,7 +64,7 @@ public class GoogleDriveController { private ArrayList cloudSavegamesName = new ArrayList<>(); private static final Logger LOGGER = LogManager.getLogger(GoogleDriveController.class.getName()); - private final String APPLICATION_NAME ="cemu_Ui Drive API Controller"; + private final String APPLICATION_NAME ="cemu_Ui Drive API Controller"; //TODO add Google //Directory to store user credentials for this application private final java.io.File DATA_STORE_DIR = new java.io.File(System.getProperty("user.home"), ".credentials/cemu_UI_credential"); @@ -104,6 +104,7 @@ public class GoogleDriveController { InputStream in = getClass().getClassLoader().getResourceAsStream("resources/client_secret.json"); GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in)); + //FIXME Linux fails to open a new browser window, application crashes // Build flow and trigger user authorization request. GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES) @@ -129,8 +130,18 @@ public class GoogleDriveController { public void main(String cemuDirectory) throws IOException { + java.io.File dir = new java.io.File(cemuDirectory + "/mlc01/usr/save"); + service = getDriveService(); - this.cemuDirectory = cemuDirectory; + + // cemu >= 1.11 uses /mlc01/usr/save/... instead of /mlc01/emulatorSave/... + if (dir.exists()) { + LOGGER.info("using new save path"); + saveDirectory = cemuDirectory + "/mlc01/usr/save"; + } else { + LOGGER.info("using old save path"); + saveDirectory = cemuDirectory + "/mlc01/emulatorSave"; + } } public void sync(String cemuDirectory) throws IOException { @@ -209,7 +220,7 @@ public class GoogleDriveController { //reading all local savegames private void getLocalSavegames() throws IOException { - java.io.File dir = new java.io.File(cemuDirectory+"/mlc01/emulatorSave"); + java.io.File dir = new java.io.File(saveDirectory); String[] extensions = new String[] { "dat","sav","bin" }; localSavegames.removeAll(localSavegames); localSavegamesName.removeAll(localSavegamesName); @@ -263,17 +274,17 @@ public class GoogleDriveController { //download a file from the cloud to the local savegames folder private void downloadFile(File downloadFile) throws IOException{ LOGGER.info("downloading "+downloadFile.getName()+" ..."); - java.io.File directory = new java.io.File(cemuDirectory+"/mlc01/emulatorSave/"+ downloadFile.getName().substring(0,8)); - String file = downloadFile.getName().substring(9,downloadFile.getName().length()); - if(!directory.exists()) { - LOGGER.info("dir dosent exist"); - directory.mkdir(); - } + java.io.File directory = new java.io.File(saveDirectory + "/" + downloadFile.getName().substring(0,8)); + String file = downloadFile.getName().substring(9,downloadFile.getName().length()); + if(!directory.exists()) { + LOGGER.info("dir dosent exist"); + directory.mkdir(); + } - OutputStream outputStream = new FileOutputStream(directory +"/"+ file); - service.files().get(downloadFile.getId()).executeMediaAndDownloadTo(outputStream); - outputStream.close(); - LOGGER.info("download successfull, File ID: " + file); //TODO add FileID + OutputStream outputStream = new FileOutputStream(directory +"/"+ file); + service.files().get(downloadFile.getId()).executeMediaAndDownloadTo(outputStream); + outputStream.close(); + LOGGER.info("download successfull, File ID: " + file); //TODO add FileID } //update a file in the cloud, by deleting the old one and uploading an new with the same id