chatgpt added offline items update
This commit is contained in:
@@ -3,6 +3,7 @@ from flask_login import login_required, current_user
|
||||
from models import db
|
||||
from models import Item, ListOfItems
|
||||
from sqlalchemy import desc, text
|
||||
from datetime import datetime
|
||||
import os
|
||||
from log import Log
|
||||
from auth import create_cookie
|
||||
@@ -23,6 +24,28 @@ def require_item_access(itemid):
|
||||
abort(403)
|
||||
return item
|
||||
|
||||
def client_update_time():
|
||||
client_updated_at = request.args.get("client_updated_at")
|
||||
if not client_updated_at:
|
||||
return None
|
||||
|
||||
try:
|
||||
return datetime.fromtimestamp(int(client_updated_at) / 1000)
|
||||
except ValueError:
|
||||
return None
|
||||
|
||||
def item_update_is_current(item):
|
||||
updated_at = client_update_time()
|
||||
if updated_at is None:
|
||||
return True
|
||||
|
||||
return item.updated_at is None or updated_at >= item.updated_at
|
||||
|
||||
def stamp_item_update(item):
|
||||
updated_at = client_update_time()
|
||||
if updated_at is not None:
|
||||
item.updated_at = updated_at
|
||||
|
||||
# home screen for items
|
||||
@items_bp.route("/items/<listid>")
|
||||
@login_required
|
||||
@@ -42,7 +65,10 @@ def items(listid):
|
||||
@login_required
|
||||
def item_update(itemid, itemchecked):
|
||||
i = require_item_access(itemid)
|
||||
if not item_update_is_current(i):
|
||||
return '', 204
|
||||
i.is_checked = True if itemchecked == 'true' else False
|
||||
stamp_item_update(i)
|
||||
db.session.commit()
|
||||
return '', 204
|
||||
|
||||
@@ -170,6 +196,8 @@ def items_multiappend(listid):
|
||||
@login_required
|
||||
def item_delete(itemid):
|
||||
i = require_item_access(itemid)
|
||||
if not item_update_is_current(i):
|
||||
return redirect(url_for("items.items_append", listid=i.listofitems_id))
|
||||
listid = i.listofitems_id
|
||||
db.session.delete(i)
|
||||
db.session.commit()
|
||||
@@ -195,6 +223,12 @@ def items_clean(listid):
|
||||
@login_required
|
||||
def item_addone(itemid):
|
||||
i = require_item_access(itemid)
|
||||
if not item_update_is_current(i):
|
||||
resp = make_response(render_template("items_append.html", user=current_user,
|
||||
items=Item.query.filter_by(listofitems_id=i.listofitems_id).order_by(Item.label).all(),
|
||||
logo_url=url_for("items.items", listid=i.listofitems_id)))
|
||||
resp.set_cookie('username', create_cookie(current_user.id))
|
||||
return resp
|
||||
listid = i.listofitems_id
|
||||
# if it is checked or not on the list yet, set quantity to one
|
||||
if i.is_suggestion or i.is_checked:
|
||||
@@ -208,6 +242,7 @@ def item_addone(itemid):
|
||||
# if no unit given, make it 'x'
|
||||
if not i.unit:
|
||||
i.unit = 'x'
|
||||
stamp_item_update(i)
|
||||
db.session.commit()
|
||||
|
||||
resp = make_response(render_template("items_append.html", user=current_user,
|
||||
@@ -221,6 +256,12 @@ def item_addone(itemid):
|
||||
@login_required
|
||||
def item_addquantity(itemid, quantity):
|
||||
i = require_item_access(itemid)
|
||||
if not item_update_is_current(i):
|
||||
resp = make_response(render_template("items_append.html", user=current_user,
|
||||
items=Item.query.filter_by(listofitems_id=i.listofitems_id).order_by(Item.label).all(),
|
||||
logo_url=url_for("items.items", listid=i.listofitems_id)))
|
||||
resp.set_cookie('username', create_cookie(current_user.id))
|
||||
return resp
|
||||
listid = i.listofitems_id
|
||||
# always add the item to the active todo
|
||||
if i.is_suggestion or i.is_checked:
|
||||
@@ -229,6 +270,7 @@ def item_addquantity(itemid, quantity):
|
||||
i.is_checked = False
|
||||
else:
|
||||
i.quantity += int(quantity)
|
||||
stamp_item_update(i)
|
||||
db.session.commit()
|
||||
|
||||
resp = make_response(render_template("items_append.html", user=current_user,
|
||||
@@ -242,6 +284,9 @@ def item_addquantity(itemid, quantity):
|
||||
@login_required
|
||||
def item_upitem_update_categorydate(itemid, category):
|
||||
i = require_item_access(itemid)
|
||||
if not item_update_is_current(i):
|
||||
return '', 204
|
||||
i.category = category
|
||||
stamp_item_update(i)
|
||||
db.session.commit()
|
||||
return '', 204
|
||||
|
||||
Reference in New Issue
Block a user