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