Search in sources :

Example 6 with Queue

use of com.github.mob41.osumer.queue.Queue in project osumer by mob41.

the class Daemon method addQueue.

@Override
public MethodResult<Integer> addQueue(String url, int downloadAction, String targetFileOrFolder) throws RemoteException {
    DumpManager.reportEvent("event", "queueAdd");
    String user = config.getUser();
    String pass = config.getPass();
    if (user == null || user.isEmpty() || pass == null || pass.isEmpty()) {
        return new MethodResult<Integer>(ErrorCode.RESULT_NO_CREDENTIALS);
    }
    try {
        osums.login(user, pass);
    } catch (WithDumpException e) {
        e.printStackTrace();
        return new MethodResult<Integer>(ErrorCode.RESULT_LOGIN_FAILED, e.getDump());
    }
    OsuSong map;
    try {
        if (url.contains("b/")) {
            map = osums.getBeatmapInfo(url);
        } else {
            map = osums.getSongInfo(url);
        }
    } catch (WithDumpException e) {
        e.printStackTrace();
        return new MethodResult<Integer>(ErrorCode.RESULT_GET_BEATMAP_INFO_FAILED, e.getDump());
    }
    String thumbUrl = "http:" + map.getThumbUrl();
    String dwnUrlStr = map.getDwnUrl();
    if (dwnUrlStr.length() <= 3) {
        return new MethodResult<Integer>(ErrorCode.RESULT_DOWNLOAD_URL_TOO_SHORT);
    }
    URL downloadUrl = null;
    try {
        downloadUrl = new URL("https://osu.ppy.sh" + dwnUrlStr);
    } catch (MalformedURLException e) {
        e.printStackTrace();
        return new MethodResult<Integer>(ErrorCode.RESULT_VALIDATE_DOWNLOAD_URL_FAILED);
    }
    String tmpdir = System.getProperty("java.io.tmpdir");
    final String mapName = map.getName();
    String fileName = dwnUrlStr.substring(3, map.getDwnUrl().length()) + " " + mapName;
    fileName = fileName.replaceAll("[\\/:*?\"<>|]", " ");
    OsuDownloader dwn = new OsuDownloader(tmpdir, fileName, osums, downloadUrl);
    QueueAction importAction;
    if (downloadAction == -1) {
        importAction = new BeatmapImportAction(config);
    } else {
        importAction = new CustomImportAction(downloadAction, targetFileOrFolder);
    }
    QueueAction[] beforeActions = new QueueAction[] { new BeforeSoundAction(config) };
    QueueAction[] afterActions = new QueueAction[] { new AfterSoundAction(config), new QueueAction() {

        @Override
        public void run(Queue queue) {
            trayIcon.displayMessage("Download completed for \"" + mapName + "\"", "This osumer queue has completed downloading.", TrayIcon.MessageType.INFO);
        }
    }, importAction };
    boolean added = queueManager.addQueue(new Queue(map.getName(), dwn, thumbUrl, beforeActions, afterActions));
    if (added) {
        trayIcon.displayMessage("Downloading \"" + mapName + "\"", "osumerExpress is downloading the requested beatmap!", TrayIcon.MessageType.INFO);
        dwn.addObserver(new Observer() {

            @Override
            public void update(Observable o, Object arg) {
                requestAllUiUpdateQueues();
            }
        });
        DumpManager.reportEvent("event", "queueAdded");
        if (!url.endsWith("/")) {
            String beatmapNum = url.replaceAll("\\D+", "");
            ;
            DumpManager.reportEvent("beatmap", "queueFrequency", beatmapNum);
        }
    } else {
        trayIcon.displayMessage("Could not add \"" + mapName + "\" to queue", "It has already in queue/downloading or completed.", TrayIcon.MessageType.INFO);
    }
    requestAllUiUpdateQueues();
    return new MethodResult<Integer>(ErrorCode.RESULT_OK);
}
Also used : BeforeSoundAction(com.github.mob41.osumer.queue.actions.BeforeSoundAction) MalformedURLException(java.net.MalformedURLException) AfterSoundAction(com.github.mob41.osumer.queue.actions.AfterSoundAction) WithDumpException(com.github.mob41.osumer.debug.WithDumpException) OsuSong(com.github.mob41.osums.beatmap.OsuSong) QueueAction(com.github.mob41.osumer.queue.QueueAction) URL(java.net.URL) Observable(java.util.Observable) CustomImportAction(com.github.mob41.osumer.queue.actions.CustomImportAction) Observer(java.util.Observer) OsuDownloader(com.github.mob41.osumer.io.OsuDownloader) UnicastRemoteObject(java.rmi.server.UnicastRemoteObject) BeatmapImportAction(com.github.mob41.osumer.queue.actions.BeatmapImportAction) Queue(com.github.mob41.osumer.queue.Queue) MethodResult(com.github.mob41.osumer.method.MethodResult)

