#!/usr/bin/env python3 """ 🎯 ITEM ORGANIZATION SCRIPT Organizes all items from slike/predmeti/ into proper categories """ import os import shutil from pathlib import Path # Base directories BASE_DIR = Path("/Users/davidkotnik/repos/novafarma/assets/slike") SOURCE_DIR = BASE_DIR / "predmeti" ITEMS_DIR = BASE_DIR / "items" # Category mapping (file patterns -> destination folder) CATEGORIES = { # TOOLS - by material "tools/wood": [ "wood_hoe", "wood_shovel", "wood_scythe", "wood_watering_can", "wood_axe", "wood_pickaxe" ], "tools/stone": [ "stone_hoe", "stone_shovel", "stone_scythe", "stone_watering_can", "stone_axe", "stone_pickaxe", "hoe_basic", "shovel", "hoe" # basic = stone tier ], "tools/iron": [ "iron_hoe", "iron_shovel", "iron_scythe", "iron_watering_can", "iron_axe", "iron_pickaxe" ], "tools/gold": [ "steel_hoe", "steel_shovel", "steel_scythe", "steel_watering_can", "steel_axe", "steel_pickaxe" ], "tools/special": [ "fishing_rod", "fishing_net", "hammer", "wrench", "baking_tools", "piercing_tools", "bucket_tool", "compass_tool", "hourglass_tool", "saw_tool", "scissors_tool", "tool_rack", "tool_shed", "tool_durability", "tool_break", "tool_icons", "tool_watering_can" ], # WEAPONS "weapons": [ "axe_basic", "battle_axe", "sword", "bow_weapon", "crossbow_weapon", "dagger_weapon", "spear_weapon", "staff_weapon", "club_weapon", "mace_weapon", "hammer_weapon", "pickaxe_basic" ], # SEEDS "seeds": [ "wheat_seed", "carrot_seed", "potato_seed", "tomato_seed", "corn_seed", "cannabis_seed", "ganja_stage1_seed", "stage0_seed", "seeds_bag", "seed_packet" ], # CROPS & FARMING "crops": [ "crop_plot", "crop_storage", "crop_wilting", "crop_shed", "wheat_crop", "wheat_s30", "wheat_stage", "carrot_stage", "potato_s32", "tomato_s32", "corn_s32", "cannabis_s32" ], # RESOURCES "resources": [ "resource_icon", "resource_pile", "wood_log", "stone_icon", "stone_hoe" ], # CONSUMABLES "consumables": [ "bread_icon", "food_icon", "potion_icon" ], # SPECIAL ITEMS "special": [ "item_locket", "phoenix_moth", "phoenix_keeper", "artifact_icon", "money_bag", "seed_merchant", "vape_lab" ], # UI ICONS "ui": [ "icon_", "backpack_icon", "coin_icon", "heart_icon", "key_icon", "lock_icon", "map_icon", "skull_icon", "star_icon", "timer_icon", "warning_icon", "shield_icon", "gem_icon", "quest_marker", "inventory_", "weather_time" ], # STORAGE & WORKSTATIONS "storage": [ "repair_bench", "BIOME_CROP_TEST" ] } def get_category(filename): """Determine category for a file based on its name""" fname = filename.lower() # Check each category for category, patterns in CATEGORIES.items(): for pattern in patterns: if pattern.lower() in fname: return category # Default: check for common prefixes if "oprema_orodja" in fname: return "tools/special" if "oprema_oroΕΎje" in fname or "oprema_oro" in fname: return "weapons" if "narava_pridelki" in fname: return "crops" if "vmesnik_ikone" in fname or "ostalo_vmesnik" in fname: return "ui" return None # Uncategorized def organize_items(): """Main organization function""" if not SOURCE_DIR.exists(): print(f"❌ Source directory not found: {SOURCE_DIR}") return # Create category directories for category in CATEGORIES.keys(): category_dir = ITEMS_DIR / category category_dir.mkdir(parents=True, exist_ok=True) print(f"βœ… Created: {category}") # Get all files files = [f for f in SOURCE_DIR.iterdir() if f.is_file() and not f.name.startswith('.')] print(f"\nπŸ“¦ Found {len(files)} files in predmeti/") # Stats moved = 0 uncategorized = [] # Process each file for file_path in files: category = get_category(file_path.name) if category: dest_dir = ITEMS_DIR / category dest_path = dest_dir / file_path.name # Move file try: shutil.move(str(file_path), str(dest_path)) moved += 1 print(f"πŸ“ {file_path.name} β†’ {category}/") except Exception as e: print(f"❌ Error moving {file_path.name}: {e}") else: uncategorized.append(file_path.name) # Summary print(f"\n{'='*60}") print(f"βœ… Moved: {moved} files") print(f"❓ Uncategorized: {len(uncategorized)} files") if uncategorized: print(f"\nπŸ“‹ Uncategorized files (will stay in predmeti/):") for fname in sorted(uncategorized)[:20]: # Show first 20 print(f" - {fname}") if len(uncategorized) > 20: print(f" ... and {len(uncategorized) - 20} more") print(f"{'='*60}\n") if __name__ == "__main__": print("🎯 ITEM ORGANIZATION SCRIPT") print("="*60) organize_items() print("✨ Done!")