package com.blubb.gyingpan; import java.awt.AWTException; import java.awt.Color; import java.awt.Dimension; import java.awt.MenuItem; import java.awt.PopupMenu; import java.awt.SystemTray; import java.awt.TrayIcon; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.image.BufferedImage; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintStream; import java.io.RandomAccessFile; import java.nio.channels.FileLock; import javax.json.Json; import javax.json.JsonArray; import javax.json.JsonObject; import javax.swing.JOptionPane; import net.fusejna.FuseException; public class GYMain { static FileLock fileLock = null; static MenuItem statusLabel = null; static PrintStream logstream = null; static void setStatus(String s) { System.out.println(s); if(statusLabel != null) statusLabel.setLabel(s); if(logstream != null) { logstream.println(s); logstream.flush(); } } public static void main(String[] args) throws IOException, InterruptedException, FuseException { File configdir = new java.io.File(new java.io.File( System.getProperty("user.home")), ".gyingpan"); configdir.mkdirs(); File configfile = new java.io.File(configdir, "config.json"); if (!configfile.exists()) { System.out.println("create config file"); return; } logstream = new PrintStream(new BufferedOutputStream(new FileOutputStream(new java.io.File(configdir, "status.log")))); // lock final File lockfile = new File(configdir, "lock"); final RandomAccessFile randomAccessLockFile = new RandomAccessFile(lockfile, "rw"); fileLock = randomAccessLockFile.getChannel().tryLock(); if (fileLock != null) { Runtime.getRuntime().addShutdownHook(new Thread() { public void run() { try { fileLock.release(); randomAccessLockFile.close(); lockfile.delete(); } catch (Exception e) { e.printStackTrace(); } } }); } else { JOptionPane.showMessageDialog(null, "Already running"); return; } if (SystemTray.isSupported()) { Dimension dim = SystemTray.getSystemTray().getTrayIconSize(); BufferedImage image = new BufferedImage(dim.width, dim.height, BufferedImage.TYPE_INT_ARGB); int step = 256 / dim.width; if(step < 1) step = 1; System.out.println("step "+step+" width "+dim.width); for(int x = 0; x < dim.width; x++) { int val = x * step; if(val > 255) val = 255; for(int y = 0; y < dim.height; y++) { image.setRGB(x, y, new Color(val, val, val).getRGB()); } } final PopupMenu popup = new PopupMenu(); final TrayIcon trayIcon = new TrayIcon(image); final SystemTray tray = SystemTray.getSystemTray(); MenuItem exitItem = new MenuItem("Exit"); statusLabel = new MenuItem("ready"); popup.add(statusLabel); popup.add(exitItem); trayIcon.setPopupMenu(popup); exitItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { System.exit(0); } }); try { tray.add(trayIcon); } catch (AWTException e) { System.out.println("TrayIcon could not be added."); } } JsonObject config = Json.createReader(new FileInputStream(configfile)) .readObject(); JsonArray accounts = config.getJsonArray("accounts"); for (JsonObject account : accounts.getValuesAs(JsonObject.class)) { GDrive g = new GDrive(account.getString("name")); new FuseFS(g).mount(new File(account.getString("path")), false); System.out.println("after mount "+account.getString("name")); } } }