Add saved searches

This commit is contained in:
Alejandro 2019-05-27 16:00:22 +03:00
parent 8d63982a28
commit 4dbe78c4ad
13 changed files with 185 additions and 37 deletions

View File

@ -0,0 +1,7 @@
CREATE TABLE `users_saved_searches` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`search_code` varchar(255) NOT NULL,
`filter` varchar(255) NULL,
`user_id` int(11) NOT NULL,
PRIMARY KEY (`id`)
);

View File

@ -0,0 +1,34 @@
package com.eu.habbo.habbohotel.navigation;
public class NavigatorSavedSearch {
private String searchCode;
private String filter;
private int id;
public NavigatorSavedSearch(String searchCode, String filter) {
this.searchCode = searchCode;
this.filter = filter;
}
public NavigatorSavedSearch(String searchCode, String filter, int id) {
this.searchCode = searchCode;
this.filter = filter;
this.id = id;
}
public String getSearchCode() {
return searchCode;
}
public String getFilter() {
return filter;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
}

View File

@ -4,6 +4,7 @@ import com.eu.habbo.Emulator;
import com.eu.habbo.habbohotel.catalog.CatalogItem; import com.eu.habbo.habbohotel.catalog.CatalogItem;
import com.eu.habbo.habbohotel.games.Game; import com.eu.habbo.habbohotel.games.Game;
import com.eu.habbo.habbohotel.games.GamePlayer; import com.eu.habbo.habbohotel.games.GamePlayer;
import com.eu.habbo.habbohotel.navigation.NavigatorSavedSearch;
import com.eu.habbo.habbohotel.permissions.Rank; import com.eu.habbo.habbohotel.permissions.Rank;
import com.eu.habbo.habbohotel.pets.PetTasks; import com.eu.habbo.habbohotel.pets.PetTasks;
import com.eu.habbo.habbohotel.pets.RideablePet; import com.eu.habbo.habbohotel.pets.RideablePet;
@ -14,11 +15,9 @@ import com.eu.habbo.messages.outgoing.rooms.users.RoomUserStatusComposer;
import gnu.trove.map.hash.TIntIntHashMap; import gnu.trove.map.hash.TIntIntHashMap;
import gnu.trove.procedure.TIntIntProcedure; import gnu.trove.procedure.TIntIntProcedure;
import java.sql.Connection; import java.sql.*;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashSet;
import java.util.List; import java.util.List;
public class HabboInfo implements Runnable { public class HabboInfo implements Runnable {
@ -51,6 +50,7 @@ public class HabboInfo implements Runnable {
private String photoJSON; private String photoJSON;
private int webPublishTimestamp; private int webPublishTimestamp;
private String machineID; private String machineID;
private HashSet<NavigatorSavedSearch> savedSearches = new HashSet<>();
public HabboInfo(ResultSet set) { public HabboInfo(ResultSet set) {
try { try {
@ -83,6 +83,7 @@ public class HabboInfo implements Runnable {
} }
this.loadCurrencies(); this.loadCurrencies();
this.loadSavedSearches();
} }
private void loadCurrencies() { private void loadCurrencies() {
@ -123,6 +124,57 @@ public class HabboInfo implements Runnable {
} }
} }
private void loadSavedSearches() {
this.savedSearches = new HashSet<>();
try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("SELECT * FROM users_saved_searches WHERE user_id = ?")) {
statement.setInt(1, this.id);
try (ResultSet set = statement.executeQuery()) {
while (set.next()) {
this.savedSearches.add(new NavigatorSavedSearch(set.getString("search_code"), set.getString("filter"), set.getInt("id")));
}
}
} catch (SQLException e) {
Emulator.getLogging().logSQLException(e);
}
}
public void addSavedSearch(NavigatorSavedSearch search) {
this.savedSearches.add(search);
try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("INSERT INTO users_saved_searches (search_code, filter, user_id) VALUES (?, ?, ?)", Statement.RETURN_GENERATED_KEYS)) {
statement.setString(1, search.getSearchCode());
statement.setString(2, search.getFilter());
statement.setInt(3, this.id);
int affectedRows = statement.executeUpdate();
if (affectedRows == 0) {
throw new SQLException("Creating saved search failed, no rows affected.");
}
try (ResultSet generatedKeys = statement.getGeneratedKeys()) {
if (generatedKeys.next()) {
search.setId(generatedKeys.getInt(1));
} else {
throw new SQLException("Creating saved search failed, no ID found.");
}
}
} catch (SQLException e) {
Emulator.getLogging().logSQLException(e);
}
}
public void deleteSavedSearch(NavigatorSavedSearch search) {
this.savedSearches.remove(search);
try (Connection connection = Emulator.getDatabase().getDataSource().getConnection(); PreparedStatement statement = connection.prepareStatement("DELETE FROM users_saved_searches WHERE id = ?")) {
statement.setInt(1, search.getId());
statement.execute();
} catch (SQLException e) {
Emulator.getLogging().logSQLException(e);
}
}
public int getCurrencyAmount(int type) { public int getCurrencyAmount(int type) {
return this.currencies.get(type); return this.currencies.get(type);
} }
@ -418,6 +470,10 @@ public class HabboInfo implements Runnable {
this.machineID = machineID; this.machineID = machineID;
} }
public HashSet<NavigatorSavedSearch> getSavedSearches() {
return this.savedSearches;
}
@Override @Override
public void run() { public void run() {
this.saveCurrencies(); this.saveCurrencies();

View File

@ -316,6 +316,8 @@ public class PacketManager {
this.registerHandler(Incoming.NavigatorCategoryListModeEvent, NavigatorCategoryListModeEvent.class); this.registerHandler(Incoming.NavigatorCategoryListModeEvent, NavigatorCategoryListModeEvent.class);
this.registerHandler(Incoming.NavigatorCollapseCategoryEvent, NavigatorCollapseCategoryEvent.class); this.registerHandler(Incoming.NavigatorCollapseCategoryEvent, NavigatorCollapseCategoryEvent.class);
this.registerHandler(Incoming.NavigatorUncollapseCategoryEvent, NavigatorUncollapseCategoryEvent.class); this.registerHandler(Incoming.NavigatorUncollapseCategoryEvent, NavigatorUncollapseCategoryEvent.class);
this.registerHandler(Incoming.AddSavedSearchEvent, AddSavedSearchEvent.class);
this.registerHandler(Incoming.DeleteSavedSearchEvent, DeleteSavedSearchEvent.class);
} }
private void registerHotelview() throws Exception { private void registerHotelview() throws Exception {

View File

@ -285,6 +285,8 @@ public class Incoming {
public static final int UnbanRoomUserEvent = 992; public static final int UnbanRoomUserEvent = 992;
public static final int RoomUserBanEvent = 1477; public static final int RoomUserBanEvent = 1477;
public static final int RequestNavigatorSettingsEvent = 1782; public static final int RequestNavigatorSettingsEvent = 1782;
public static final int AddSavedSearchEvent = 2226;
public static final int DeleteSavedSearchEvent = 1954;
public static final int SaveWindowSettingsEvent = 3159; public static final int SaveWindowSettingsEvent = 3159;
public static final int GetHabboGuildBadgesMessageEvent = 21; public static final int GetHabboGuildBadgesMessageEvent = 21;

View File

@ -124,7 +124,7 @@ public class SecureLoginEvent extends MessageHandler {
this.client.sendResponse(new NewNavigatorMetaDataComposer()); this.client.sendResponse(new NewNavigatorMetaDataComposer());
this.client.sendResponse(new NewNavigatorLiftedRoomsComposer()); this.client.sendResponse(new NewNavigatorLiftedRoomsComposer());
this.client.sendResponse(new NewNavigatorCollapsedCategoriesComposer()); this.client.sendResponse(new NewNavigatorCollapsedCategoriesComposer());
this.client.sendResponse(new NewNavigatorSavedSearchesComposer()); this.client.sendResponse(new NewNavigatorSavedSearchesComposer(this.client.getHabbo().getHabboInfo().getSavedSearches()));
this.client.sendResponse(new NewNavigatorEventCategoriesComposer()); this.client.sendResponse(new NewNavigatorEventCategoriesComposer());
this.client.sendResponse(new InventoryRefreshComposer()); this.client.sendResponse(new InventoryRefreshComposer());
//this.client.sendResponse(new ForumsTestComposer()); //this.client.sendResponse(new ForumsTestComposer());

View File

@ -70,7 +70,7 @@ public class SecureLoginEvent_BACKUP extends MessageHandler {
this.client.sendResponse(new NewNavigatorMetaDataComposer()); this.client.sendResponse(new NewNavigatorMetaDataComposer());
this.client.sendResponse(new NewNavigatorLiftedRoomsComposer()); this.client.sendResponse(new NewNavigatorLiftedRoomsComposer());
this.client.sendResponse(new NewNavigatorCollapsedCategoriesComposer()); this.client.sendResponse(new NewNavigatorCollapsedCategoriesComposer());
this.client.sendResponse(new NewNavigatorSavedSearchesComposer()); this.client.sendResponse(new NewNavigatorSavedSearchesComposer(this.client.getHabbo().getHabboInfo().getSavedSearches()));
this.client.sendResponse(new NewNavigatorEventCategoriesComposer()); this.client.sendResponse(new NewNavigatorEventCategoriesComposer());
//this.client.sendResponse(new HotelViewComposer()); //this.client.sendResponse(new HotelViewComposer());
//this.client.sendResponse(new UserHomeRoomComposer(this.client.getHabbo().getHabboInfo().getHomeRoom(), this.client.getHabbo().getHabboInfo().getHomeRoom())); //this.client.sendResponse(new UserHomeRoomComposer(this.client.getHabbo().getHabboInfo().getHomeRoom(), this.client.getHabbo().getHabboInfo().getHomeRoom()));

View File

@ -0,0 +1,20 @@
package com.eu.habbo.messages.incoming.navigator;
import com.eu.habbo.habbohotel.navigation.NavigatorSavedSearch;
import com.eu.habbo.messages.incoming.MessageHandler;
import com.eu.habbo.messages.outgoing.navigator.NewNavigatorSavedSearchesComposer;
public class AddSavedSearchEvent extends MessageHandler {
@Override
public void handle() throws Exception {
String searchCode = this.packet.readString();
String filter = this.packet.readString();
if (searchCode.length() > 255) searchCode = searchCode.substring(0, 255);
if (filter.length() > 255) filter = filter.substring(0, 255);
this.client.getHabbo().getHabboInfo().addSavedSearch(new NavigatorSavedSearch(searchCode, filter));
this.client.sendResponse(new NewNavigatorSavedSearchesComposer(this.client.getHabbo().getHabboInfo().getSavedSearches()));
}
}

View File

@ -0,0 +1,26 @@
package com.eu.habbo.messages.incoming.navigator;
import com.eu.habbo.habbohotel.navigation.NavigatorSavedSearch;
import com.eu.habbo.messages.incoming.MessageHandler;
import com.eu.habbo.messages.outgoing.navigator.NewNavigatorSavedSearchesComposer;
public class DeleteSavedSearchEvent extends MessageHandler {
@Override
public void handle() throws Exception {
int searchId = this.packet.readInt();
NavigatorSavedSearch search = null;
for (NavigatorSavedSearch savedSearch : this.client.getHabbo().getHabboInfo().getSavedSearches()) {
if (savedSearch.getId() == searchId) {
search = savedSearch;
break;
}
}
if (search == null) return;
this.client.getHabbo().getHabboInfo().deleteSavedSearch(search);
this.client.sendResponse(new NewNavigatorSavedSearchesComposer(this.client.getHabbo().getHabboInfo().getSavedSearches()));
}
}

View File

@ -10,7 +10,7 @@ public class RequestNewNavigatorDataEvent extends MessageHandler {
this.client.sendResponse(new NewNavigatorMetaDataComposer()); this.client.sendResponse(new NewNavigatorMetaDataComposer());
this.client.sendResponse(new NewNavigatorLiftedRoomsComposer()); this.client.sendResponse(new NewNavigatorLiftedRoomsComposer());
this.client.sendResponse(new NewNavigatorCollapsedCategoriesComposer()); this.client.sendResponse(new NewNavigatorCollapsedCategoriesComposer());
this.client.sendResponse(new NewNavigatorSavedSearchesComposer()); this.client.sendResponse(new NewNavigatorSavedSearchesComposer(this.client.getHabbo().getHabboInfo().getSavedSearches()));
this.client.sendResponse(new NewNavigatorEventCategoriesComposer()); this.client.sendResponse(new NewNavigatorEventCategoriesComposer());
this.client.sendResponse(new NewNavigatorSettingsComposer(this.client.getHabbo().getHabboStats().navigatorWindowSettings)); this.client.sendResponse(new NewNavigatorSettingsComposer(this.client.getHabbo().getHabboStats().navigatorWindowSettings));
} }

View File

@ -58,10 +58,14 @@ public class RequestNewNavigatorRoomsEvent extends MessageHandler {
return; return;
} }
if (filter == null && category != null) { if (filter == null) {
filter = Emulator.getGameEnvironment().getNavigatorManager().filters.get("hotel_view"); filter = Emulator.getGameEnvironment().getNavigatorManager().filters.get("hotel_view");
} }
if (category == null) {
category = Emulator.getGameEnvironment().getRoomManager().getCategoryBySafeCaption("hotel_view");
}
if (filter == null) if (filter == null)
return; return;

View File

@ -1,34 +1,31 @@
package com.eu.habbo.messages.outgoing.navigator; package com.eu.habbo.messages.outgoing.navigator;
import com.eu.habbo.habbohotel.navigation.NavigatorSavedSearch;
import com.eu.habbo.messages.ServerMessage; import com.eu.habbo.messages.ServerMessage;
import com.eu.habbo.messages.outgoing.MessageComposer; import com.eu.habbo.messages.outgoing.MessageComposer;
import com.eu.habbo.messages.outgoing.Outgoing; import com.eu.habbo.messages.outgoing.Outgoing;
import java.util.HashSet;
public class NewNavigatorSavedSearchesComposer extends MessageComposer { public class NewNavigatorSavedSearchesComposer extends MessageComposer {
private final HashSet<NavigatorSavedSearch> searches;
public NewNavigatorSavedSearchesComposer(HashSet<NavigatorSavedSearch> searches) {
this.searches = searches;
}
@Override @Override
public ServerMessage compose() { public ServerMessage compose() {
this.response.init(Outgoing.NewNavigatorSavedSearchesComposer); this.response.init(Outgoing.NewNavigatorSavedSearchesComposer);
this.response.appendInt(4); this.response.appendInt(this.searches.size());
this.response.appendInt(1); for (NavigatorSavedSearch search : this.searches) {
this.response.appendString("official"); this.response.appendInt(search.getId());
this.response.appendString(""); this.response.appendString(search.getSearchCode());
this.response.appendString(search.getFilter() == null ? "" : search.getFilter());
this.response.appendString(""); this.response.appendString("");
}
this.response.appendInt(2);
this.response.appendString("recommended");
this.response.appendString("");
this.response.appendString("");
this.response.appendInt(3);
this.response.appendString("my");
this.response.appendString("");
this.response.appendString("");
this.response.appendInt(4);
this.response.appendString("favorites");
this.response.appendString("");
this.response.appendString("");
return this.response; return this.response;
} }
} }

View File

@ -11,20 +11,20 @@ import com.eu.habbo.messages.outgoing.Outgoing;
public class RoomDataComposer extends MessageComposer { public class RoomDataComposer extends MessageComposer {
private final Room room; private final Room room;
private final Habbo habbo; private final Habbo habbo;
private final boolean publicRoom; private final boolean roomForward;
private final boolean unknown; private final boolean enterRoom;
public RoomDataComposer(Room room, Habbo habbo, boolean boolA, boolean boolB) { public RoomDataComposer(Room room, Habbo habbo, boolean roomForward, boolean enterRoom) {
this.room = room; this.room = room;
this.habbo = habbo; this.habbo = habbo;
this.publicRoom = boolA; this.roomForward = roomForward;
this.unknown = boolB; this.enterRoom = enterRoom;
} }
@Override @Override
public ServerMessage compose() { public ServerMessage compose() {
this.response.init(Outgoing.RoomDataComposer); this.response.init(Outgoing.RoomDataComposer);
this.response.appendBoolean(this.unknown); this.response.appendBoolean(this.enterRoom);
this.response.appendInt(this.room.getId()); this.response.appendInt(this.room.getId());
this.response.appendString(this.room.getName()); this.response.appendString(this.room.getName());
if (this.room.isPublicRoom()) { if (this.room.isPublicRoom()) {
@ -92,9 +92,9 @@ public class RoomDataComposer extends MessageComposer {
this.response.appendInt((this.room.getPromotion().getEndTimestamp() - Emulator.getIntUnixTimestamp()) / 60); this.response.appendInt((this.room.getPromotion().getEndTimestamp() - Emulator.getIntUnixTimestamp()) / 60);
} }
this.response.appendBoolean(this.publicRoom); this.response.appendBoolean(this.roomForward);
this.response.appendBoolean(this.room.isStaffPromotedRoom()); // staffpicked this.response.appendBoolean(this.room.isStaffPromotedRoom()); // staffpicked
this.response.appendBoolean(this.room.isPublicRoom()); //ispublicroom this.response.appendBoolean(this.room.hasGuild() && Emulator.getGameEnvironment().getGuildManager().getGuildMember(this.room.getGuildId(), this.habbo.getHabboInfo().getId()) != null); // is group member
this.response.appendBoolean(this.room.isMuted()); // isroommuted this.response.appendBoolean(this.room.isMuted()); // isroommuted
this.response.appendInt(this.room.getMuteOption()); this.response.appendInt(this.room.getMuteOption());