111 lines
2.5 KiB
Python
111 lines
2.5 KiB
Python
from izzylib import DotDict
|
|
from izzylib_http_async.server.error import NotFound
|
|
from izzylib_http_async.server.view import View
|
|
|
|
from . import tpl_path
|
|
|
|
|
|
class BaseView(View):
|
|
def get_save(self, saveid):
|
|
try:
|
|
return self.app.get_save_by_id(saveid)
|
|
|
|
except KeyError as e:
|
|
raise NotFound(e)
|
|
|
|
|
|
def get_data(self, save):
|
|
data = DotDict(save.props.to_dict())
|
|
data['xp'] = f'{data.xp:,d}'
|
|
data['money'] = f'${data.money:,d}'
|
|
data['path'] = save.path
|
|
data['filename'] = save.path.name
|
|
data['character_class'] = save.character_class.name
|
|
data['eridium'] = save.eridium
|
|
data['readonly'] = save.path.permissions()['user'] == 4
|
|
|
|
return data
|
|
|
|
|
|
class Home(BaseView):
|
|
__path__ = ['/']
|
|
|
|
async def get(self, request, response):
|
|
response.set_template('home.haml')
|
|
|
|
|
|
class Style(BaseView):
|
|
__path__ = ['/style.css']
|
|
|
|
async def get(self, request, response):
|
|
response.set_template('style.css', content_type='text/css')
|
|
|
|
|
|
class Javascript(BaseView):
|
|
__path__ = ['/functions.js']
|
|
jspath = tpl_path.join('functions.js')
|
|
jsfile = None
|
|
last_mod = 0
|
|
|
|
async def get(self, request, response):
|
|
if not self.jsfile or self.last_mod < self.jspath.mtime:
|
|
self.last_mod = self.jspath.mtime
|
|
|
|
with self.jspath.open('r') as fd:
|
|
self.jsfile = fd.read()
|
|
|
|
response.body = self.jsfile
|
|
response.content_type = 'application/javascript'
|
|
|
|
|
|
class ApiList(BaseView):
|
|
__path__ = ['/api/list']
|
|
|
|
async def get(self, request, response):
|
|
save_list = {save.id for save in self.app.saves}
|
|
response.set_json(list(save_list))
|
|
|
|
|
|
class ApiSave(BaseView):
|
|
__path__ = ['/api/save/{saveid:int}']
|
|
|
|
async def get(self, request, response, saveid):
|
|
save = self.get_save(saveid)
|
|
data = self.get_data(save)
|
|
return response.set_json(data)
|
|
|
|
|
|
class ApiSaveToggle(BaseView):
|
|
__path__ = ['/api/save/{saveid:int}/toggle']
|
|
|
|
async def get(self, request, response, saveid):
|
|
save = self.get_save(saveid)
|
|
readonly = save.path.permissions()['user'] == 4
|
|
|
|
if readonly:
|
|
save.path.chmod(644)
|
|
|
|
else:
|
|
save.path.chmod(444)
|
|
|
|
return response.set_json({'readonly': not readonly})
|
|
|
|
|
|
class ApiSaveHtml(BaseView):
|
|
__path__ = ['/api/save/{saveid:int}/html']
|
|
|
|
async def get(self, request, response, saveid):
|
|
save = self.get_save(saveid)
|
|
data = self.get_data(save)
|
|
return response.set_template('save.haml', {'save': data})
|
|
|
|
|
|
class ApiSaveReload(BaseView):
|
|
__path__ = ['/api/save/{saveid:int}/reload']
|
|
|
|
async def get(self, request, response, saveid):
|
|
save = self.get_save(saveid)
|
|
save.reload()
|
|
|
|
return response.set_json(self.get_data(save))
|