Skip to content

Commit 8777eaf

Browse files
Add vote expiration.
1 parent f4b5597 commit 8777eaf

File tree

5 files changed

+61
-7
lines changed

5 files changed

+61
-7
lines changed

dependency-reduced-pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
<directory>src/main/resources</directory>
1414
</resource>
1515
</resources>
16-
<finalName>${project.artifactId}</finalName>
16+
<finalName>${project.name}</finalName>
1717
<plugins>
1818
<plugin>
1919
<artifactId>maven-jar-plugin</artifactId>

src/main/java/io/pocketvote/PocketVote.java

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@
22

33
import cn.nukkit.plugin.PluginBase;
44
import cn.nukkit.scheduler.TaskHandler;
5+
import cn.nukkit.utils.ConfigSection;
56
import cn.nukkit.utils.TextFormat;
67
import io.pocketvote.listener.VoteListener;
78
import io.pocketvote.cmd.PocketVoteCommand;
9+
import io.pocketvote.task.ExpireVotesTask;
810
import io.pocketvote.task.SchedulerTask;
911
import io.pocketvote.util.VoteManager;
1012

@@ -50,13 +52,13 @@ public class PocketVote extends PluginBase {
5052

5153
@Override
5254
public void onEnable() {
53-
/**
55+
/*
56+
* List of things I need to do.
5457
* TODO: Add GURU support.
5558
* TODO: Add TopVoter
5659
* TODO: Add Vote link.
5760
* TODO: Add diagnose.
5861
* TODO: Add heartbeat.
59-
* TODO: Add expire.
6062
*/
6163
plugin = this;
6264
saveDefaultConfig();
@@ -77,14 +79,15 @@ public void onEnable() {
7779
getServer().getCommandMap().register("pocketvote", new PocketVoteCommand(plugin));
7880

7981
/* Register tasks */
80-
this.tasks = new ArrayList<>();
82+
tasks = new ArrayList<>();
83+
tasks.add(getServer().getScheduler().scheduleRepeatingTask(plugin, new ExpireVotesTask(plugin), 6000).getTaskId());
8184

8285
schedulerTask = getServer().getScheduler().scheduleRepeatingTask(plugin, new SchedulerTask(plugin), 1200); // 1200 = 60 seconds.
8386
}
8487

8588
@Override
8689
public void onDisable() {
87-
for(int task : tasks) getServer().getScheduler().cancelTask(task); // TODO: Figure out if I can remove the tasks array.
90+
for(int task : tasks) getServer().getScheduler().cancelTask(task);
8891
getServer().getScheduler().cancelTask(schedulerTask.getTaskId());
8992
plugin = null;
9093
}
@@ -177,12 +180,24 @@ public void updateConfig() {
177180
getConfig().set("multi-server.mysql.database", "pocketvote");
178181
getConfig().set("version", 2);
179182
saveConfig();
183+
reloadConfig();
180184
}
181185
if(plugin.getConfig().getInt("version", 2) == 2) {
182-
getLogger().info(TextFormat.YELLOW + "Migrating config to version 3");
186+
getLogger().info(TextFormat.YELLOW + "Migrating config to version 3.");
183187
getConfig().set("development", false);
184188
getConfig().set("version", 3);
185189
saveConfig();
190+
reloadConfig();
191+
}
192+
if(plugin.getConfig().getInt("version", 3) == 3) {
193+
getLogger().info(TextFormat.YELLOW + "Migrating config to version 4.");
194+
for(Object v : (ArrayList) getConfig().getList("votes", new ArrayList())) {
195+
((ConfigSection) v).set("expires", Instant.now().getEpochSecond() + (86400 * 7));
196+
}
197+
getConfig().set("vote-expiration", 7);
198+
getConfig().set("version", 4);
199+
saveConfig();
200+
reloadConfig();
186201
}
187202
}
188203

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package io.pocketvote.task;
2+
3+
import cn.nukkit.scheduler.Task;
4+
import io.pocketvote.PocketVote;
5+
6+
public class ExpireVotesTask extends Task {
7+
8+
private PocketVote plugin;
9+
10+
public ExpireVotesTask(PocketVote plugin) {
11+
this.plugin = plugin;
12+
}
13+
14+
@Override
15+
public void onRun(int i) {
16+
plugin.getLogger().debug("Cleaning up expired votes.");
17+
int expired = plugin.getVoteManager().expireVotes();
18+
if(expired > 0) plugin.getLogger().debug("Expired " + expired + " votes.");
19+
}
20+
21+
}

src/main/java/io/pocketvote/util/VoteManager.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
import java.io.IOException;
1313
import java.nio.file.Files;
1414
import java.nio.file.Paths;
15+
import java.time.Instant;
1516
import java.util.ArrayList;
1617
import java.util.HashMap;
1718
import java.util.Iterator;
@@ -123,4 +124,20 @@ public void removeVRCTask(String player) {
123124
vrcTasks.remove(player);
124125
}
125126

127+
public int expireVotes() {
128+
int expired = 0;
129+
Iterator<HashMap<String, String>> votes = getVotes();
130+
131+
if(!votes.hasNext()) return expired;
132+
while(votes.hasNext()) {
133+
HashMap<String, String> vote = votes.next();
134+
if(!vote.containsKey("expires") || Instant.now().getEpochSecond() > Long.valueOf(String.valueOf(vote.get("expires")))) {
135+
votes.remove();
136+
expired++;
137+
}
138+
}
139+
commit();
140+
return expired;
141+
}
142+
126143
}

src/main/resources/config.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
version: 3
1+
version: 4
22
development: false
33
identity: ''
44
secret: ''
55
lock: false
6+
vote-expiration: 7
67
multi-server:
78
enabled: false
89
role: 'master'

0 commit comments

Comments
 (0)