Skip to content
This repository has been archived by the owner on May 12, 2020. It is now read-only.

Commit

Permalink
Save navigator preferences
Browse files Browse the repository at this point in the history
  • Loading branch information
Quackster committed Dec 11, 2017
1 parent 991f0f0 commit 44fa3f5
Show file tree
Hide file tree
Showing 10 changed files with 296 additions and 30 deletions.
@@ -0,0 +1,176 @@
package org.alexdev.icarus.dao.mysql.navigator;

import org.alexdev.icarus.dao.mysql.Dao;
import org.alexdev.icarus.dao.mysql.Storage;
import org.alexdev.icarus.game.navigator.NavigatorPreference;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;


public class NavigatorPreferenceDao {

/**
* Gets if the key exists
*
* @param userId the user id
* @param navigatorTabId the navigator tab id
* @param preference the preference setting
* @return true, if successful
*/
public static boolean exists(int userId, int navigatorTabId, NavigatorPreference preference) {
boolean exists = false;

Connection sqlConnection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;

try {
sqlConnection = Dao.getStorage().getConnection();
preparedStatement = Dao.getStorage().prepare("SELECT * FROM navigator_preferences WHERE user_id = ? AND tab_id = ? AND setting = ?", sqlConnection);
preparedStatement.setInt(1, userId);
preparedStatement.setInt(2, navigatorTabId);
preparedStatement.setString(3, preference.name());
resultSet = preparedStatement.executeQuery();
exists = resultSet.next();

} catch (Exception e) {
Storage.logError(e);
} finally {
Storage.closeSilently(resultSet);
Storage.closeSilently(preparedStatement);
Storage.closeSilently(sqlConnection);
}

return exists;
}

/**
* Gets the key value
*
* @param userId the user id
* @param navigatorTabId the navigator tab id
* @param preference the preference setting
* @return true, if successful
*/
public static boolean get(int userId, int navigatorTabId, NavigatorPreference preference) {
/*if (!NavigatorPreferenceDao.exists(userId, navigatorTabId, preference)) {
NavigatorPreferenceDao.create(userId, navigatorTabId, preference, defaultValue);
}*/

String value = null;

Connection sqlConnection = null;
PreparedStatement preparedStatement = null;
ResultSet resultSet = null;

try {
sqlConnection = Dao.getStorage().getConnection();
preparedStatement = Dao.getStorage().prepare("SELECT * FROM navigator_preferences WHERE user_id = ? AND tab_id = ? AND setting = ?", sqlConnection);
preparedStatement.setInt(1, userId);
preparedStatement.setInt(2, navigatorTabId);
preparedStatement.setString(3, preference.name());
resultSet = preparedStatement.executeQuery();

if (resultSet.next()) {
value = resultSet.getString("value");
}

} catch (Exception e) {
Storage.logError(e);
} finally {
Storage.closeSilently(resultSet);
Storage.closeSilently(preparedStatement);
Storage.closeSilently(sqlConnection);
}

return getBoolean(value);
}

/**
* Update the key value
*
* @param userId the user id
* @param navigatorTabId the navigator tab id
* @param preference the preference setting
* @param value the default value to insert or the value to override
* @return true, if successful
*/
public static boolean update(int userId, int navigatorTabId, NavigatorPreference preference, boolean value) {
/*if (!NavigatorPreferenceDao.exists(userId, navigatorTabId, preference)) {
NavigatorPreferenceDao.create(userId, navigatorTabId, preference, value);
return true;
}*/

boolean success = false;
Connection sqlConnection = null;
PreparedStatement preparedStatement = null;

try {
sqlConnection = Dao.getStorage().getConnection();
preparedStatement = Dao.getStorage().prepare("UPDATE navigator_preferences SET value = ? WHERE user_id = ? AND tab_id = ? AND setting = ?", sqlConnection);
preparedStatement.setBoolean(1, value);
preparedStatement.setInt(2, userId);
preparedStatement.setInt(3, navigatorTabId);
preparedStatement.setString(4, preference.name());
preparedStatement.execute();
success = true;

} catch (Exception e) {
Storage.logError(e);
} finally {
Storage.closeSilently(preparedStatement);
Storage.closeSilently(sqlConnection);
}

return success;
}

/**
* Create the navigator preference
*
* @param userId the user id
* @param navigatorTabId the navigator tab id
* @param preference the preference setting
* @param defaultValue the default value to insert
*/
public static void create(int userId, int navigatorTabId, NavigatorPreference preference, boolean defaultValue) {
if (NavigatorPreferenceDao.exists(userId, navigatorTabId, preference)) {
return;
}

Connection sqlConnection = null;
PreparedStatement preparedStatement = null;

try {
sqlConnection = Dao.getStorage().getConnection();
preparedStatement = Dao.getStorage().prepare("INSERT INTO navigator_preferences (user_id, tab_id, value, setting) VALUES (?, ?, ?, ?)", sqlConnection);
preparedStatement.setInt(1, userId);
preparedStatement.setInt(2, navigatorTabId);
preparedStatement.setBoolean(3, defaultValue);
preparedStatement.setString(4, preference.name());
preparedStatement.execute();

} catch (Exception e) {
Storage.logError(e);
} finally {
Storage.closeSilently(preparedStatement);
Storage.closeSilently(sqlConnection);
}
}

/**
* Gets the key value by boolean
*
* @param value the value to parse
* @return true, if successful
*/
public static boolean getBoolean(String value) {
if (value == null) {
return false;
}

return value.equals("1") || value.equals("yes") || value.equals("true") || value.equals("on");
}
}
@@ -0,0 +1,6 @@
package org.alexdev.icarus.game.navigator;

