package kiyut.ekspos.pycasa; import com.google.gdata.data.photos.AlbumEntry; import com.google.gdata.data.photos.PhotoEntry; import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.ListIterator; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.ProgressMonitor; import kiyut.ekspos.Application; import kiyut.swing.shell.util.ShellUtilities; import pycasa.view.LoginDialog; /** * Pycasa manager * */ public class PycasaManager { private static PycasaManager instance; // The single instance private PycasaController pycasaController; private JFrame manageWindow; private boolean connected = false; /** * Returns the single instance, creating one if it's the * first time this method is called. * * @return Preferences The single instance. */ static synchronized public PycasaManager getInstance() { if (instance == null) { instance = new PycasaManager(); } return instance; } private PycasaManager() { pycasaController = new PycasaController(); } public PycasaController getController() { return pycasaController; } void setConnected(boolean connected) { this.connected = connected; } public void openLoginDialog(JFrame owner) { // login LoginDialog login = new LoginDialog(pycasaController); login.setAlwaysOnTop(true); login.setLocationRelativeTo(owner); login.setVisible(true); /*while(!login.isSuccess() && login.isVisible()) { login.setVisible(true); // do not need to display error dialog, it has been handled // by the LoginDialog itself, so just return }*/ //connected = login.isSuccess(); } public void closeManageWindow() { if (manageWindow != null) { manageWindow.setVisible(false); manageWindow = null; } } /** Manage Google Picasa Web Album */ public void openManageWindow(JFrame owner) { if (manageWindow == null) { pycasa.view.MainWindow pycasaWindow = new pycasa.view.MainWindow(pycasaController); this.manageWindow = pycasaWindow; pycasaWindow.setIconImage(Application.getIconImage()); pycasaWindow.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); pycasaWindow.setAlwaysOnTop(true); pycasaWindow.setLocationRelativeTo(owner); } this.manageWindow.setVisible(true); } /** ** Upload selected to Picasa Web Album */ public void openAddPhotoWindow(final JFrame owner, List<File> files) { // check for empty list boolean emptyList = true; if (files != null) { if (files.size() > 0) { emptyList = false; } } final List <PhotoEntry> photoEntries = new ArrayList<PhotoEntry>(); if (!emptyList) { ListIterator<File> li = files.listIterator(); while (li.hasNext()) { File file = li.next(); String suffix = ShellUtilities.getFileSuffix(file); if (suffix != null) { if (suffix.equalsIgnoreCase("gif") || suffix.equalsIgnoreCase("jpg") || suffix.equalsIgnoreCase("png") || suffix.equalsIgnoreCase("bmp")) { PhotoEntry photo = pycasaController.getPhotoEntryFromFile(file); if (photo != null) { photoEntries.add(photo); } } } } } if (photoEntries.size() <= 0 ) { JOptionPane.showMessageDialog(owner,"Please select image or images to be uploaded.\nCurrently only support jpg, png, gif, or bmp only.","No Selection", JOptionPane.ERROR_MESSAGE); return; } if (!connected) { openLoginDialog(owner); } if (!connected) { return; } // load available albums List<AlbumEntry> albums = null; try { albums = pycasaController.getAlbums(); } catch (Exception ex) { albums = null; } if (albums == null) { JOptionPane.showMessageDialog(owner,"Error fetching albums.","Error fetching albums", JOptionPane.ERROR_MESSAGE); return; } // open AddPhoto Dialog final PycasaAddPhotoPane addPhotoPane = new PycasaAddPhotoPane(); addPhotoPane.setAlbums(albums); int choice = JOptionPane.showOptionDialog(owner,addPhotoPane,addPhotoPane.getTitle(),JOptionPane.OK_CANCEL_OPTION,JOptionPane.PLAIN_MESSAGE,null,null,null); if (choice != JOptionPane.OK_OPTION) { return; } // upload selected images Runnable run = new Runnable() { public void run() { int progress = 0; int size = photoEntries.size(); ProgressMonitor progressMonitor = new ProgressMonitor(owner, "Uploading to Picasa Web Album", "", 0, size); progressMonitor.setMillisToPopup(0); progressMonitor.setMillisToDecideToPopup(0); AlbumEntry album = addPhotoPane.getSelectedAlbum(); if (addPhotoPane.isNewAlbum()) { progressMonitor.setProgress(progress); progressMonitor.setNote("Create new album: " + album.getTitle().getPlainText()); try { pycasaController.insertAlbum(album); List<AlbumEntry> newAlbums = pycasaController.getAlbums(); for (int i=0; i<newAlbums.size(); i++) { AlbumEntry tmpAlbum = newAlbums.get(i); if (tmpAlbum.getTitle().getPlainText().equals(album.getTitle().getPlainText())) { album = tmpAlbum; break; } } } catch (Exception ex) { progressMonitor.close(); JOptionPane.showMessageDialog(owner, "Unable to create new album.", "Error Upload", JOptionPane.ERROR_MESSAGE); return; } } if (progressMonitor.isCanceled()) { progressMonitor.close(); return; } for (int i = 0; i < photoEntries.size(); i++) { PhotoEntry photo = photoEntries.get(i); try { pycasaController.insert(album, photo); progressMonitor.setProgress(++progress); progressMonitor.setNote("Completed " + (i + 1) + " of " + size); } catch (Exception ex) { String msg = "Could not upload photo: " + photo.getTitle().getPlainText(); JOptionPane.showMessageDialog(owner, msg, "Error Upload", JOptionPane.ERROR_MESSAGE); // if error due to album is null if (album == null) { progressMonitor.close(); return; } } if (progressMonitor.isCanceled()) { progressMonitor.close(); } } } }; Thread uploadThread = new Thread(run); uploadThread.start(); } }