/*
* FBPwn
*
* http://code.google.com/p/fbpwn
*
* Copyright (C) 2011 - FBPwn
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package fbpwn.ui;
import fbpwn.core.AuthenticatedAccount;
import fbpwn.core.ExceptionHandler;
import fbpwn.core.FacebookManager;
import fbpwn.core.FacebookTask;
import fbpwn.core.SettingsManager;
import java.awt.Desktop;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.io.File;
import java.io.IOException;
import java.net.URI;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import javax.swing.ListSelectionModel;
import javax.swing.SwingUtilities;
import javax.swing.SwingWorker;
import javax.swing.table.DefaultTableModel;
/**
* Main Swing GUI form for the application
*/
public class MainForm extends javax.swing.JFrame implements FacebookGUI {
/**
* Creates new form MainForm
*/
public MainForm() {
initComponents();
setTitle("FBPwn - " + fbpwn.FBPwn.appVersion);
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
setLocation((int) (dim.getWidth() / 2 - getWidth() / 2), (int) (dim.getHeight() / 2 - getHeight() / 2));
loadSettings();
jTable1.setCellSelectionEnabled(false);
jTable1.setColumnSelectionAllowed(false);
jTable1.setRowSelectionAllowed(true);
jTable1.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
jTable2.setCellSelectionEnabled(false);
jTable2.setColumnSelectionAllowed(false);
jTable2.setRowSelectionAllowed(true);
jTable2.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
jTable2.getColumn(jTable2.getColumnName(4)).setCellRenderer(new ProgressBar());
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
jLabel1 = new javax.swing.JLabel();
jTabbedPane1 = new javax.swing.JTabbedPane();
jPanel1 = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
jTable1 = new javax.swing.JTable();
jButton1 = new javax.swing.JButton();
jButton2 = new javax.swing.JButton();
jButton3 = new javax.swing.JButton();
jButton4 = new javax.swing.JButton();
jPanel2 = new javax.swing.JPanel();
jScrollPane2 = new javax.swing.JScrollPane();
jTable2 = new javax.swing.JTable();
jButton5 = new javax.swing.JButton();
jButton6 = new javax.swing.JButton();
jButton7 = new javax.swing.JButton();
jButton8 = new javax.swing.JButton();
jPanel3 = new javax.swing.JPanel();
jTabbedPane2 = new javax.swing.JTabbedPane();
jPanel4 = new javax.swing.JPanel();
jLabel2 = new javax.swing.JLabel();
jCheckBox1 = new javax.swing.JCheckBox();
jLabel3 = new javax.swing.JLabel();
jTextField1 = new javax.swing.JTextField();
jLabel4 = new javax.swing.JLabel();
jTextField2 = new javax.swing.JTextField();
jLabel5 = new javax.swing.JLabel();
jButton9 = new javax.swing.JButton();
jButton10 = new javax.swing.JButton();
jMenuBar1 = new javax.swing.JMenuBar();
jMenu1 = new javax.swing.JMenu();
jMenuItem7 = new javax.swing.JMenuItem();
jMenuItem1 = new javax.swing.JMenuItem();
jMenu2 = new javax.swing.JMenu();
jMenuItem2 = new javax.swing.JMenuItem();
jMenuItem5 = new javax.swing.JMenuItem();
jMenuItem6 = new javax.swing.JMenuItem();
jMenuItem4 = new javax.swing.JMenuItem();
jMenuItem3 = new javax.swing.JMenuItem();
jLabel1.setText("jLabel1");
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle("FBPwn");
setResizable(false);
jTable1.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
"Account ID", "Account E-mail"
}
) {
boolean[] canEdit = new boolean [] {
false, false
};
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
jTable1.setColumnSelectionAllowed(true);
jTable1.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
jTable1.getTableHeader().setReorderingAllowed(false);
jScrollPane1.setViewportView(jTable1);
jTable1.getColumnModel().getSelectionModel().setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
jButton1.setText("Add account");
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jButton2.setText("Remove account");
jButton2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton2ActionPerformed(evt);
}
});
jButton3.setText("Attack !");
jButton3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton3ActionPerformed(evt);
}
});
jButton4.setText("Exit");
jButton4.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton4ActionPerformed(evt);
}
});
javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 537, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(18, 18, 18)
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
.addComponent(jButton1, javax.swing.GroupLayout.DEFAULT_SIZE, 148, Short.MAX_VALUE)
.addComponent(jButton2, javax.swing.GroupLayout.DEFAULT_SIZE, 148, Short.MAX_VALUE)
.addComponent(jButton3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jButton4, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
.addContainerGap())
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 286, Short.MAX_VALUE)
.addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanel1Layout.createSequentialGroup()
.addComponent(jButton1)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jButton2)
.addGap(67, 67, 67)
.addComponent(jButton3)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 75, Short.MAX_VALUE)
.addComponent(jButton4)))
.addContainerGap())
);
jTabbedPane1.addTab("Authenticated Accounts Management", jPanel1);
jTable2.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
},
new String [] {
"Authenticated Profile", "Target Profile URL", "Module", "Status", "Progress", "State"
}
) {
boolean[] canEdit = new boolean [] {
false, false, false, false, false, false
};
public boolean isCellEditable(int rowIndex, int columnIndex) {
return canEdit [columnIndex];
}
});
jTable2.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_ALL_COLUMNS);
jTable2.setColumnSelectionAllowed(true);
jTable2.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
jTable2.getTableHeader().setReorderingAllowed(false);
jScrollPane2.setViewportView(jTable2);
jTable2.getColumnModel().getSelectionModel().setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
jButton5.setText("Remove Task");
jButton5.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton5ActionPerformed(evt);
}
});
jButton6.setText("Cancel Task");
jButton6.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton6ActionPerformed(evt);
}
});
jButton7.setText("Remove Finished");
jButton7.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton7ActionPerformed(evt);
}
});
jButton8.setText("Exit");
jButton8.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton8ActionPerformed(evt);
}
});
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 705, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGroup(jPanel2Layout.createSequentialGroup()
.addComponent(jButton7)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jButton5)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addComponent(jButton6)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jButton8, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)))
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton6)
.addComponent(jButton5)
.addComponent(jButton7)
.addComponent(jButton8)))
);
jTabbedPane1.addTab("Monitor Submitted Tasks", jPanel2);
jTabbedPane2.setBorder(null);
jLabel2.setFont(new java.awt.Font("Cantarell", 1, 15));
jLabel2.setText("Proxy Settings");
jCheckBox1.setText("Use proxy");
jCheckBox1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jCheckBox1ActionPerformed(evt);
}
});
jLabel3.setText("Proxy host:");
jLabel4.setText("Proxy port:");
jLabel5.setForeground(new java.awt.Color(237, 1, 1));
jLabel5.setText("Proxy settings will be applied on newly added authenticated accounts");
javax.swing.GroupLayout jPanel4Layout = new javax.swing.GroupLayout(jPanel4);
jPanel4.setLayout(jPanel4Layout);
jPanel4Layout.setHorizontalGroup(
jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel4Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel2)
.addGroup(jPanel4Layout.createSequentialGroup()
.addComponent(jCheckBox1)
.addGap(56, 56, 56)
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel4Layout.createSequentialGroup()
.addComponent(jLabel4)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jTextField2, javax.swing.GroupLayout.DEFAULT_SIZE, 368, Short.MAX_VALUE))
.addGroup(jPanel4Layout.createSequentialGroup()
.addComponent(jLabel3)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jTextField1, javax.swing.GroupLayout.DEFAULT_SIZE, 367, Short.MAX_VALUE))
.addComponent(jLabel5))))
.addGap(141, 141, 141))
);
jPanel4Layout.setVerticalGroup(
jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel4Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel2)
.addGap(18, 18, 18)
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jCheckBox1)
.addComponent(jLabel3)
.addComponent(jTextField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
.addGroup(jPanel4Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jLabel4)
.addComponent(jTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
.addGap(18, 18, 18)
.addComponent(jLabel5)
.addContainerGap(42, Short.MAX_VALUE))
);
jTabbedPane2.addTab("Network", jPanel4);
jButton9.setText("Save and apply settings");
jButton9.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton9ActionPerformed(evt);
}
});
jButton10.setText("Discard changes");
jButton10.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton10ActionPerformed(evt);
}
});
javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3);
jPanel3.setLayout(jPanel3Layout);
jPanel3Layout.setHorizontalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addContainerGap()
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
.addGroup(jPanel3Layout.createSequentialGroup()
.addComponent(jButton10, javax.swing.GroupLayout.PREFERRED_SIZE, 157, javax.swing.GroupLayout.PREFERRED_SIZE)
.addGap(32, 32, 32)
.addComponent(jButton9, javax.swing.GroupLayout.PREFERRED_SIZE, 224, javax.swing.GroupLayout.PREFERRED_SIZE))
.addComponent(jTabbedPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 652, javax.swing.GroupLayout.PREFERRED_SIZE))
.addContainerGap(51, Short.MAX_VALUE))
);
jPanel3Layout.setVerticalGroup(
jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jTabbedPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 247, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
.addComponent(jButton9)
.addComponent(jButton10))
.addContainerGap())
);
jTabbedPane1.addTab("Settings", jPanel3);
jMenu1.setText("File");
jMenuItem7.setText("View log");
jMenuItem7.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem7ActionPerformed(evt);
}
});
jMenu1.add(jMenuItem7);
jMenuItem1.setText("Exit");
jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem1ActionPerformed(evt);
}
});
jMenu1.add(jMenuItem1);
jMenuBar1.add(jMenu1);
jMenu2.setText("About the project");
jMenuItem2.setText("Visit project's page");
jMenuItem2.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem2ActionPerformed(evt);
}
});
jMenu2.add(jMenuItem2);
jMenuItem5.setText("Follow on Twitter");
jMenuItem5.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem5ActionPerformed(evt);
}
});
jMenu2.add(jMenuItem5);
jMenuItem6.setText("Follow on tumblr");
jMenuItem6.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem6ActionPerformed(evt);
}
});
jMenu2.add(jMenuItem6);
jMenuItem4.setText("Check for updates");
jMenuItem4.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem4ActionPerformed(evt);
}
});
jMenu2.add(jMenuItem4);
jMenuItem3.setText("About");
jMenuItem3.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem3ActionPerformed(evt);
}
});
jMenu2.add(jMenuItem3);
jMenuBar1.add(jMenu2);
setJMenuBar(jMenuBar1);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jTabbedPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 727, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem1ActionPerformed
System.exit(0);
}//GEN-LAST:event_jMenuItem1ActionPerformed
private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton4ActionPerformed
System.exit(0);
}//GEN-LAST:event_jButton4ActionPerformed
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
AddAuthenticatedAccount addAuthenticatedAccount = new AddAuthenticatedAccount(this, true);
AuthenticatedAccount account = addAuthenticatedAccount.showAddAuthenticatedAccountDialog();
if (account != null) {
FacebookManager.getInstance().addAuthenticatedProfile(account);
refresh();
}
}//GEN-LAST:event_jButton1ActionPerformed
private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton3ActionPerformed
if (jTable1.getSelectedRow() == -1) {
JOptionPane.showMessageDialog(this,
"You need to select an authenticated account first",
"Error Occurred",
JOptionPane.ERROR_MESSAGE);
return;
}
DefaultTableModel tableModel = (DefaultTableModel) jTable1.getModel();
InitiateANewAttack addNewTask = new InitiateANewAttack(this,
true,
(AuthenticatedAccount) jTable1.getValueAt(jTable1.getSelectedRow(), 1));
addNewTask.setVisible(true);
}//GEN-LAST:event_jButton3ActionPerformed
private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed
if (jTable1.getSelectedRowCount() == 0) {
JOptionPane.showMessageDialog(this,
"You need to select an authenticated account first",
"Error Occurred",
JOptionPane.ERROR_MESSAGE);
return;
}
DefaultTableModel table = (DefaultTableModel) jTable1.getModel();
FacebookManager.getInstance().removeAuthenticatedProfile((AuthenticatedAccount) table.getValueAt(jTable1.getSelectedRow(), 1));
refresh();
}//GEN-LAST:event_jButton2ActionPerformed
private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton5ActionPerformed
if (jTable2.getSelectedRowCount() == 0) {
JOptionPane.showMessageDialog(this,
"You need to select a task first",
"Error Occurred",
JOptionPane.ERROR_MESSAGE);
return;
}
DefaultTableModel table = (DefaultTableModel) jTable2.getModel();
FacebookTask removedTask = (FacebookTask) table.getValueAt(jTable2.getSelectedRow(), 2);
if (removedTask.isRunning()) {
JOptionPane.showMessageDialog(this,
"You need to cancel the running task first",
"Error Occurred",
JOptionPane.ERROR_MESSAGE);
return;
}
FacebookManager.getInstance().removeTask(removedTask);
table.removeRow(jTable2.getSelectedRow());
}//GEN-LAST:event_jButton5ActionPerformed
private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton6ActionPerformed
if (jTable2.getSelectedRowCount() == 0) {
JOptionPane.showMessageDialog(this,
"You need to select a task first",
"Error Occurred",
JOptionPane.ERROR_MESSAGE);
return;
}
DefaultTableModel table = (DefaultTableModel) jTable2.getModel();
FacebookTask cancelledTask = (FacebookTask) table.getValueAt(jTable2.getSelectedRow(), 2);
if (!cancelledTask.isRunning()) {
JOptionPane.showMessageDialog(this,
"You need to select a running task first",
"Error Occurred",
JOptionPane.ERROR_MESSAGE);
return;
}
cancelledTask.sendCancelSignal();
}//GEN-LAST:event_jButton6ActionPerformed
private void jButton7ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton7ActionPerformed
DefaultTableModel table = (DefaultTableModel) jTable2.getModel();
for (int i = 0; i < table.getRowCount(); i++) {
if (((FacebookTask) table.getValueAt(i, 2)).isFinished()) {
table.removeRow(i);
i--;
}
}
}//GEN-LAST:event_jButton7ActionPerformed
private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem2ActionPerformed
try {
Desktop.getDesktop().browse(new URI("http://code.google.com/p/fbpwn/"));
} catch (Exception ex) {
JOptionPane.showMessageDialog(this,
"Failed to open browser",
"Error Occurred",
JOptionPane.ERROR_MESSAGE);
}
}//GEN-LAST:event_jMenuItem2ActionPerformed
private void jButton8ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton8ActionPerformed
System.exit(0);
}//GEN-LAST:event_jButton8ActionPerformed
private void jMenuItem3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem3ActionPerformed
AboutDialog about = new AboutDialog(this, true);
about.setVisible(true);
}//GEN-LAST:event_jMenuItem3ActionPerformed
private void jMenuItem4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem4ActionPerformed
String page = null;
final LoadingDialog loadingDialog =
new LoadingDialog(null, true, "Checking for updates ...");
SwingWorker backgrn = new SwingWorker() {
@Override
protected void done() {
super.done();
loadingDialog.dispose();
}
@Override
protected Object doInBackground() throws Exception {
try {
return fbpwn.FBPwn.getUpdates();
} catch (final Exception exception) {
SwingUtilities.invokeAndWait(new Runnable() {
@Override
public void run() {
JOptionPane.showMessageDialog(null,
"Failed to get updates, check the project's page",
"Error Occurred", JOptionPane.ERROR_MESSAGE);
}
});
return null;
}
}
};
backgrn.execute();
loadingDialog.setLocationRelativeTo(null);
loadingDialog.setVisible(true);
try {
page = (String) backgrn.get();
if (page == null) {
return;
}
UpdatesDialog updateDialog = new UpdatesDialog(this, true, page);
updateDialog.setVisible(true);
} catch (InterruptedException ex) {
Logger.getLogger(AddAuthenticatedAccount.class.getName()).log(Level.SEVERE, "Exception in thread: " + Thread.currentThread().getName(), ex);
} catch (ExecutionException ex) {
Logger.getLogger(AddAuthenticatedAccount.class.getName()).log(Level.SEVERE, "Exception in thread: " + Thread.currentThread().getName(), ex);
}
}//GEN-LAST:event_jMenuItem4ActionPerformed
private void jMenuItem5ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem5ActionPerformed
try {
Desktop.getDesktop().browse(new URI("http://twitter.com/_fbpwn"));
} catch (Exception ex) {
JOptionPane.showMessageDialog(this,
"Failed to open browser",
"Error Occurred",
JOptionPane.ERROR_MESSAGE);
}
}//GEN-LAST:event_jMenuItem5ActionPerformed
private void jMenuItem6ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem6ActionPerformed
try {
Desktop.getDesktop().browse(new URI("http://fbpwn.tumblr.com"));
} catch (Exception ex) {
JOptionPane.showMessageDialog(this,
"Failed to open browser",
"Error Occurred",
JOptionPane.ERROR_MESSAGE);
}
}//GEN-LAST:event_jMenuItem6ActionPerformed
private void jCheckBox1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBox1ActionPerformed
if (jCheckBox1.isSelected()) {
jTextField1.setEnabled(true);
jTextField2.setEnabled(true);
} else {
jTextField1.setEnabled(false);
jTextField2.setEnabled(false);
}
}//GEN-LAST:event_jCheckBox1ActionPerformed
private void jButton9ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton9ActionPerformed
// Do all settings check first
if (jCheckBox1.isSelected()) {
try {
Integer.parseInt(jTextField2.getText());
if (jCheckBox1.getText().equals("")) {
throw new Exception();
}
} catch (Exception ex) {
JOptionPane.showMessageDialog(this,
"Invalid proxy settings",
"Error Occurred",
JOptionPane.ERROR_MESSAGE);
return;
}
}
//Presist settings using the settings manager
if (jCheckBox1.isSelected()) {
SettingsManager.setUseProxy(true);
SettingsManager.setProxySettings(jTextField1.getText(), jTextField2.getText());
} else {
SettingsManager.setProxySettings(jTextField1.getText(), jTextField2.getText());
SettingsManager.setUseProxy(false);
}
JOptionPane.showMessageDialog(this,
"Settings were saved successfully !",
"Settings saved",
JOptionPane.INFORMATION_MESSAGE);
}//GEN-LAST:event_jButton9ActionPerformed
private void jButton10ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton10ActionPerformed
loadSettings();
}//GEN-LAST:event_jButton10ActionPerformed
private void jMenuItem7ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jMenuItem7ActionPerformed
try {
Desktop.getDesktop().open(new File("log.html"));
} catch (IOException ex) {
Logger.getLogger(MainForm.class.getName()).log(Level.SEVERE, "Exception in thread: " + Thread.currentThread().getName(), ex);
}
}//GEN-LAST:event_jMenuItem7ActionPerformed
private void loadSettings() {
if (SettingsManager.useProxy()) {
jCheckBox1.setSelected(true);
jTextField1.setEnabled(true);
jTextField2.setEnabled(true);
jTextField1.setText(SettingsManager.getProxyHost());
jTextField2.setText(SettingsManager.getProxyPort());
} else {
jCheckBox1.setSelected(false);
jTextField1.setEnabled(false);
jTextField2.setEnabled(false);
jTextField1.setText(SettingsManager.getProxyHost());
jTextField2.setText(SettingsManager.getProxyPort());
}
}
private void refresh() {
DefaultTableModel tableModel = (DefaultTableModel) jTable1.getModel();
tableModel.setRowCount(0);
List<AuthenticatedAccount> authenticatedAccounts = FacebookManager.getInstance().getAuthenticatedAccounts();
for (AuthenticatedAccount account : authenticatedAccounts) {
tableModel.addRow(new Object[]{
account.getAccountID(),
account});
}
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton10;
private javax.swing.JButton jButton2;
private javax.swing.JButton jButton3;
private javax.swing.JButton jButton4;
private javax.swing.JButton jButton5;
private javax.swing.JButton jButton6;
private javax.swing.JButton jButton7;
private javax.swing.JButton jButton8;
private javax.swing.JButton jButton9;
private javax.swing.JCheckBox jCheckBox1;
private javax.swing.JLabel jLabel1;
private javax.swing.JLabel jLabel2;
private javax.swing.JLabel jLabel3;
private javax.swing.JLabel jLabel4;
private javax.swing.JLabel jLabel5;
private javax.swing.JMenu jMenu1;
private javax.swing.JMenu jMenu2;
private javax.swing.JMenuBar jMenuBar1;
private javax.swing.JMenuItem jMenuItem1;
private javax.swing.JMenuItem jMenuItem2;
private javax.swing.JMenuItem jMenuItem3;
private javax.swing.JMenuItem jMenuItem4;
private javax.swing.JMenuItem jMenuItem5;
private javax.swing.JMenuItem jMenuItem6;
private javax.swing.JMenuItem jMenuItem7;
private javax.swing.JPanel jPanel1;
private javax.swing.JPanel jPanel2;
private javax.swing.JPanel jPanel3;
private javax.swing.JPanel jPanel4;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTabbedPane jTabbedPane1;
private javax.swing.JTabbedPane jTabbedPane2;
private javax.swing.JTable jTable1;
private javax.swing.JTable jTable2;
private javax.swing.JTextField jTextField1;
private javax.swing.JTextField jTextField2;
// End of variables declaration//GEN-END:variables
/**
* Updates the progress for the given task
* @param task The task to update progress to
*/
@Override
public void updateTaskProgress(final FacebookTask task) {
final DefaultTableModel table = (DefaultTableModel) jTable2.getModel();
for (int i = 0; i < table.getRowCount(); i++) {
if ((FacebookTask) table.getValueAt(i, 2) == task) {
final int t = i;
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
table.setValueAt(task.getMessage(), t, 3);
((ProgressBar) table.getValueAt(t, 4)).setValue(task.getPercentage().intValue());
table.setValueAt(task.getTaskState(), t, 5);
}
});
return;
}
}
}
/**
* Adds a new task to the GUI
* @param task The task to be added
*/
@Override
public void addTask(FacebookTask task) {
DefaultTableModel table = (DefaultTableModel) jTable2.getModel();
ProgressBar progressBar = new ProgressBar();
progressBar.setMaximum(100);
progressBar.setMinimum(0);
progressBar.setBorderPainted(true);
progressBar.setStringPainted(true);
table.addRow(new Object[]{task.getAuthenticatedProfile(),
task.getFacebookTargetProfile().getProfilePageURL(),
task,
task.getMessage(),
progressBar, task.getTaskState()});
}
/**
* Removes a task from the GUI
* @param task The task to be removed
*/
@Override
public void removeTask(FacebookTask task) {
DefaultTableModel table = (DefaultTableModel) jTable2.getModel();
for (int i = 0; i < table.getRowCount(); i++) {
if ((FacebookTask) table.getValueAt(i, 2) == task) {
table.removeRow(i);
i--;
}
}
}
}