public enum NavigatorPreference {
EXPANDED,
THUMBNAIL
}
@@ -1,5 +1,9 @@
package org.alexdev.icarus.messages.incoming.navigator;

import org.alexdev.icarus.dao.mysql.navigator.NavigatorPreferenceDao;
import org.alexdev.icarus.game.navigator.NavigatorManager;
import org.alexdev.icarus.game.navigator.NavigatorPreference;
import org.alexdev.icarus.game.navigator.NavigatorTab;
import org.alexdev.icarus.game.player.Player;
import org.alexdev.icarus.messages.types.MessageEvent;
import org.alexdev.icarus.server.api.messages.ClientMessage;
Expand All @@ -8,6 +12,11 @@ public class CloseNavigatorTabMessageEvent implements MessageEvent {

@Override
public void handle(Player player, ClientMessage reader) {
System.out.println("Close: " + reader.readString());
NavigatorTab tab = NavigatorManager.getInstance().getTab(reader.readString());

boolean value = NavigatorPreferenceDao.get(player.getEntityId(), tab.getId(), NavigatorPreference.EXPANDED);
boolean newValue = !value;

NavigatorPreferenceDao.update(player.getEntityId(), tab.getId(), NavigatorPreference.EXPANDED, newValue);
}
}
@@ -1,5 +1,9 @@
package org.alexdev.icarus.messages.incoming.navigator;

import org.alexdev.icarus.dao.mysql.navigator.NavigatorPreferenceDao;
import org.alexdev.icarus.game.navigator.NavigatorManager;
import org.alexdev.icarus.game.navigator.NavigatorPreference;
import org.alexdev.icarus.game.navigator.NavigatorTab;
import org.alexdev.icarus.game.player.Player;
import org.alexdev.icarus.messages.types.MessageEvent;
import org.alexdev.icarus.server.api.messages.ClientMessage;
Expand All @@ -8,6 +12,11 @@ public class ExpandNavigatorTabMessageEvent implements MessageEvent {

@Override
public void handle(Player player, ClientMessage reader) {
System.out.println("Expand: " + reader.readString());
NavigatorTab tab = NavigatorManager.getInstance().getTab(reader.readString());

boolean value = NavigatorPreferenceDao.get(player.getEntityId(), tab.getId(), NavigatorPreference.EXPANDED);
boolean newValue = !value;

NavigatorPreferenceDao.update(player.getEntityId(), tab.getId(), NavigatorPreference.EXPANDED, newValue);
}
}
@@ -1,13 +1,17 @@
package org.alexdev.icarus.messages.incoming.navigator;

import org.alexdev.icarus.dao.mysql.navigator.NavigatorPreferenceDao;
import org.alexdev.icarus.game.navigator.NavigatorManager;
import org.alexdev.icarus.game.navigator.NavigatorPreference;
import org.alexdev.icarus.game.navigator.NavigatorTab;
import org.alexdev.icarus.game.player.Player;
import org.alexdev.icarus.messages.outgoing.navigator.FlatCategoriesMessageComposer;
import org.alexdev.icarus.messages.outgoing.navigator.NavigatorCategoriesMessageComposer;
import org.alexdev.icarus.messages.outgoing.navigator.NavigatorPreferencesMessagesComposer;
import org.alexdev.icarus.messages.outgoing.navigator.NavigatorTabsMessageComposer;
import org.alexdev.icarus.messages.types.MessageEvent;
import org.alexdev.icarus.server.api.messages.ClientMessage;
import sun.plugin.javascript.navig.Navigator;

