diff --git a/Jenkinsfile b/Jenkinsfile new file mode 100644 index 0000000..ab989c4 --- /dev/null +++ b/Jenkinsfile @@ -0,0 +1,31 @@ +pipeline { + agent { + docker { + image 'maven:3-alpine' + args '-v /home/docker/jenkins/files/m2:/root/.m2' + } + } + + stages { + stage('Build') { + steps { + sh 'mvn -B -DskipTests clean package' + } + } + stage('Test') { + steps { + echo 'Skip testing...' + } + } + stage('Deploy') { + steps { + echo 'Skip deployment...' + } + } + } + post { + always { + archiveArtifacts artifacts: 'target/*-jar-with-dependencies.jar', onlyIfSuccessful: true + } + } +} \ No newline at end of file diff --git a/Main.java b/Main.java deleted file mode 100644 index ab76f68..0000000 --- a/Main.java +++ /dev/null @@ -1,60 +0,0 @@ -package mplayer4anime; -/** -Name: mplayer4anime -@author Dmitry Isaenko -License: GNU GPL v.3 -@version 0.11 -@see https://developersu.blogspot.com/search/label/mplayer4anime -@see https://github.com/developersu/mplayer4anime -2018, Russia -*/ - -import javafx.application.Application; -import javafx.fxml.FXMLLoader; -import javafx.scene.Parent; -import javafx.scene.Scene; -import javafx.scene.image.Image; -import javafx.stage.Stage; - -import java.util.Locale; -import java.util.ResourceBundle; - - -public class Main extends Application { - - public static void main(String[] args) { - launch(args); - } - - @Override - public void start(Stage primaryStage) throws Exception{ - FXMLLoader loader = new FXMLLoader(getClass().getResource("landingPage.fxml")); - - if (Locale.getDefault().getISO3Language().equals("rus")) { - loader.setResources(ResourceBundle.getBundle("mplayer4anime.localization.locale", new Locale("ru"))); - } else { - loader.setResources(ResourceBundle.getBundle("mplayer4anime.localization.locale", new Locale("en"))); - } - - Parent root = loader.load(); - - // tmp? - Controller controller = loader.getController(); - controller.setHostServices(getHostServices()); - // end - - primaryStage.getIcons().addAll( - new Image(Main.class.getResourceAsStream("/mplayer4anime/res/app_icon32x32.png")), - new Image(Main.class.getResourceAsStream("/mplayer4anime/res/app_icon48x48.png")), - new Image(Main.class.getResourceAsStream("/mplayer4anime/res/app_icon64x64.png")), - new Image(Main.class.getResourceAsStream("/mplayer4anime/res/app_icon128x128.png")) - ); - primaryStage.setTitle("mplayer4anime"); - primaryStage.setMinWidth(500); - primaryStage.setMinHeight(375); - primaryStage.setScene(new Scene(root, 1200, 800)); - // Make linkage to controller method to handle exit() event in there. - primaryStage.setOnHidden(e -> controller.shutdown()); - primaryStage.show(); - } -} diff --git a/Readme.md b/Readme.md index 14d1888..0eadd49 100644 --- a/Readme.md +++ b/Readme.md @@ -1,13 +1,13 @@ # mplayer4anime -mplayer4anime is mplayer launcher to play video file with audio layer and/or subtitles (.ass and .srt) at once. +mplayer4anime is mplayer launcher to play video file with audio layer and/or subtitles (.ass, .srt, etc,,,) at once. ## License Source code spreads under the GNU General Public License v.3. You can find it in LICENSE file or just visit www.gnu.org (it should be there for sure). Note: Since 0.10 application supports playlists management and implements own json-based format that (somehow) could be used in third-party application, -it would be nice to leave it as is. At least, I would prefer to have .alpr file extension used for this. As for the format of playlist format, please +it would be nice to leave it as is. At least, I would prefer to have .alpr file extension used for this. As for the format of playlist, please refer to WFTPL license. ## Used libraries diff --git a/lib/gson-2.8.5.jar b/lib/gson-2.8.5.jar deleted file mode 100644 index 0d5baf3..0000000 Binary files a/lib/gson-2.8.5.jar and /dev/null differ diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..2f3cd76 --- /dev/null +++ b/pom.xml @@ -0,0 +1,63 @@ + + + 4.0.0 + + loper + mplayer4anime + 0.12-SNAPSHOT + jar + InnaIrcBot + + UTF-8 + + + + com.google.code.gson + gson + 2.8.5 + compile + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.1 + + 1.8 + 1.8 + + + + org.apache.maven.plugins + maven-assembly-plugin + 2.5.3 + + + + + mplayer4anime.Main + + + + + jar-with-dependencies + + + + + make-assembly + package + + single + + + + + + + + \ No newline at end of file diff --git a/src/META-INF/MANIFEST.MF b/src/META-INF/MANIFEST.MF new file mode 100644 index 0000000..dcd19b4 --- /dev/null +++ b/src/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Main-Class: mplayer4anime.Main + diff --git a/About/AboutController.java b/src/main/java/mplayer4anime/About/AboutController.java similarity index 100% rename from About/AboutController.java rename to src/main/java/mplayer4anime/About/AboutController.java diff --git a/About/AboutWindow.java b/src/main/java/mplayer4anime/About/AboutWindow.java similarity index 66% rename from About/AboutWindow.java rename to src/main/java/mplayer4anime/About/AboutWindow.java index 61ee68d..0bacf66 100644 --- a/About/AboutWindow.java +++ b/src/main/java/mplayer4anime/About/AboutWindow.java @@ -20,13 +20,13 @@ public class AboutWindow { stageAbout.setMinWidth(500); stageAbout.setMinHeight(500); - FXMLLoader loaderAbout = new FXMLLoader(getClass().getResource("AboutLayout.fxml")); + FXMLLoader loaderAbout = new FXMLLoader(getClass().getResource("/About/AboutLayout.fxml")); ResourceBundle resourceBundle; if (Locale.getDefault().getISO3Language().equals("rus")) { - resourceBundle = ResourceBundle.getBundle("mplayer4anime.localization.locale", new Locale("ru")); + resourceBundle = ResourceBundle.getBundle("locale", new Locale("ru")); } else { - resourceBundle = ResourceBundle.getBundle("mplayer4anime.localization.locale", new Locale("en")); + resourceBundle = ResourceBundle.getBundle("locale", new Locale("en")); } loaderAbout.setResources(resourceBundle); @@ -37,10 +37,10 @@ public class AboutWindow { stageAbout.setTitle(resourceBundle.getString("about_AboutName")); stageAbout.getIcons().addAll( - new Image(Main.class.getResourceAsStream("/mplayer4anime/res/app_icon32x32.png")), - new Image(Main.class.getResourceAsStream("/mplayer4anime/res/app_icon48x48.png")), - new Image(Main.class.getResourceAsStream("/mplayer4anime/res/app_icon64x64.png")), - new Image(Main.class.getResourceAsStream("/mplayer4anime/res/app_icon128x128.png")) + new Image(Main.class.getResourceAsStream("/res/app_icon32x32.png")), + new Image(Main.class.getResourceAsStream("/res/app_icon48x48.png")), + new Image(Main.class.getResourceAsStream("/res/app_icon64x64.png")), + new Image(Main.class.getResourceAsStream("/res/app_icon128x128.png")) ); // TODO: change to something reliable stageAbout.setScene(new Scene(parentAbout, 500, 500)); diff --git a/AppPreferences.java b/src/main/java/mplayer4anime/AppPreferences.java similarity index 100% rename from AppPreferences.java rename to src/main/java/mplayer4anime/AppPreferences.java diff --git a/Controller.java b/src/main/java/mplayer4anime/Controller.java similarity index 93% rename from Controller.java rename to src/main/java/mplayer4anime/Controller.java index 004afe5..8f429fa 100644 --- a/Controller.java +++ b/src/main/java/mplayer4anime/Controller.java @@ -50,6 +50,13 @@ public class Controller implements Initializable { private CheckMenuItem subsHide; private String currentPlaylistLocation = null; //TODO: move to the constructor? + + // If application started with playlist passed as an argument, then we'll try to load it (if it's valid). + public void setPlaylistAsArgument(String playlist) { + JsonStorage jsonStorage = Playlists.ReadByPath(resourceBundle, new File(playlist)); + setAllLists(jsonStorage); + } + @Override public void initialize(URL url, ResourceBundle rb) { mkvPaneController.setPaneType("Video"); @@ -77,7 +84,7 @@ public class Controller implements Initializable { addRecentlyOpened(recentPlaylists[i]); } - public void setHostServices(HostServices hostServices) { + void setHostServices(HostServices hostServices) { this.hostServices = hostServices; } @@ -139,10 +146,19 @@ public class Controller implements Initializable { } int index; index = mkvPaneController.getElementSelectedIndex(); + // TODO: add 'link' button if (index+1 < mkvPaneController.getElementsCount() ) { mkvPaneController.setElementSelectedByIndex(index+1); - playBtn(); } + index = mkaPaneController.getElementSelectedIndex(); + if (index+1 < mkaPaneController.getElementsCount() ) { + mkaPaneController.setElementSelectedByIndex(index+1); + } + index = subPaneController.getElementSelectedIndex(); + if (index+1 < subPaneController.getElementsCount() ) { + subPaneController.setElementSelectedByIndex(index+1); + } + playBtn(); } private Process player; @@ -225,7 +241,6 @@ public class Controller implements Initializable { storeRecentArr[i] = (String) recentlyOpenedMenu.getItems().get(i).getUserData(); } appPreferences.setRecentPlaylists(storeRecentArr); - Platform.exit(); } @@ -260,6 +275,7 @@ public class Controller implements Initializable { subPaneController.selectEncodingValue(jsonStorage.getSubEncoding(), appPreferences); currentPlaylistLocation = Playlists.getPlaylistLocation(); // TODO: Implement listener? mmm... + //System.out.println(currentPlaylistLocation); statusLbl.setText(currentPlaylistLocation); addRecentlyOpened(currentPlaylistLocation); } @@ -308,17 +324,10 @@ public class Controller implements Initializable { MenuItem menuItem = new MenuItem(); String fileNameOnly; - if (playlistPath.contains("/")) { // Unix - fileNameOnly = playlistPath.substring(playlistPath.lastIndexOf("/") + 1, playlistPath.length()); - menuItem.setText(fileNameOnly); - } - else if (playlistPath.contains("\\")) { // Windows - fileNameOnly = playlistPath.substring(playlistPath.lastIndexOf("\\") + 1, playlistPath.length()); - menuItem.setText(fileNameOnly); - } - else { // Other o_0 - menuItem.setText(playlistPath); - } + + fileNameOnly = playlistPath.substring(playlistPath.lastIndexOf(File.separator) + 1); + menuItem.setText(fileNameOnly); + menuItem.setUserData(playlistPath); menuItem.setOnAction(new EventHandler() { @Override diff --git a/IMediatorContol.java b/src/main/java/mplayer4anime/IMediatorContol.java similarity index 100% rename from IMediatorContol.java rename to src/main/java/mplayer4anime/IMediatorContol.java diff --git a/src/main/java/mplayer4anime/IPC/ServerSocketProvider.java b/src/main/java/mplayer4anime/IPC/ServerSocketProvider.java new file mode 100644 index 0000000..5ee1142 --- /dev/null +++ b/src/main/java/mplayer4anime/IPC/ServerSocketProvider.java @@ -0,0 +1,48 @@ +package mplayer4anime.IPC; + +import javafx.application.Platform; +import mplayer4anime.Controller; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.ServerSocket; +import java.net.Socket; + +class ServerSocketProvider implements Runnable{ + + private ServerSocket serverSocket; + private Controller controller; + + ServerSocketProvider(Controller mainCntrl, ServerSocket srvSock){ + this.serverSocket = srvSock; + this.controller = mainCntrl; + } + + @Override + public void run() { + Socket servSockClient; + try{ + while (!serverSocket.isClosed()){ + servSockClient = serverSocket.accept(); + BufferedReader servInpRdr = new BufferedReader( + new InputStreamReader(servSockClient.getInputStream()) + ); + + String line = servInpRdr.readLine(); + // Avoid 'Not on FX application thread' error. + Platform.runLater(new Runnable() { + @Override + public void run() { + controller.setPlaylistAsArgument(line); + } + }); + + servSockClient.close(); + } + } + catch (IOException ex){ + System.out.println("Socket has been closed."); + } + } +} \ No newline at end of file diff --git a/src/main/java/mplayer4anime/IPC/SingleInstanceHandler.java b/src/main/java/mplayer4anime/IPC/SingleInstanceHandler.java new file mode 100644 index 0000000..2ddecac --- /dev/null +++ b/src/main/java/mplayer4anime/IPC/SingleInstanceHandler.java @@ -0,0 +1,55 @@ +package mplayer4anime.IPC; + +import mplayer4anime.Controller; + +import java.io.*; +import java.net.InetAddress; +import java.net.ServerSocket; +import java.net.Socket; + +public class SingleInstanceHandler implements Runnable{ + + private ServerSocket servSock; + + public SingleInstanceHandler(Controller mainCntrl, String argument){ + int PORT = 65042; + // Creating client server socket; + try { + servSock = new ServerSocket(PORT, 10, InetAddress.getLocalHost()); + Thread ssp = new Thread(new ServerSocketProvider(mainCntrl, servSock)); + ssp.start(); + } catch (IOException e) { + if (argument != null){ + // Creating client socket; + try { + Socket clientSocket = new Socket(InetAddress.getLocalHost(), PORT); + OutputStream outStream = clientSocket.getOutputStream(); + OutputStreamWriter outStreamWriter = new OutputStreamWriter(outStream); + outStreamWriter.write(argument + "\n"); + outStreamWriter.flush(); + outStream.close(); + clientSocket.close(); + } catch (IOException ex){ + System.out.println("Internal issue: unable to create client socket."); + } + } + else + System.out.println("Application is already running."); + System.exit(0); + } + } + + @Override + public void run() { + while (true) { + if ( Thread.currentThread().isInterrupted() ){ + try { + servSock.close(); + } catch (IOException e) { + System.out.println("Internal issue: unable to create client socket."); + } + break; + } + } + } +} \ No newline at end of file diff --git a/LineRedirecter.java b/src/main/java/mplayer4anime/LineRedirecter.java similarity index 100% rename from LineRedirecter.java rename to src/main/java/mplayer4anime/LineRedirecter.java diff --git a/src/main/java/mplayer4anime/Main.java b/src/main/java/mplayer4anime/Main.java new file mode 100644 index 0000000..c93bd64 --- /dev/null +++ b/src/main/java/mplayer4anime/Main.java @@ -0,0 +1,77 @@ +package mplayer4anime; +/** +Name: mplayer4anime +@author Dmitry Isaenko +License: GNU GPL v.3 +@version 0.12 +@see https://developersu.blogspot.com/search/label/mplayer4anime +@see https://github.com/developersu/mplayer4anime +2018-2019, Russia +*/ + +import javafx.application.Application; +import javafx.fxml.FXMLLoader; +import javafx.scene.Parent; +import javafx.scene.Scene; +import javafx.scene.image.Image; +import javafx.stage.Stage; +import mplayer4anime.IPC.SingleInstanceHandler; + +import java.util.Locale; +import java.util.ResourceBundle; + +//TODO: Use one copy of AppPreferences object widely +//TODO: Drag-n-drop playlist/files/audio +//TODO: remember selected +//TODO: remember position +public class Main extends Application { + + public static void main(String[] args) { launch(args); } + + @Override + public void start(Stage primaryStage) throws Exception{ + FXMLLoader loader = new FXMLLoader(getClass().getResource("/landingPage.fxml")); + + if (Locale.getDefault().getISO3Language().equals("rus")) { + loader.setResources(ResourceBundle.getBundle("locale", new Locale("ru"))); + } else { + loader.setResources(ResourceBundle.getBundle("locale", new Locale("en"))); + } + + Parent root = loader.load(); + + // tmp? + Controller controller = loader.getController(); + controller.setHostServices(getHostServices()); + SingleInstanceHandler sih; + + if (!getParameters().getUnnamed().isEmpty()) + sih = new SingleInstanceHandler(controller, getParameters().getUnnamed().get(0)); + else + sih = new SingleInstanceHandler(controller, null); + // end + Thread tsih = new Thread(sih); + tsih.start(); + + // TODO: refactor needed? + Runtime.getRuntime().addShutdownHook(new Thread(() -> tsih.interrupt())); + + primaryStage.getIcons().addAll( + new Image(Main.class.getResourceAsStream("/res/app_icon32x32.png")), + new Image(Main.class.getResourceAsStream("/res/app_icon48x48.png")), + new Image(Main.class.getResourceAsStream("/res/app_icon64x64.png")), + new Image(Main.class.getResourceAsStream("/res/app_icon128x128.png")) + ); + primaryStage.setTitle("mplayer4anime"); + primaryStage.setMinWidth(500); + primaryStage.setMinHeight(375); + primaryStage.setScene(new Scene(root, 1200, 800)); + // Make linkage to controller method to handle exit() event in there. + primaryStage.setOnHidden(e -> { + tsih.interrupt(); + controller.shutdown(); + }); + + primaryStage.show(); + } +} diff --git a/MediatorControl.java b/src/main/java/mplayer4anime/MediatorControl.java similarity index 100% rename from MediatorControl.java rename to src/main/java/mplayer4anime/MediatorControl.java diff --git a/Playlists/JsonStorage.java b/src/main/java/mplayer4anime/Playlists/JsonStorage.java similarity index 100% rename from Playlists/JsonStorage.java rename to src/main/java/mplayer4anime/Playlists/JsonStorage.java diff --git a/Playlists/Playlists.java b/src/main/java/mplayer4anime/Playlists/Playlists.java similarity index 96% rename from Playlists/Playlists.java rename to src/main/java/mplayer4anime/Playlists/Playlists.java index 923934b..32a4392 100644 --- a/Playlists/Playlists.java +++ b/src/main/java/mplayer4anime/Playlists/Playlists.java @@ -5,6 +5,7 @@ import javafx.stage.FileChooser; import mplayer4anime.ServiceWindow; import java.io.*; +import java.nio.charset.StandardCharsets; import java.util.ResourceBundle; public class Playlists { @@ -45,7 +46,7 @@ public class Playlists { if (!playlistFile.getAbsolutePath().endsWith(".alpr")) { playlistFile = new File(playlistFile.getAbsolutePath() + ".alpr"); } - try (Writer writer = new OutputStreamWriter(new FileOutputStream(playlistFile.getAbsolutePath()), "UTF-8")) + try (Writer writer = new OutputStreamWriter(new FileOutputStream(playlistFile.getAbsolutePath()), StandardCharsets.UTF_8)) { Gson jsonObject = new GsonBuilder().setPrettyPrinting().create(); jsonObject.toJson(jStorage, writer); @@ -93,6 +94,7 @@ public class Playlists { JsonStorage jStorage = new Gson().fromJson(reader, JsonStorage.class); if (jStorage != null){ playlistLocation = playlistFile.getAbsolutePath(); + //System.out.println("FILE:|"+playlistLocation+"|"); return jStorage; } else @@ -116,4 +118,4 @@ public class Playlists { public static String getPlaylistLocation(){ return playlistLocation; } -} +} \ No newline at end of file diff --git a/ServiceWindow.java b/src/main/java/mplayer4anime/ServiceWindow.java similarity index 100% rename from ServiceWindow.java rename to src/main/java/mplayer4anime/ServiceWindow.java diff --git a/Settings/ControllerListsSelector.java b/src/main/java/mplayer4anime/Settings/ControllerListsSelector.java similarity index 100% rename from Settings/ControllerListsSelector.java rename to src/main/java/mplayer4anime/Settings/ControllerListsSelector.java diff --git a/Settings/SettingsController.java b/src/main/java/mplayer4anime/Settings/SettingsController.java similarity index 100% rename from Settings/SettingsController.java rename to src/main/java/mplayer4anime/Settings/SettingsController.java diff --git a/Settings/SettingsWindow.java b/src/main/java/mplayer4anime/Settings/SettingsWindow.java similarity index 64% rename from Settings/SettingsWindow.java rename to src/main/java/mplayer4anime/Settings/SettingsWindow.java index 2e9731f..3c49837 100644 --- a/Settings/SettingsWindow.java +++ b/src/main/java/mplayer4anime/Settings/SettingsWindow.java @@ -19,13 +19,13 @@ public class SettingsWindow { stageAbout.setMinWidth(570); stageAbout.setMinHeight(500); - FXMLLoader loaderSettings = new FXMLLoader(getClass().getResource("SettingsLayout.fxml")); + FXMLLoader loaderSettings = new FXMLLoader(getClass().getResource("/Settings/SettingsLayout.fxml")); ResourceBundle resourceBundle; if (Locale.getDefault().getISO3Language().equals("rus")) { - resourceBundle = ResourceBundle.getBundle("mplayer4anime.localization.locale", new Locale("ru")); + resourceBundle = ResourceBundle.getBundle("locale", new Locale("ru")); } else { - resourceBundle = ResourceBundle.getBundle("mplayer4anime.localization.locale", new Locale("en")); + resourceBundle = ResourceBundle.getBundle("locale", new Locale("en")); } loaderSettings.setResources(resourceBundle); @@ -36,10 +36,10 @@ public class SettingsWindow { stageAbout.setTitle(resourceBundle.getString("settings_SettingsName")); stageAbout.getIcons().addAll( - new Image(Main.class.getResourceAsStream("/mplayer4anime/res/settings_icon32x32.png")), - new Image(Main.class.getResourceAsStream("/mplayer4anime/res/settings_icon48x48.png")), - new Image(Main.class.getResourceAsStream("/mplayer4anime/res/settings_icon64x64.png")), - new Image(Main.class.getResourceAsStream("/mplayer4anime/res/settings_icon128x128.png")) + new Image(Main.class.getResourceAsStream("/res/settings_icon32x32.png")), + new Image(Main.class.getResourceAsStream("/res/settings_icon48x48.png")), + new Image(Main.class.getResourceAsStream("/res/settings_icon64x64.png")), + new Image(Main.class.getResourceAsStream("/res/settings_icon128x128.png")) ); // TODO: change to something reliable stageAbout.setScene(new Scene(parentAbout, 570, 500)); stageAbout.show(); diff --git a/appPanes/ControllerPane.java b/src/main/java/mplayer4anime/appPanes/ControllerPane.java similarity index 100% rename from appPanes/ControllerPane.java rename to src/main/java/mplayer4anime/appPanes/ControllerPane.java diff --git a/appPanes/ControllerSUB.java b/src/main/java/mplayer4anime/appPanes/ControllerSUB.java similarity index 100% rename from appPanes/ControllerSUB.java rename to src/main/java/mplayer4anime/appPanes/ControllerSUB.java diff --git a/About/AboutLayout.fxml b/src/main/resources/About/AboutLayout.fxml similarity index 100% rename from About/AboutLayout.fxml rename to src/main/resources/About/AboutLayout.fxml diff --git a/Settings/ListSelector.fxml b/src/main/resources/Settings/ListSelector.fxml similarity index 100% rename from Settings/ListSelector.fxml rename to src/main/resources/Settings/ListSelector.fxml diff --git a/Settings/SettingsLayout.fxml b/src/main/resources/Settings/SettingsLayout.fxml similarity index 100% rename from Settings/SettingsLayout.fxml rename to src/main/resources/Settings/SettingsLayout.fxml diff --git a/appPanes/genericPane.fxml b/src/main/resources/appPanes/genericPane.fxml similarity index 100% rename from appPanes/genericPane.fxml rename to src/main/resources/appPanes/genericPane.fxml diff --git a/appPanes/subPane.fxml b/src/main/resources/appPanes/subPane.fxml similarity index 100% rename from appPanes/subPane.fxml rename to src/main/resources/appPanes/subPane.fxml diff --git a/landingPage.fxml b/src/main/resources/landingPage.fxml similarity index 100% rename from landingPage.fxml rename to src/main/resources/landingPage.fxml diff --git a/localization/locale_en.properties b/src/main/resources/locale_en.properties similarity index 97% rename from localization/locale_en.properties rename to src/main/resources/locale_en.properties index 1577da6..5eda1f5 100644 --- a/localization/locale_en.properties +++ b/src/main/resources/locale_en.properties @@ -1,5 +1,5 @@ about_line1=mplayer4amine distributes under GNU GPLv3 license. -about_line2=Release: v0.11 +about_line2=Release: v0.12 about_line3=Development & maintenance by Dmitry Isaenko. about_AboutName=About main_tab_audio=Audio @@ -30,7 +30,7 @@ menu_File=File menu_Tools=Tools menu_Help=Help menu_Help_AboutApp=About -menu_File_Close=Close +menu_File_Close=Exit menu_Tools_Settings=Settings menu_File_Open=Open playlist... menu_File_Save=Save playlist diff --git a/localization/locale_ru.properties b/src/main/resources/locale_ru.properties similarity index 98% rename from localization/locale_ru.properties rename to src/main/resources/locale_ru.properties index f563e41..2527455 100644 --- a/localization/locale_ru.properties +++ b/src/main/resources/locale_ru.properties @@ -1,6 +1,6 @@ menu_File_Recent=\u041F\u043E\u0441\u043B\u0435\u0434\u043D\u0438\u0435 \u0444\u0430\u0439\u043B\u044B... about_line1=mplayer4amine \u0440\u0430\u0441\u043F\u0440\u043E\u0441\u0442\u0440\u0430\u043D\u044F\u0435\u0442\u0441\u044F \u043F\u043E \u043B\u0438\u0446\u0435\u043D\u0437\u0438\u0438 GNU GPLv3. -about_line2=\u0420\u0435\u043B\u0438\u0437: v0.11 +about_line2=\u0420\u0435\u043B\u0438\u0437: v0.12 about_line3=\u0420\u0430\u0437\u0440\u0430\u0431\u043E\u0442\u0430\u043D\u043E \u0438 \u043F\u043E\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044F \u0414\u043C\u0438\u0442\u0440\u0438\u0435\u043C \u0418\u0441\u0430\u0435\u043D\u043A\u043E. about_AboutName=\u041E \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 main_tab_audio=\u0410\u0443\u0434\u0438\u043E @@ -31,7 +31,7 @@ menu_File=\u0424\u0430\u0439\u043B menu_Tools=\u0418\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B menu_Help=\u0421\u043F\u0440\u0430\u0432\u043A\u0430 menu_Help_AboutApp=\u041E \u043F\u0440\u0438\u043B\u043E\u0436\u0435\u043D\u0438\u0438 -menu_File_Close=\u0417\u0430\u043A\u0440\u044B\u0442\u044C +menu_File_Close=\u0412\u044B\u0445\u043E\u0434 menu_Tools_Settings=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 menu_File_Open=\u041E\u0442\u043A\u0440\u044B\u0442\u044C \u043F\u043B\u0435\u0439\u043B\u0438\u0441\u0442... menu_File_Save=\u0421\u043E\u0445\u0440\u0430\u043D\u0438\u0442\u044C \u043F\u043B\u0435\u0439\u043B\u0438\u0441\u0442 diff --git a/res/app_icon128x128.png b/src/main/resources/res/app_icon128x128.png similarity index 100% rename from res/app_icon128x128.png rename to src/main/resources/res/app_icon128x128.png diff --git a/res/app_icon32x32.png b/src/main/resources/res/app_icon32x32.png similarity index 100% rename from res/app_icon32x32.png rename to src/main/resources/res/app_icon32x32.png diff --git a/res/app_icon48x48.png b/src/main/resources/res/app_icon48x48.png similarity index 100% rename from res/app_icon48x48.png rename to src/main/resources/res/app_icon48x48.png diff --git a/res/app_icon64x64.png b/src/main/resources/res/app_icon64x64.png similarity index 100% rename from res/app_icon64x64.png rename to src/main/resources/res/app_icon64x64.png diff --git a/res/gjel.png b/src/main/resources/res/gjel.png similarity index 100% rename from res/gjel.png rename to src/main/resources/res/gjel.png diff --git a/res/landing.css b/src/main/resources/res/landing.css similarity index 100% rename from res/landing.css rename to src/main/resources/res/landing.css diff --git a/res/pocket.png b/src/main/resources/res/pocket.png similarity index 100% rename from res/pocket.png rename to src/main/resources/res/pocket.png diff --git a/res/settings_icon128x128.png b/src/main/resources/res/settings_icon128x128.png similarity index 100% rename from res/settings_icon128x128.png rename to src/main/resources/res/settings_icon128x128.png diff --git a/res/settings_icon32x32.png b/src/main/resources/res/settings_icon32x32.png similarity index 100% rename from res/settings_icon32x32.png rename to src/main/resources/res/settings_icon32x32.png diff --git a/res/settings_icon48x48.png b/src/main/resources/res/settings_icon48x48.png similarity index 100% rename from res/settings_icon48x48.png rename to src/main/resources/res/settings_icon48x48.png diff --git a/res/settings_icon64x64.png b/src/main/resources/res/settings_icon64x64.png similarity index 100% rename from res/settings_icon64x64.png rename to src/main/resources/res/settings_icon64x64.png