Example 7 with Queue

use of com.github.mob41.osumer.queue.Queue in project osumer by mob41.

the class Daemon method removeQueue.

@Override
public boolean removeQueue(String name) throws RemoteException {
    DumpManager.reportEvent("event", "queueRemove");
    Queue queue = queueManager.getQueue(name);
    if (queue == null) {
        return false;
    }
    boolean result = queueManager.removeQueue(queue);
    if (result) {
        DumpManager.reportEvent("event", "queueRemoved");
        requestAllUiUpdateQueues();
    }
    return result;
}
Also used : Queue(com.github.mob41.osumer.queue.Queue)

Example 8 with Queue

use of com.github.mob41.osumer.queue.Queue in project osumer by mob41.

the class Main method main.

public static void main(String[] args) {
    try {
        DumpManager.init(Osumer.getVersionString(), Osumer.getVersionString());
    } catch (IOException e2) {
        e2.printStackTrace();
        System.err.println("DumpManager: Error initializing dump manager");
    }
    DumpManager.reportEvent("active", "launcher");
    ArgParser ap = new ArgParser(args);
    if (ap.isVersionFlag()) {
        System.out.println(Osumer.OSUMER_VERSION + "-" + Osumer.OSUMER_BRANCH + "-" + Osumer.OSUMER_BUILD_NUM);
        return;
    }
    // These are called by Windows when setting Default Programs
    if (ap.isHideIconsFlag() || ap.isShowIconsFlag() || ap.isReinstallFlag() || ap.isInstallFlag() || ap.isUninstallFlag()) {
        Installer installer = new Installer();
        if (ap.isHideIconsFlag()) {
            DumpManager.reportEvent("event", "launcherHideIcons");
            installer.hideIcons();
        } else if (ap.isShowIconsFlag()) {
            DumpManager.reportEvent("event", "launcherShowIcons");
            installer.showIcons();
        } else if (ap.isReinstallFlag()) {
            DumpManager.reportEvent("event", "launcherReinstall");
            installer.reinstall();
        }
        /* else if (ap.isInstallFlag()) {
                if (!ap.isQuietFlag() && !ap.isForceFlag()) {
                    int option = JOptionPane.showOptionDialog(null,
                            "You are installing osumer " + Osumer.OSUMER_VERSION + "-" + Osumer.OSUMER_BRANCH + "-"
                                    + Osumer.OSUMER_BUILD_NUM + ".\n" + "Are you sure?",
                            "Installing osumer", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, null,
                            JOptionPane.NO_OPTION);

                    if (option != JOptionPane.YES_OPTION) {
                        return;
                    }
                }

                try {
                    long startTime = System.currentTimeMillis();
                    installer.install();

                    if (!(ap.isQuietFlag() && ap.isForceFlag())) {
                        System.out.println("Info@U$\nInstallation success within "
                                + (System.currentTimeMillis() - startTime) + " ms\nInfo@D$");
                    }
                } catch (WithDumpException e) {
                    if (!ap.isNoUiFlag() && !GraphicsEnvironment.isHeadless()) {
                        //TODO: Error Dump Dialog Control
                        ErrorDumpDialog dialog = new ErrorDumpDialog(e.getDump());
                        dialog.setModal(true);
                        dialog.setVisible(true);
                    }

                    if (!(ap.isQuietFlag() && ap.isForceFlag())) {
                        System.out.println("Error@U$\n" + e.getDump().toString() + "Error@D$");
                    }
                }
            } else if (ap.isUninstallFlag()) {
                if (!ap.isQuietFlag() && !ap.isForceFlag()) {
                    int option = JOptionPane.showOptionDialog(null,
                            "You are uninstalling osumer " + Osumer.OSUMER_VERSION + "-" + Osumer.OSUMER_BRANCH + "-"
                                    + Osumer.OSUMER_BUILD_NUM + ".\n" + "Are you sure?",
                            "Uninstalling osumer", JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE, null, null,
                            JOptionPane.NO_OPTION);

                    if (option != JOptionPane.YES_OPTION) {
                        return;
                    }
                }

                try {
                    long startTime = System.currentTimeMillis();
                    installer.uninstall();

                    if (!(ap.isQuietFlag() && ap.isForceFlag())) {
                        System.out.println("Info@U$\nUninstallation success within "
                                + (System.currentTimeMillis() - startTime) + " ms\nInfo@D$");
                    }
                } catch (WithDumpException e) {
                    if (!ap.isNoUiFlag() && !GraphicsEnvironment.isHeadless()) {
                        //TODO: Error Dump Dialog Control
                        ErrorDumpDialog dialog = new ErrorDumpDialog(e.getDump());
                        dialog.setModal(true);
                        dialog.setVisible(true);
                    }

                    if (!(ap.isQuietFlag() && ap.isForceFlag())) {
                        System.out.println("Error@U$\n" + e.getDump().toString() + "Error@D$");
                    }
                }
            }*/
        DumpManager.forceMetricsReport();
        System.exit(0);
        return;
    }
    // 
    // Launch osumer system right here if no installation arguments
    // 
    String configPath = Osumer.isWindows() ? System.getenv("localappdata") + "\\osumerExpress" : "";
    Configuration config = new Configuration(configPath, Configuration.DEFAULT_DATA_FILE_NAME);
    try {
        config.load();
    } catch (IOException e1) {
        System.err.println("Unable to load configuration");
        e1.printStackTrace();
        DumpManager.addDump(new DebugDump(null, "Configuration initialization", "Load configuration", "Set String urlStr to null", "Unable to load configuration", false, e1));
        DumpManager.forceMetricsReport();
        if (!GraphicsEnvironment.isHeadless()) {
            JOptionPane.showMessageDialog(null, "Could not load configuration. For more details, check dump:\n" + e1, "Configuration Error", JOptionPane.ERROR_MESSAGE);
        }
        System.exit(-1);
        return;
    }
    String urlStr = null;
    for (int i = 0; i < args.length; i++) {
        if (config.isUseOldParser() ? OsumsOldParser.checkVaildBeatmapUrl(args[i]) : OsumsNewParser.checkVaildBeatmapUrl(args[i])) {
            urlStr = args[i];
            break;
        }
    }
    if (// Configuration
    (config.isSwitchToBrowserIfWithoutUiArg() && !ap.isUiFlag() && ap.isNoUiFlag()) || (urlStr != null && !config.isOEEnabled()) || (args != null && args.length > 0 && urlStr == null)) {
        // Browser if disabled OE
        runBrowser(config, args);
        DumpManager.reportEvent("event", "launcherRunBrowser");
        DumpManager.forceMetricsReport();
        System.exit(0);
        return;
    } else {
        IDaemon d = null;
        try {
            // Contact the daemon via RMI
            d = (IDaemon) Naming.lookup("rmi://localhost:46726/daemon");
        } catch (Exception e) {
        }
        if (d == null) {
            try {
                Runtime.getRuntime().exec("\"" + OsumerNative.getProgramFiles() + "\\osumer2\\osumer-daemon.exe\"");
            } catch (IOException e) {
                e.printStackTrace();
                DumpManager.addDump(new DebugDump(null, "Check if \"d\" is null", "Execute osumer-daemon.exe", "Initialize \"c\" as 0", "Could not start daemon. Terminating", false, e));
                DumpManager.forceMetricsReport();
                JOptionPane.showMessageDialog(null, "Could not start daemon. For more details, check dump. Terminating:\n" + e, "osumer launcher Error", JOptionPane.ERROR_MESSAGE);
                System.exit(-1);
                return;
            }
            int c = 0;
            while (c < 20) {
                try {
                    // Contact the daemon via RMI
                    d = (IDaemon) Naming.lookup("rmi://localhost:46726/daemon");
                } catch (Exception e) {
                }
                try {
                    Thread.sleep(50);
                } catch (InterruptedException e) {
                    break;
                }
                c++;
            }
            if (d == null) {
                DumpManager.addDump(new DebugDump(null, "(While-loop) Look up daemon RMI", "Check if \\\"d\\\" is null", "Check if \"urlStr\" is null", false, "Could not connect to daemon. Terminating"));
                DumpManager.forceMetricsReport();
                JOptionPane.showMessageDialog(null, "Could not connect to daemon. For more details, check dump. Terminating", "osumer launcher Error", JOptionPane.ERROR_MESSAGE);
                System.exit(-1);
                return;
            }
        }
        if (urlStr != null) {
            try {
                d.addQueue(urlStr);
                System.exit(0);
                return;
            } catch (RemoteException e) {
                e.printStackTrace();
                DumpManager.addDump(new DebugDump(null, "Check if \\\"urlStr\\\" is null", "Request daemon to add queue", "System Exit", "Could not connect or add queue to daemon", false, e));
                DumpManager.forceMetricsReport();
                JOptionPane.showMessageDialog(null, "Could not connect or add queue to daemon. For more details, check dump:\n" + e, "osumer launcher Error", JOptionPane.ERROR_MESSAGE);
                System.exit(-1);
                return;
            }
        }
        if (GraphicsEnvironment.isHeadless()) {
            System.out.println("Error: Arguments are required to use this application. Otherwise, a graphics environment is required to show the downloader UI.");
            System.exit(0);
            return;
        }
        runUi(config, args, ap, d);
    }
    DumpManager.forceMetricsReport();
}
Also used : Configuration(com.github.mob41.osumer.Configuration) Installer(com.github.mob41.osumer.installer.Installer) IOException(java.io.IOException) IDaemon(com.github.mob41.osumer.rmi.IDaemon) RemoteException(java.rmi.RemoteException) DebugDump(com.github.mob41.osumer.debug.DebugDump) IOException(java.io.IOException) RemoteException(java.rmi.RemoteException)

