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")