public class NewNavigatorMessageEvent implements MessageEvent {

Expand All @@ -23,6 +27,15 @@ public void handle(Player player, ClientMessage request) {
this.response.appendString("");
player.send(response);
*/

for (NavigatorTab tab : NavigatorManager.getInstance().getAllTabs()) {
if (NavigatorManager.getInstance().getParentTabs().contains(tab)) {
continue;
}

NavigatorPreferenceDao.create(player.getEntityId(), tab.getId(), NavigatorPreference.THUMBNAIL, tab.isThumbnail());
NavigatorPreferenceDao.create(player.getEntityId(), tab.getId(), NavigatorPreference.EXPANDED, !tab.isClosed());
}

player.sendQueued(new NavigatorTabsMessageComposer(NavigatorManager.getInstance().getParentTabs()));
player.sendQueued(new FlatCategoriesMessageComposer(NavigatorManager.getInstance().getCategories()));
Expand Down
@@ -1,5 +1,9 @@
package org.alexdev.icarus.messages.incoming.navigator;

import org.alexdev.icarus.dao.mysql.navigator.NavigatorPreferenceDao;
import org.alexdev.icarus.game.navigator.NavigatorManager;
import org.alexdev.icarus.game.navigator.NavigatorPreference;
import org.alexdev.icarus.game.navigator.NavigatorTab;
import org.alexdev.icarus.game.player.Player;
import org.alexdev.icarus.messages.types.MessageEvent;
import org.alexdev.icarus.server.api.messages.ClientMessage;
Expand All @@ -11,6 +15,7 @@ public void handle(Player player, ClientMessage reader) {
String action = reader.readString();
boolean setting = reader.readIntAsBool();

System.out.println("Show thumbnail > " + action + " - " + setting);
NavigatorTab tab = NavigatorManager.getInstance().getTab(action);
NavigatorPreferenceDao.update(player.getEntityId(), tab.getId(), NavigatorPreference.THUMBNAIL, setting);
}
}
@@ -1,5 +1,7 @@
package org.alexdev.icarus.messages.outgoing.navigator;

import org.alexdev.icarus.dao.mysql.navigator.NavigatorPreferenceDao;
import org.alexdev.icarus.game.navigator.NavigatorPreference;
import org.alexdev.icarus.game.navigator.NavigatorTab;
import org.alexdev.icarus.game.player.Player;
import org.alexdev.icarus.game.room.Room;
Expand Down Expand Up @@ -48,9 +50,13 @@ public void compose(Response response) {
for (NavigatorTab tab : tabs) {
response.writeString(tab.getTabName());
response.writeString(tab.getTitle());

boolean isClosed = !NavigatorPreferenceDao.get(player.getEntityId(), tab.getId(), NavigatorPreference.EXPANDED);
boolean showThumbnail = NavigatorPreferenceDao.get(player.getEntityId(), tab.getId(), NavigatorPreference.THUMBNAIL);

response.writeInt(roomLimit ? (int) tab.getButtonType() : 2); // force no button
response.writeBool(roomLimit ? tab.isClosed() : false); // force collapsed
response.writeInt(tab.isThumbnail());
response.writeBool(roomLimit && isClosed); // force collapsed
response.writeInt(showThumbnail);

List<Room> rooms = new ArrayList<>();

Expand Down
Expand Up @@ -104,7 +104,7 @@ public byte[] remainingBytes() {
public String getMessageBody() {
String consoleText = this.buffer.toString(Charset.defaultCharset());

for (int i = 0; i < 50; i++) {
for (int i = 0; i < 13; i++) {
consoleText = consoleText.replace(Character.toString((char)i), "[" + i + "]");
}

Expand Down
Expand Up @@ -27,7 +27,6 @@ public static void updateKey(SiteKey key, int value) {
* @param value the string value
*/
public static void updateKey(SiteKey key, String value) {

if (!keyExists(key)) {
Log.getErrorLogger().error("The key {} with raw name {} does not exist!", key.name(), key.getKey());
Log.getErrorLogger().error("Could not set key {} with value \"{}\"", key.name(), value);
Expand Down Expand Up @@ -61,7 +60,6 @@ public static void updateKey(SiteKey key, String value) {
* @return true, if successful
*/
public static boolean keyExists(SiteKey key) {

boolean exists = false;

Connection sqlConnection = null;
Expand Down Expand Up @@ -94,7 +92,6 @@ public static boolean keyExists(SiteKey key) {
* @return true, if successful
*/
public static String get(SiteKey key) {

String value = null;

Connection sqlConnection = null;
Expand Down

0 comments on commit 44fa3f5

Please sign in to comment.