Example 9 with Queue

use of com.github.mob41.osumer.queue.Queue in project osumer by mob41.

the class MainController method requestQueue.

private boolean requestQueue(String url) {
    int downloadAction = -1;
    String targetFileOrFolder = null;
    if (rdBtnUseDefault.isSelected()) {
        downloadAction = -1;
    } else if (rdBtnDwnImport.isSelected()) {
        downloadAction = 0;
    } else if (rdBtnDwnOsuSong.isSelected()) {
        downloadAction = 1;
    } else if (rdBtnDwnFile.isSelected()) {
        downloadAction = 2;
        targetFileOrFolder = "";
    } else if (rdBtnDwnFolder.isSelected()) {
        downloadAction = 3;
        targetFileOrFolder = "";
    }
    MethodResult<Integer> result = null;
    try {
        result = d.addQueue(url, downloadAction, targetFileOrFolder);
    } catch (RemoteException e) {
        e.printStackTrace();
        DumpManager.addDump(new DebugDump(null, "Process download action", "Request daemon to add queue", "(Method End)", "Unable to request daemon to add queue", false, e));
        Alert alert = new Alert(AlertType.ERROR, e.getMessage(), ButtonType.OK);
        alert.setHeaderText("Unable to request daemon to add queue");
        alert.showAndWait();
        DumpManager.forceMetricsReport();
        return false;
    }
    if (result == null) {
        Alert alert = new Alert(AlertType.ERROR, "No result was returned from daemon.", ButtonType.OK);
        alert.setHeaderText("Unable to request daemon to add queue");
        alert.showAndWait();
        return false;
    } else if (result.getResult() != ErrorCode.RESULT_OK) {
        String header = null;
        String msg = null;
        AlertType type = null;
        switch(result.getResult()) {
            case ErrorCode.RESULT_NO_CREDENTIALS:
                header = "No credentials available";
                msg = "Please enter your credentials in the Preferences in order to download beatmaps.";
                type = AlertType.WARNING;
                break;
            case ErrorCode.RESULT_LOGIN_FAILED:
                header = "Login Failed";
                msg = "Please validate your credentials entered in the Preferences.";
                type = AlertType.ERROR;
                break;
            case ErrorCode.RESULT_GET_BEATMAP_INFO_FAILED:
                header = "Could not obtain beatmap info";
                msg = "Is your beatmap link/ID correct?";
                type = AlertType.ERROR;
                break;
            case ErrorCode.RESULT_VALIDATE_DOWNLOAD_URL_FAILED:
                header = "Invalid download link received";
                msg = "Is your beatmap link/ID correct?";
                type = AlertType.ERROR;
                break;
            default:
                header = "Unable to request daemon to add queue";
                msg = "Unknown result code.";
                type = AlertType.ERROR;
        }
        Alert alert = new Alert(type, msg, ButtonType.OK);
        alert.setHeaderText(header);
        alert.showAndWait();
        return false;
    } else {
        return true;
    }
}
Also used : AlertType(javafx.scene.control.Alert.AlertType) Alert(javafx.scene.control.Alert) RemoteException(java.rmi.RemoteException) DebugDump(com.github.mob41.osumer.debug.DebugDump)

