Skip to content

Commit

Permalink
Fix offline votes not saving and fix expired vote
Browse files Browse the repository at this point in the history
  • Loading branch information
imjack committed Jul 18, 2019
1 parent 077c576 commit 73ae80e
Show file tree
Hide file tree
Showing 4 changed files with 92 additions and 22 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -15,3 +15,4 @@ hs_err_pid*
target
.idea
*.iml
/bin/
50 changes: 50 additions & 0 deletions src/main/java/io/pocketvote/data/Vote.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package io.pocketvote.data;

import java.util.HashMap;

import cn.nukkit.utils.ConfigSection;

public class Vote {
private final String player, site, ip;
private final long expires;

public Vote(String player, String site, String ip, long expires) {
this.player = player;
this.site = site;
this.ip = ip;
this.expires = expires;
}

public Vote(ConfigSection selection) {
this.player = selection.getString("player");
this.site = selection.getString("site");
this.ip = selection.getString("ip");
this.expires = Long.parseLong(selection.getString("expires"));
}

public String getPlayer() {
return player;
}

public String getSite() {
return site;
}

public String getIp() {
return ip;
}

public long getExpires() {
return expires;
}

public HashMap<String, String> saveVote() {
HashMap<String, String> voteData = new HashMap<>();
voteData.put("site", getSite());
voteData.put("ip", getIp());
voteData.put("player", getPlayer());
voteData.put("expires", Long.toString(getExpires()));
return voteData;
}

}
16 changes: 8 additions & 8 deletions src/main/java/io/pocketvote/listener/VoteListener.java
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@
import cn.nukkit.event.Listener;
import cn.nukkit.event.player.PlayerJoinEvent;
import io.pocketvote.PocketVote;
import io.pocketvote.data.Vote;
import io.pocketvote.event.VoteDispatchEvent;
import io.pocketvote.event.VoteEvent;
import io.pocketvote.util.VoteManager;

import java.util.HashMap;
import java.util.Iterator;

public class VoteListener implements Listener {
Expand Down Expand Up @@ -60,19 +60,19 @@ public void onPlayerJoin(PlayerJoinEvent event) {

ConsoleCommandSender sender = plugin.getServer().getConsoleSender();

Iterator<HashMap<String, String>> votes = vm.getVotes();
Iterator<Vote> votes = vm.getVotes();

if(!votes.hasNext()) return;

while(votes.hasNext()) {
HashMap<String, String> vote = votes.next();
if(!vote.get("player").equalsIgnoreCase(event.getPlayer().getName())) continue;
plugin.getServer().getPluginManager().callEvent(new VoteDispatchEvent(vote.get("player"), vote.get("ip"), vote.get("site")));
Vote vote = votes.next();
if(!vote.getPlayer().equalsIgnoreCase(event.getPlayer().getName())) continue;
plugin.getServer().getPluginManager().callEvent(new VoteDispatchEvent(vote.getPlayer(), vote.getIp(), vote.getSite()));
for(String cmd : plugin.cmdos) {
plugin.getServer().dispatchCommand(sender, cmd
.replaceAll("%player", vote.get("player"))
.replaceAll("%ip", vote.get("ip"))
.replaceAll("%site", vote.get("site"))
.replaceAll("%player", vote.getPlayer())
.replaceAll("%ip", vote.getIp())
.replaceAll("%site", vote.getSite())
);
}
votes.remove();
Expand Down
47 changes: 33 additions & 14 deletions src/main/java/io/pocketvote/util/VoteManager.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
package io.pocketvote.util;

import cn.nukkit.scheduler.TaskHandler;
import cn.nukkit.utils.ConfigSection;
import cn.nukkit.utils.TextFormat;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.pocketvote.PocketVote;
import io.pocketvote.data.VRCRecord;
import io.pocketvote.data.Vote;
import io.pocketvote.task.VRCCheckTask;

import java.io.File;
Expand All @@ -16,12 +18,13 @@
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

public class VoteManager {

private PocketVote plugin;

private ArrayList<HashMap<String, String>> votes;
private List<Vote> votes;
private ArrayList<VRCRecord> vrcs;

private HashMap<String, TaskHandler> vrcTasks;
Expand All @@ -30,14 +33,14 @@ public class VoteManager {

public VoteManager(PocketVote plugin) {
this.plugin = plugin;
this.votes = plugin.getConfig().get("votes", new ArrayList<>());
this.votes = loadVotes();
this.vrcs = new ArrayList<>();
this.vrcTasks = new HashMap<>();
}

public boolean hasVotes(String player) {
for(HashMap<String, String> vote : votes) {
if(vote.get("player").equalsIgnoreCase(player)) return true;
for(Vote vote : votes) {
if(vote.getPlayer().equalsIgnoreCase(player)) return true;
}
return false;
}
Expand All @@ -63,20 +66,20 @@ public String getVoteLink() {
return votes.iterator();
}*/

public Iterator<HashMap<String, String>> getVotes() {
public Iterator<Vote> getVotes() {
return votes.iterator();
}

public void addVote(String player, String site, String ip) {
HashMap<String, String> vote = new HashMap<>();
vote.put("player", player);
vote.put("site", site);
vote.put("ip", ip);
votes.add(vote);
votes.add(new Vote(player, site, ip, Instant.now().getEpochSecond() + (86400 * plugin.getConfig().getInt("vote-expiration", 7))));
}

public void commit() {
plugin.getConfig().set("votes", votes);
List<HashMap<String, String>> commitVote = new ArrayList<>();
for (Vote vote : votes ) {
commitVote.add(vote.saveVote());
}
plugin.getConfig().set("votes", commitVote);
plugin.saveConfig();
}

Expand Down Expand Up @@ -136,18 +139,34 @@ public void removeVRCTask(String player) {

public int expireVotes() {
int expired = 0;
Iterator<HashMap<String, String>> votes = getVotes();
Iterator<Vote> votes = getVotes();

if(!votes.hasNext()) return expired;
while(votes.hasNext()) {
HashMap<String, String> vote = votes.next();
if(!vote.containsKey("expires") || Instant.now().getEpochSecond() > Long.valueOf(String.valueOf(vote.get("expires")))) {
Vote vote = votes.next();

if(Instant.now().getEpochSecond() > vote.getExpires()) {
System.out.println(vote.getPlayer() + " delted");
votes.remove();
expired++;
}
}
commit();
return expired;
}

private List<Vote> loadVotes() {
List<Vote> loadVotes = new ArrayList<>();
if(plugin.getConfig().getList("votes") != null) {
for (Object v : (ArrayList<?>) plugin.getConfig().getList("votes", new ArrayList<Object>())) {
if (v instanceof ConfigSection) {
loadVotes.add(new Vote((ConfigSection) v));
} else {
plugin.getLogger().debug("unknown vote data structure");
}
}
}
return loadVotes;
}

}

0 comments on commit 73ae80e

Please sign in to comment.