static int cleanJavaXCache_msgInterval = 1000; static void cleanJavaXCache(int retentionHours, bool verbose) { pcall { if (verbose) System.out.println("Cleaning JavaX Cache (" + retentionHours + " hours retention time)"); int fileDeletions = 0; File javax = new File(userHome(), ".javax"); long now = now(), msgPrinted = now(); File[] files = javax.listFiles(); int scanned = 0, deleted = 0; if (files != null) for (File dir : files) { ++scanned; if (now() >= msgPrinted+cleanJavaXCache_msgInterval) { print("Cleaning cache (" + scanned + "/" + n(files, "dir") + " scanned, " + deleted + " deleted)..."); msgPrinted = now(); } if (dir.isDirectory() && Pattern.compile("\\d+").matcher(dir.getName()).matches()) { long time = Long.parseLong(dir.getName()); long seconds = (now - time) / 1000; long minutes = seconds / 60; long hours = minutes / 60; if (hours >= retentionHours) { //System.out.println("Can delete " + dir.getAbsolutePath() + ", age: " + hours + " h"); fileDeletions += cleanJavaXCache_removeDir(dir, verbose); ++deleted; } } } if (verbose && fileDeletions != 0) print("Cleaned cache. File deletions: " + fileDeletions); } } static int cleanJavaXCache_removeDir(File dir, bool verbose) { int fileDeletions = 0; if (dir == null) ret fileDeletions; if (dir.getAbsolutePath().indexOf(".javax") < 0) // security check! fail("WHAT ARE YOU DOING!? >> " + dir.getAbsolutePath()); for (File f : dir.listFiles()) { if (f.isDirectory()) cleanJavaXCache_removeDir(f, verbose); else { if (verbose) print("Deleting " + f.getAbsolutePath()); f.delete(); ++fileDeletions; } } dir.delete(); ret fileDeletions; }