blob: 904528e40d052f042050e4263292c5ce69e332b1 (
plain) (
tree)
|
|
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;
}
}
|