package com.limegroup.gnutella.util;
/**
* A collection of core-related systems utilities,
* most of which will require native code to do correctly.
*/
public class SystemUtils {
/**
* Whether or not the native libraries could be loaded.
*/
private static boolean isLoaded;
static {
boolean canLoad;
try {
// Only load the library on systems where we've made it.
if(CommonUtils.isMacOSX()) {
System.loadLibrary("SystemUtilities");
} else if(CommonUtils.isWindows()) {
System.loadLibrary("GenericWindowsUtils");
if(CommonUtils.isWindows2000orXP()) {
System.loadLibrary("WindowsV5PlusUtils");
}
}
canLoad = true;
} catch(UnsatisfiedLinkError noGo) {
canLoad = false;
}
isLoaded = canLoad;
}
private SystemUtils() {}
/**
* Retrieves the amount of time the system has been idle, where
* idle means the user has not pressed a key, mouse button, or moved
* the mouse. The time returned is in milliseconds.
*/
public static long getIdleTime() {
if(supportsIdleTime())
return idleTime();
return 0;
}
/**
* Returns whether or not the idle time function is supported on this
* operating system.
*
* @return <tt>true</tt> if we're able to determine the idle time on this
* operating system, otherwise <tt>false</tt>
*/
public static boolean supportsIdleTime() {
if(isLoaded) {
if(CommonUtils.isWindows2000orXP())
return true;
else if(CommonUtils.isMacOSX())
return true;
}
return false;
}
/**
* Sets the number of open files, if supported.
*/
public static long setOpenFileLimit(int max) {
if(isLoaded && CommonUtils.isMacOSX())
return setOpenFileLimit0(max);
else
return -1;
}
/**
* Sets a file to be writeable. Package-access so FileUtils can delegate
* the filename given should ideally be a canonicalized filename.
*/
static void setWriteable(String fileName) {
if(isLoaded && (CommonUtils.isWindows() || CommonUtils.isMacOSX()))
setFileWriteable(fileName);
}
private static final native long idleTime();
private static final native int setFileWriteable(String filename);
private static final native int setOpenFileLimit0(int max);
}