package com.kolakcc.loljclient.controller;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.List;
import java.util.concurrent.ExecutionException;
import javax.swing.SwingWorker;
import com.gvaneyck.rtmp.LoLRTMPSClient;
import com.kolakcc.loljclient.StartupClass;
import com.kolakcc.loljclient.model.ServerInfo;
import com.kolakcc.loljclient.model.swing.LoLNewsTableModel;
import com.kolakcc.loljclient.model.swing.RegionsComboBoxModel;
import com.kolakcc.loljclient.util.Configuration;
import com.kolakcc.loljclient.view.LoginView;
public class LoginController extends KolaController implements ActionListener,
MouseListener {
protected SwingWorker<LoLRTMPSClient, String> loginWorker;
protected LoginView view;
protected RegionsComboBoxModel regionsModel;
protected LoLNewsTableModel newsModel;
public LoginController() {
this.initalizeWorkers();
this.view = new LoginView();
this.setView(this.view);
this.view.usernameField.addActionListener(this);
this.view.passwordField.addActionListener(this);
this.view.loginButton.addActionListener(this);
this.view.newsList.addMouseListener(this);
this.view.regionField.addActionListener(this);
this.view.rememberUsername.addActionListener(this);
this.view.rememberPassword.addActionListener(this);
this.regionsModel = new RegionsComboBoxModel();
this.view.regionField.setModel(this.regionsModel);
this.newsModel = new LoLNewsTableModel(this.regionsModel.getSelectedRegion().getNewsURL());
this.view.newsList.setModel(this.newsModel);
if (!Configuration.getDefaultUsername().isEmpty()) {
this.view.rememberUsername.setSelected(true);
this.view.usernameField.setText(Configuration.getDefaultUsername());
} else { this.view.rememberPassword.setEnabled(false); }
if (!Configuration.getDefaultPassword().isEmpty()) {
this.view.rememberPassword.setEnabled(true);
this.view.rememberPassword.setSelected(true);
this.view.passwordField.setText(Configuration.getDefaultPassword());
}
if (!Configuration.getDefaultRegion().isEmpty()) {
this.view.regionField.setSelectedItem(regionsModel.getRegion(Configuration.getDefaultRegion()));
}
if ((!Configuration.getDefaultPassword().isEmpty()) && (!Configuration.getDefaultUsername().isEmpty())) {
this.actionPerformed(new ActionEvent(this.view.passwordField,ActionEvent.ACTION_PERFORMED,""));
}
}
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource() == this.view.regionField) {
//this.newsModel.clear();
//this.newsModel.populateModel(this.regionsModel.getSelectedRegion().newsURL);
} else if (e.getSource().equals(this.view.rememberUsername)) {
if (this.view.rememberUsername.isSelected()) {
this.view.rememberPassword.setEnabled(true);
} else {
this.view.rememberPassword.setEnabled(false);
this.view.rememberPassword.setSelected(false);
Configuration.set("username", "");
Configuration.set("password", "");
}
} else if (e.getSource().equals(this.view.rememberPassword)) {
if (!this.view.rememberPassword.isEnabled()) Configuration.set("password", "");
} else {
this.view.usernameField.setEnabled(false);
this.view.passwordField.setEnabled(false);
this.view.loginButton.setEnabled(false);
this.loginWorker.execute();
}
}
public void dispose() {
this.view.dispose();
}
public void initalizeWorkers() {
this.loginWorker = new SwingWorker<LoLRTMPSClient, String>() {
public LoLRTMPSClient doInBackground() throws Exception {
this.publish("Connecting to the login server...");
String username = LoginController.this.view.usernameField.getText();
String password = new String(LoginController.this.view.passwordField.getPassword());
LoLRTMPSClient client = new LoLRTMPSClient(regionsModel.getSelectedRegion(), Configuration.PVPVersion, username, password);
client.connect();
this.publish("Logging in...");
client.login();
this.publish("Sucessfully logged in!");
return client;
}
public void done() {
try {
if (LoginController.this.view.rememberUsername.isSelected()) Configuration.set("username", LoginController.this.view.usernameField.getText());
if (LoginController.this.view.rememberPassword.isSelected()) Configuration.set("password", new String(LoginController.this.view.passwordField.getPassword()));
Configuration.set("region", LoginController.this.regionsModel.getSelectedRegion().getRegion());
ServerInfo.currentServerInfo = LoginController.this.regionsModel.getSelectedRegion();
StartupClass.Client = this.get();
StartupClass.LoggedIn();
StartupClass.openFriends(
LoginController.this.view.usernameField.getText(),
new String(LoginController.this.view.passwordField.getPassword())
);
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
LoginController.this.view.loginButton.setText("Login");
LoginController.this.view.loginButton.setEnabled(true);
LoginController.this.view.usernameField.setEnabled(true);
LoginController.this.view.passwordField.setEnabled(true);
LoginController.this.initalizeWorkers();
LoginController.this.HandleException("Invalid username/password.",e);
}
}
public void process(List<String> progress) {
LoginController.this.view.loginButton.setText(progress.get(progress.size() - 1));
}
};
}
@Override
public void mouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
StartupClass.openNewsItem(this.newsModel.getItemAt(this.view.newsList.getSelectedRow()));
}
}
@Override
public void mouseEntered(MouseEvent e) {
}
@Override
public void mouseExited(MouseEvent e) {
}
@Override
public void mousePressed(MouseEvent e) {
}
@Override
public void mouseReleased(MouseEvent e) {
}
}