Example 10 with Queue

use of com.github.mob41.osumer.queue.Queue in project osumer by mob41.

the class CustomImportAction method run.

@Override
public void run(Queue queue) {
    Downloader dwn = queue.getDownloader();
    String path = dwn.getDownloadFolder() + dwn.getFileName();
    File file = new File(path + ".osz");
    if (!file.exists()) {
        System.out.println("File not exists: " + path + ".osz");
        return;
    }
    if (action == 1 || action == 2 || action == 3) {
        String loc = null;
        if (action == 1) {
            loc = System.getenv("LOCALAPPDATA") + "\\osu!\\Songs";
        } else {
            loc = targetFileOrFolder;
        }
        if (action == 3) {
            File songsFolder = new File(loc);
            if (!songsFolder.exists()) {
                songsFolder.mkdirs();
            }
        }
        String filePath;
        if (action == 2) {
            if (!loc.endsWith(".osz")) {
                loc = loc + ".osz";
            }
            filePath = loc;
        } else {
            filePath = loc + "\\" + dwn.getFileName() + ".osz";
        }
        File toFile = new File(filePath);
        if (toFile.exists()) {
            toFile.delete();
        }
        FileOutputStream toFileOut;
        try {
            toFileOut = new FileOutputStream(toFile);
            Files.copy(file.toPath(), toFileOut);
            toFileOut.close();
        } catch (IOException e) {
            JOptionPane.showMessageDialog(null, "osumer Song Copy failed:\n\nFrom: " + path + "\nTo: " + loc + "\n\nMake sure you have access to that folder.\n" + e, "Error", JOptionPane.ERROR_MESSAGE);
            e.printStackTrace();
        }
    } else {
        try {
            Desktop.getDesktop().open(file);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
Also used : FileOutputStream(java.io.FileOutputStream) Downloader(com.github.mob41.osumer.io.Downloader) IOException(java.io.IOException) File(java.io.File)

Aggregations

IOException (java.io.IOException)9 File (java.io.File)8 DebugDump (com.github.mob41.osumer.debug.DebugDump)5 Queue (com.github.mob41.osumer.io.queue.Queue)4 FileOutputStream (java.io.FileOutputStream)4 MalformedURLException (java.net.MalformedURLException)4 URL (java.net.URL)4 Media (javafx.scene.media.Media)4 DebugDump (com.github.mob41.organdebug.DebugDump)3 DebuggableException (com.github.mob41.organdebug.exceptions.DebuggableException)3 Downloader (com.github.mob41.osumer.io.Downloader)3 QueueAction (com.github.mob41.osumer.io.queue.QueueAction)3 Queue (com.github.mob41.osumer.queue.Queue)3 Downloader (com.github.mob41.osums.io.Downloader)3 EventQueue (java.awt.EventQueue)3 MediaPlayer (javafx.scene.media.MediaPlayer)3 OsuDownloader (com.github.mob41.osumer.io.OsuDownloader)2 AfterSoundAction (com.github.mob41.osumer.io.queue.actions.AfterSoundAction)2 BeatmapImportAction (com.github.mob41.osumer.io.queue.actions.BeatmapImportAction)2 BeforeSoundAction (com.github.mob41.osumer.io.queue.actions.BeforeSoundAction)2