package de.dal33t.powerfolder.util; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import java.util.Properties; import java.util.logging.Level; import java.util.logging.Logger; import de.dal33t.powerfolder.Constants; import de.dal33t.powerfolder.disk.FolderSettings; import de.dal33t.powerfolder.disk.SyncProfile; import de.dal33t.powerfolder.light.FileInfo; import de.dal33t.powerfolder.light.FolderInfo; public class FolderConfigRestore { private static final Logger LOG = Logger .getLogger(FolderConfigRestore.class.getName()); /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { Properties config = new Properties(); File searchBaseDir = new File(args[0]); for (File folderDir : searchBaseDir.listFiles()) { File sysDir = new File(folderDir, Constants.POWERFOLDER_SYSTEM_SUBDIR); LOG.info("Processing directory: " + folderDir); if (sysDir.exists()) { try { // Folder directly under PowerFolders/ restoreFolderConfig(folderDir, config); } catch (Exception e) { LOG.warning("Problem with " + folderDir + ". " + e); } } else if (folderDir.isDirectory()) { try { // PowerFolders/username/foldername // Try harder. Subdirs: for (File folderDir2 : folderDir.listFiles()) { if (folderDir2.isDirectory()) { try { restoreFolderConfig(folderDir2, config); } catch (Exception e) { LOG.warning("Problem with " + folderDir2 + ". " + e); } } } } catch (Exception e) { LOG.warning("Problem with " + folderDir + ". " + e); } } } PropertiesUtil.saveConfig(new File("PowerFolder_restored.config"), config, ""); } private static void restoreFolderConfig(File baseDir, Properties config) { FolderInfo foInfo; try { foInfo = readFolderInfo(baseDir); } catch (Exception e) { LOG.log(Level.WARNING, "Unable to read folder info from " + baseDir + ". " + e); return; } if (foInfo == null) { LOG.severe("Unable to read folderinfo from " + baseDir); return; } FolderSettings foSettings = new FolderSettings(baseDir, SyncProfile.AUTOMATIC_SYNCHRONIZATION, false, 0); foSettings.set(foInfo, config); LOG.info("Restored folder " + foInfo.getName() + " @ " + baseDir); } private static FolderInfo readFolderInfo(File baseDir) throws IOException, ClassNotFoundException { File sysDir = new File(baseDir, Constants.POWERFOLDER_SYSTEM_SUBDIR); if (!baseDir.exists()) { throw new FileNotFoundException("No folder found at " + sysDir); } File dbFile = new File(sysDir, Constants.DB_FILENAME); // load files and scan in InputStream fIn = new BufferedInputStream(new FileInputStream(dbFile)); ObjectInputStream in = new ObjectInputStream(fIn); FileInfo[] files = (FileInfo[]) in.readObject(); // LOG.info("Got " + files.length + " files in " + baseDir); if (files.length <= 0) { return null; } return files[0].getFolderInfo(); } }