11from models import ScrapeRecord , VersionRecord , Skin , Extension
2+ from sqlalchemy import select
23from utils import log_message
34import json
45import re
@@ -32,11 +33,45 @@ def get_siteinfo(url, args, session):
3233 return None
3334
3435
36+ def last_versions_match (session , last_sr_id , skin_versions , extension_versions ):
37+ stmt = select (ScrapeRecord ).where (ScrapeRecord .w8y_sr_sr_id == last_sr_id )
38+ sr = session .scalars (stmt ).one_or_none ()
39+ if sr is None :
40+ return False , None
41+ vr_id = sr .w8y_sr_vr_id
42+ if vr_id is None :
43+ return False , None
44+
45+ stmt = select (Skin ).where (Skin .w8y_sk_vr_id == vr_id )
46+ last_skins = session .scalars (stmt )
47+ count = 0
48+ for skin in last_skins :
49+ name = skin .w8y_sk_name
50+ if name not in skin_versions or skin .w8y_sk_version != skin_versions [name ]:
51+ return False , None
52+ count += 1
53+ if len (skin_versions ) != count :
54+ return False , None
55+
56+ stmt = select (Extension ).where (Extension .w8y_ex_vr_id == vr_id )
57+ extensions = session .scalars (stmt )
58+ count = 0
59+ for extension in last_extensions :
60+ name = extension .w8y_ex_name
61+ if name not in extension_versions or extension .w8y_ex_version != extension_versions [name ]:
62+ return False , None
63+ count += 1
64+ if len (extension_versions ) != count :
65+ return False , None
66+
67+ return True , vr_id
68+
69+
3570def create_version_records (session , last_sr_id , components ):
3671 skins = []
37- skin_names = []
72+ skin_versions = {}
3873 extensions = []
39- extension_names = []
74+ extension_versions = {}
4075
4176 for comp in components :
4277 if 'name' in comp and 'type' in comp :
@@ -53,21 +88,25 @@ def create_version_records(session, last_sr_id, components):
5388 else :
5489 url = None
5590 if comp ['type' ] == 'skin' :
56- if name not in skin_names :
91+ if name not in skin_versions :
5792 skins .append ({
5893 'name' : name ,
5994 'version' : version ,
6095 'url' : url
6196 })
62- skin_names . append ( name )
97+ skin_versions [ name ] = version
6398 else :
64- if name not in extension_names :
99+ if name not in extension_versions :
65100 extensions .append ({
66101 'name' : name ,
67102 'version' : version ,
68103 'url' : url
69104 })
70- extension_names .append (name )
105+ extension_versions [name ] = version
106+
107+ match , last_vr_id = last_versions_match (session , last_sr_id , skin_versions , extension_versions )
108+ if match :
109+ return last_vr_id
71110
72111 version_record = VersionRecord ()
73112 session .add (version_record )
0 commit comments