summaryrefslogtreecommitdiffstats
path: root/src/main/java/com/btr/proxy/search/desktop/kde/KdeSettingsParser.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/btr/proxy/search/desktop/kde/KdeSettingsParser.java')
-rw-r--r--src/main/java/com/btr/proxy/search/desktop/kde/KdeSettingsParser.java132
1 files changed, 132 insertions, 0 deletions
diff --git a/src/main/java/com/btr/proxy/search/desktop/kde/KdeSettingsParser.java b/src/main/java/com/btr/proxy/search/desktop/kde/KdeSettingsParser.java
new file mode 100644
index 0000000..904528e
--- /dev/null
+++ b/src/main/java/com/btr/proxy/search/desktop/kde/KdeSettingsParser.java
@@ -0,0 +1,132 @@
+package com.btr.proxy.search.desktop.kde;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.util.Properties;
+
+import com.btr.proxy.util.Logger;
+import com.btr.proxy.util.Logger.LogLevel;
+
+/*****************************************************************************
+ * Parser for the KDE settings file.
+ * The KDE proxy settings are stored in the file:
+ * <p>
+ * <i>.kde/share/config/kioslaverc</i>
+ * </p>
+ * in the users home directory.
+ *
+ * @author Bernd Rosstauscher (proxyvole@rosstauscher.de) Copyright 2009
+ ****************************************************************************/
+
+public class KdeSettingsParser {
+
+ private File settingsFile;
+
+ /*************************************************************************
+ * Constructor
+ ************************************************************************/
+
+ public KdeSettingsParser() {
+ this(null);
+ }
+
+ /*************************************************************************
+ * Constructor
+ ************************************************************************/
+
+ public KdeSettingsParser(File settingsFile) {
+ super();
+ this.settingsFile = settingsFile;
+ }
+
+ /*************************************************************************
+ * Parse the settings file and extract all network.proxy.* settings from it.
+ * @return the parsed properties.
+ * @throws IOException on read error.
+ ************************************************************************/
+
+ public Properties parseSettings() throws IOException {
+ // Search for existing settings.
+ if (this.settingsFile == null) {
+ this.settingsFile = findSettingsFile();
+ }
+ if (this.settingsFile == null) {
+ return null;
+ }
+
+ // Read settings from file.
+ BufferedReader fin = new BufferedReader(
+ new InputStreamReader(
+ new FileInputStream(this.settingsFile)));
+
+ Properties result = new Properties();
+ try {
+ String line = fin.readLine();
+
+ // Find section start.
+ while (line != null && !"[Proxy Settings]".equals(line.trim())) {
+ line = fin.readLine();
+ }
+ if (line == null) {
+ return result;
+ }
+
+ // Read full section
+ line = "";
+ while (line != null && !line.trim().startsWith("[")) {
+ line = line.trim();
+ int index = line.indexOf('=');
+ if (index > 0) {
+ String key = line.substring(0, index).trim();
+ String value = line.substring(index+1).trim();
+ result.setProperty(key, value);
+ }
+
+ line = fin.readLine();
+ }
+ } finally {
+ fin.close();
+ }
+
+ return result;
+ }
+
+ /*************************************************************************
+ * Finds all the KDE network settings file.
+ * @return a file or null if does not exist.
+ ************************************************************************/
+
+ private File findSettingsFile() {
+ File userDir = new File(System.getProperty("user.home"));
+ if ("4".equals(System.getenv("KDE_SESSION_VERSION"))) {
+ this.settingsFile = findSettingsFile(
+ new File(userDir, ".kde4"+File.separator+"share"+File.separator+"config"+File.separator+"kioslaverc"));
+ }
+ if (this.settingsFile == null) {
+ return findSettingsFile(
+ new File(userDir, ".kde"+File.separator+"share"+File.separator+"config"+File.separator+"kioslaverc"));
+ } else {
+ return this.settingsFile;
+ }
+ }
+
+ /*************************************************************************
+ * Internal method to test if the settings file is at the given place.
+ * @param settingsFile the path to test.
+ * @return the file or null if it does not exist.
+ ************************************************************************/
+
+ private File findSettingsFile(File settingsFile) {
+ Logger.log(getClass(), LogLevel.TRACE, "Searching Kde settings in {0}", settingsFile);
+ if (!settingsFile.exists()) {
+ Logger.log(getClass(), LogLevel.DEBUG, "Settings not found");
+ return null;
+ }
+ Logger.log(getClass(), LogLevel.TRACE, "Settings found");
+ return settingsFile;
+ }
+
+}