Can check visitors now
This commit is contained in:
parent
2b8224a4b2
commit
55ce486dee
39
botany.py
39
botany.py
@ -145,12 +145,23 @@ class Plant(object):
|
|||||||
# must water plant first day
|
# must water plant first day
|
||||||
self.watered_timestamp = int(time.time())-(24*3600)-1
|
self.watered_timestamp = int(time.time())-(24*3600)-1
|
||||||
self.watered_24h = False
|
self.watered_24h = False
|
||||||
|
# visitors are coming
|
||||||
|
self.visitors = []
|
||||||
|
# TODO: manually checking for pending visitors
|
||||||
|
# TODO: clear visitors when checking
|
||||||
|
self.weekly_visitors = {}
|
||||||
|
# TODO: clear weekly visitors on sunday 00:00:00
|
||||||
|
|
||||||
def migrate_properties(self):
|
def migrate_properties(self):
|
||||||
# Migrates old data files to new
|
# Migrates old data files to new
|
||||||
if not hasattr(self, 'generation'):
|
if not hasattr(self, 'generation'):
|
||||||
self.generation = 1
|
self.generation = 1
|
||||||
|
|
||||||
|
if not hasattr(self, 'visitors'):
|
||||||
|
self.visitors = []
|
||||||
|
if not hasattr(self, 'weekly_visitors'):
|
||||||
|
self.weekly_visitors = {}
|
||||||
|
|
||||||
def parse_plant(self):
|
def parse_plant(self):
|
||||||
# Converts plant data to human-readable format
|
# Converts plant data to human-readable format
|
||||||
output = ""
|
output = ""
|
||||||
@ -204,24 +215,32 @@ class Plant(object):
|
|||||||
botany_dir = os.path.join(user_dir,'.botany')
|
botany_dir = os.path.join(user_dir,'.botany')
|
||||||
visitor_filepath = os.path.join(botany_dir,'visitors.json')
|
visitor_filepath = os.path.join(botany_dir,'visitors.json')
|
||||||
guest_data = {'latest_timestamp': 0, 'visitors': []}
|
guest_data = {'latest_timestamp': 0, 'visitors': []}
|
||||||
visitors = []
|
|
||||||
if os.path.isfile(visitor_filepath):
|
if os.path.isfile(visitor_filepath):
|
||||||
with open(visitor_filepath, 'rw') as visitor_file:
|
with open(visitor_filepath, 'rw') as visitor_file:
|
||||||
data = json.load(visitor_file)
|
data = json.load(visitor_file)
|
||||||
for element in data:
|
for element in data:
|
||||||
if element['user'] not in guest_data['visitors']:
|
if element['user'] not in self.visitors:
|
||||||
guest_data['visitors'].append(element['user'])
|
self.visitors.append(element['user'])
|
||||||
|
# counter for weekly visitors
|
||||||
|
if element['user'] not in self.weekly_visitors:
|
||||||
|
self.weekly_visitors[element['user']] = 1
|
||||||
|
else:
|
||||||
|
self.weekly_visitors[element['user']] += 1
|
||||||
if element['timestamp'] > guest_data['latest_timestamp']:
|
if element['timestamp'] > guest_data['latest_timestamp']:
|
||||||
guest_data['latest_timestamp'] = element['timestamp']
|
guest_data['latest_timestamp'] = element['timestamp']
|
||||||
os.remove(visitor_filepath)
|
# TODO: reenable emptying of visitor file
|
||||||
return guest_data
|
# TODO: create
|
||||||
|
# visitor_file.truncate()
|
||||||
|
# json.dump([], visitor_file)
|
||||||
|
else:
|
||||||
|
with open(visitor_filepath, mode='w') as f:
|
||||||
|
json.dump([], f)
|
||||||
|
return guest_data['latest_timestamp']
|
||||||
|
|
||||||
def water_check(self):
|
def water_check(self):
|
||||||
guest_data = self.guest_check()
|
latest_visitor_timestamp = self.guest_check()
|
||||||
if guest_data['visitors']:
|
if latest_visitor_timestamp > self.watered_timestamp:
|
||||||
if guest_data['latest_timestamp'] > self.watered_timestamp:
|
self.watered_timestamp = latest_visitor_timestamp
|
||||||
self.watered_timestamp = guest_data['latest_timestamp']
|
|
||||||
|
|
||||||
self.time_delta_watered = int(time.time()) - self.watered_timestamp
|
self.time_delta_watered = int(time.time()) - self.watered_timestamp
|
||||||
if self.time_delta_watered <= (24 * 3600):
|
if self.time_delta_watered <= (24 * 3600):
|
||||||
return True
|
return True
|
||||||
|
@ -5,6 +5,8 @@ import traceback
|
|||||||
import threading
|
import threading
|
||||||
import time
|
import time
|
||||||
import random
|
import random
|
||||||
|
import getpass
|
||||||
|
import json
|
||||||
|
|
||||||
class CursedMenu(object):
|
class CursedMenu(object):
|
||||||
#TODO: name your plant
|
#TODO: name your plant
|
||||||
@ -481,19 +483,21 @@ class CursedMenu(object):
|
|||||||
|
|
||||||
def clear_info_pane(self):
|
def clear_info_pane(self):
|
||||||
# Clears bottom part of screen
|
# Clears bottom part of screen
|
||||||
clear_bar = " " * (self.maxx-2) + "\n"
|
clear_bar = " " * (self.maxx - 3)
|
||||||
clear_block = clear_bar * (self.maxy - 15)
|
this_y = 12
|
||||||
for y, line in enumerate(clear_block.splitlines(), 2):
|
while this_y < self.maxy:
|
||||||
self.screen.addstr(y+12, 2, line, curses.A_NORMAL)
|
self.screen.addstr(this_y, 2, clear_bar, curses.A_NORMAL)
|
||||||
|
this_y += 1
|
||||||
self.screen.refresh()
|
self.screen.refresh()
|
||||||
|
|
||||||
def draw_info_text(self, info_text):
|
def draw_info_text(self, info_text, y_offset = 0):
|
||||||
# print lines of text to info pane at bottom of screen
|
# print lines of text to info pane at bottom of screen
|
||||||
if type(info_text) is str:
|
if type(info_text) is str:
|
||||||
info_text = info_text.splitlines()
|
info_text = info_text.splitlines()
|
||||||
|
|
||||||
for y, line in enumerate(info_text, 2):
|
for y, line in enumerate(info_text, 2):
|
||||||
self.screen.addstr(y+12, 2, line, curses.A_NORMAL)
|
this_y = y+12 + y_offset
|
||||||
|
if this_y < self.maxy:
|
||||||
|
self.screen.addstr(this_y, 2, line, curses.A_NORMAL)
|
||||||
self.screen.refresh()
|
self.screen.refresh()
|
||||||
|
|
||||||
def harvest_confirmation(self):
|
def harvest_confirmation(self):
|
||||||
@ -518,10 +522,32 @@ class CursedMenu(object):
|
|||||||
pass
|
pass
|
||||||
self.clear_info_pane()
|
self.clear_info_pane()
|
||||||
|
|
||||||
|
def build_visitor_output(self, visitors):
|
||||||
|
visitor_block = ""
|
||||||
|
visitor_line = ""
|
||||||
|
for visitor in visitors[:-1]:
|
||||||
|
if visitor_block.count('\n') > self.maxy-12:
|
||||||
|
visitor_block += "and more"
|
||||||
|
break
|
||||||
|
if len(visitor_line + visitor) > self.maxx-4:
|
||||||
|
visitor_block += '\n'
|
||||||
|
visitor_line = ""
|
||||||
|
visitor_block += str(visitor) + ', '
|
||||||
|
visitor_line += str(visitor) + ', '
|
||||||
|
else:
|
||||||
|
visitor_block += "& " + str(visitors[-1])
|
||||||
|
visitor_line += "& " + str(visitors[-1])
|
||||||
|
|
||||||
|
|
||||||
|
return visitor_block
|
||||||
def visit_handler(self):
|
def visit_handler(self):
|
||||||
self.clear_info_pane()
|
|
||||||
self.draw_info_text("whose plant would you like to visit?")
|
self.draw_info_text("whose plant would you like to visit?")
|
||||||
self.screen.addstr(15, 2, '~')
|
self.screen.addstr(15, 2, '~')
|
||||||
|
if self.plant.visitors:
|
||||||
|
self.draw_info_text("you've been visited by: ", 4)
|
||||||
|
visitor_text = self.build_visitor_output(self.plant.visitors)
|
||||||
|
self.draw_info_text(visitor_text, 5)
|
||||||
|
|
||||||
guest_garden = ""
|
guest_garden = ""
|
||||||
user_input = 0
|
user_input = 0
|
||||||
while user_input != 10:
|
while user_input != 10:
|
||||||
@ -536,14 +562,35 @@ class CursedMenu(object):
|
|||||||
self.screen.addstr(15, 3, str(guest_garden))
|
self.screen.addstr(15, 3, str(guest_garden))
|
||||||
self.screen.refresh()
|
self.screen.refresh()
|
||||||
# test if user exists and has botany directory and file
|
# test if user exists and has botany directory and file
|
||||||
guest_path = "/home/{}/.botany/{}_plant.dat".format(guest_garden, guest_garden)
|
home_folder = os.path.dirname(os.path.expanduser("~"))
|
||||||
if os.path.isfile(guest_path):
|
guest_json = home_folder + "/{}/.botany/{}_plant_data.json".format(guest_garden, guest_garden)
|
||||||
self.screen.addstr(16, 2, "...you watered ~" + str(guest_garden) + "'s plant...")
|
guest_plant_description = ""
|
||||||
|
if os.path.isfile(guest_json):
|
||||||
|
with open(guest_json) as f:
|
||||||
|
visitor_data = json.load(f)
|
||||||
|
guest_plant_description = visitor_data['description']
|
||||||
|
guest_visitor_file = home_folder + "/{}/.botany/visitors.json".format(guest_garden, guest_garden)
|
||||||
|
if os.path.isfile(guest_visitor_file):
|
||||||
|
self.water_on_visit(guest_visitor_file)
|
||||||
|
self.screen.addstr(16, 2, "...you watered ~{}'s {}...".format(str(guest_garden), guest_plant_description))
|
||||||
|
# you watered their x plant
|
||||||
else:
|
else:
|
||||||
self.screen.addstr(16, 2, "i can't seem to find directions to {}...".format(guest_garden))
|
self.screen.addstr(16, 2, "i can't seem to find directions to {}...".format(guest_garden))
|
||||||
self.screen.getch()
|
self.screen.getch()
|
||||||
self.clear_info_pane()
|
self.clear_info_pane()
|
||||||
|
|
||||||
|
def water_on_visit(self, guest_visitor_file):
|
||||||
|
# check if path exists
|
||||||
|
# if not exists create and dump json in
|
||||||
|
# if exists open and append to file
|
||||||
|
visitor_data = {}
|
||||||
|
guest_data = {'user': getpass.getuser(), 'timestamp': int(time.time())}
|
||||||
|
if os.path.isfile(guest_visitor_file):
|
||||||
|
with open(guest_visitor_file) as f:
|
||||||
|
visitor_data = json.load(f)
|
||||||
|
visitor_data.append(guest_data)
|
||||||
|
with open(guest_visitor_file, mode='w') as f:
|
||||||
|
f.write(json.dumps(visitor_data, indent=2))
|
||||||
|
|
||||||
def handle_request(self, request):
|
def handle_request(self, request):
|
||||||
# Menu options call functions here
|
# Menu options call functions here
|
||||||
|
Loading…
x
Reference in New Issue
Block a user