68 lines
1.9 KiB
Python
68 lines
1.9 KiB
Python
import json, os, pickle
|
|
from os import path
|
|
from datetime import datetime
|
|
|
|
import functions
|
|
from listing import YahooAuctionsItem, JST
|
|
|
|
class BuypeebSettings:
|
|
def __init__(self, location: str):
|
|
self.updateInterval = 10 * 60
|
|
self.favouriteUpdateInterval = 5 * 60
|
|
self.updateIntervalCritical = 60
|
|
self.favouriteUpdateIntervalCritical = 30
|
|
self.watchlist = {}
|
|
self.jwatchlist = {}
|
|
self.location = location
|
|
|
|
def save(self):
|
|
for id, item in self.watchlist.items():
|
|
self.jwatchlist[id] = {
|
|
"name": item.name,
|
|
"original_name": item.original_name,
|
|
"favourite": False
|
|
}
|
|
|
|
self.watchlist = {}
|
|
|
|
print(self.__dict__)
|
|
json.dump(self.__dict__, open(self.location + "config.json", 'w'))
|
|
|
|
def load(self):
|
|
if not path.isfile(self.location + "config.json"):
|
|
os.makedirs(self.location, 0o755, True)
|
|
open(self.location + "config.json", 'x')
|
|
else:
|
|
try:
|
|
j = json.load(open(self.location + "config.json", 'r'))
|
|
for key in j:
|
|
setattr(self, key, j[key])
|
|
for key in self.jwatchlist:
|
|
self.watchlist[key] = YahooAuctionsItem(None, from_json = self.jwatchlist[key], id = key)
|
|
|
|
self.jwatchlist = {}
|
|
|
|
except:
|
|
raise
|
|
print("Couldn't load settings - using defaults")
|
|
|
|
def watch(self, url: str, name: str = None):
|
|
id = functions.id_from_url(url)
|
|
self.watchlist[id] = YahooAuctionsItem(url, id, name)
|
|
for item in self.watchlist.values():
|
|
print(item.name, item.price)
|
|
|
|
def outdated_items(self):
|
|
out = []
|
|
now = datetime.now(tz = JST).timestamp()
|
|
for item in self.watchlist.values():
|
|
time_difference = now - item.last_checked.timestamp()
|
|
ending_soon = False # TODO: this
|
|
|
|
if (item.favourite and time_difference >= self.favouriteUpdateInterval) or \
|
|
(item.favourite and ending_soon and time_difference >= self.favouriteUpdateIntervalCritical) or \
|
|
(time_difference >= self.updateInterval) or \
|
|
(ending_soon and time_difference >= self.updateIntervalCritical):
|
|
out.append(item)
|
|
|
|
return out
|