- Increment catalog version from 3 to 4 - Add 330+ grain/cereal items including gluten-free variants, pasta types, rice varieties, flour, and breakfast cereals with French/English names - Add 200+ condiment items covering sauces, spices, oils, vinegars, and seasonings - Add 150+ beverage items including juices, sodas, coffee, tea, and alcoholic drinks
98 lines
3.0 KiB
Python
98 lines
3.0 KiB
Python
import json, re
|
|
|
|
with open('items_data.json', 'r', encoding='utf-8') as f:
|
|
items_data = json.load(f)
|
|
|
|
path = 'app/src/main/java/com/safebite/app/domain/engine/CatalogProvider.kt'
|
|
with open(path, 'r', encoding='utf-8') as f:
|
|
lines = f.readlines()
|
|
|
|
# Trouver la fin du buildList (ligne ' }' après le dernier add existant)
|
|
buildlist_end_idx = None
|
|
for i, line in enumerate(lines):
|
|
if 'add(CatalogItem("Pots de fleurs", "Maison & Jardin", "🪴"))' in line:
|
|
# Chercher le } fermant dans les 5 lignes suivantes
|
|
for j in range(i+1, min(i+6, len(lines))):
|
|
if lines[j].strip() == '}' and buildlist_end_idx is None:
|
|
buildlist_end_idx = j
|
|
break
|
|
|
|
if buildlist_end_idx is None:
|
|
print("Could not find buildList end")
|
|
exit(1)
|
|
|
|
print(f"buildList ends at line {buildlist_end_idx + 1}")
|
|
|
|
# Collecter les noms existants dans le buildList
|
|
existing_names = set()
|
|
for line in lines[:buildlist_end_idx]:
|
|
m = re.search(r'CatalogItem\("([^"]+)"', line)
|
|
if m:
|
|
existing_names.add(m.group(1))
|
|
|
|
# Supprimer les lignes add(CatalogItem) après buildlist_end
|
|
new_lines = []
|
|
skip_until_marker = False
|
|
marker_found = False
|
|
for i, line in enumerate(lines):
|
|
if i > buildlist_end_idx and not marker_found:
|
|
if 'val popularSuggestions' in line:
|
|
marker_found = True
|
|
if line.strip().startswith('add(CatalogItem('):
|
|
continue # skip bad lines
|
|
if not marker_found and line.strip() and not line.strip().startswith('*') and not line.strip().startswith('/'):
|
|
# Skip orphaned lines between buildList end and popularSuggestions
|
|
if 'fun ' in line or 'val ' in line or '/**' in line or '*/' in line:
|
|
pass # keep structural lines
|
|
else:
|
|
continue
|
|
new_lines.append(line)
|
|
|
|
# Préparer les nouveaux items à insérer
|
|
cat_map = {
|
|
'spices': 'Condiments & Épices',
|
|
'frozen': 'Épicerie',
|
|
'pantry': 'Épicerie',
|
|
'snacks': 'Snacks & Bonbons',
|
|
'beverages': 'Boissons',
|
|
'cleaning': 'Maison',
|
|
'hygiene': 'Santé',
|
|
'pets': 'Animaux',
|
|
'garden': 'Jardin',
|
|
'misc': 'Épicerie',
|
|
}
|
|
|
|
emoji_map = {
|
|
'Condiments & Épices': '🧂',
|
|
'Épicerie': '🌾',
|
|
'Snacks & Bonbons': '🍿',
|
|
'Boissons': '🥤',
|
|
'Maison': '🏠',
|
|
'Santé': '💊',
|
|
'Animaux': '🐾',
|
|
'Jardin': '🌱',
|
|
}
|
|
|
|
additions = []
|
|
for src_cat, items in items_data.items():
|
|
target_cat = cat_map[src_cat]
|
|
emoji = emoji_map[target_cat]
|
|
for name in items:
|
|
if name in existing_names:
|
|
continue
|
|
existing_names.add(name)
|
|
safe_name = name.replace('"', '\\"')
|
|
additions.append(f' add(CatalogItem("{safe_name}", "{target_cat}", "{emoji}"))\n')
|
|
|
|
if additions:
|
|
# Insérer avant la fin du buildList
|
|
new_lines.insert(buildlist_end_idx, '\n'.join(additions) + '\n')
|
|
print(f"Inserted {len(additions)} items inside buildList")
|
|
else:
|
|
print("No new items to add")
|
|
|
|
with open(path, 'w', encoding='utf-8') as f:
|
|
f.writelines(new_lines)
|
|
|
|
print("Fixed CatalogProvider.kt")
|