Do not save to file every time a Game instance asks for it, but instead every 10 seconds if needed

This commit is contained in:
Elnath 2021-06-14 01:24:00 +02:00
parent 41af88bdb1
commit 6f359abeaf
1 changed files with 13 additions and 1 deletions

View File

@ -5,6 +5,7 @@ from pathlib import Path
from typing import Union, Dict, Callable, Tuple
import discord
from discord.ext import tasks
from .Game import Game
@ -60,6 +61,8 @@ class GamesFile:
# Verifying that attributes have been initialised properly
assert self.file_obj is not None and self.config is not None
logger.debug("Games file successfully initialised")
self.save_needed = False
self.save_if_needed.start()
atexit.register(self.save_to_file)
@ -112,6 +115,15 @@ class GamesFile:
self.file_obj.flush()
logger.debug("Written games file to disk")
@tasks.loop(seconds = 10)
async def save_if_needed(self):
if self.save_needed:
self.save_to_file()
self.save_needed = False
def ask_for_save(self):
self.save_needed = True
def __getitem__(self, guild: discord.Guild) -> Game:
"""
Get the game information for one guild
@ -120,4 +132,4 @@ class GamesFile:
if guild_id_str not in self.config:
self.config[guild_id_str] = Game.new_dict()
self.save_to_file()
return Game(self.config[guild_id_str], self.save_to_file, guild)
return Game(self.config[guild_id_str], self.ask_for_save, guild)