#!/usr/bin/env python # -*- coding: utf-8 -*- import json from Texts import Contents import Stats import random class ContentFile(object): # text inloaded # tags[keyname] = [list of indexes] # text[i] = [list of Contents objects] def __init__(self, file:str): self._file = file self.tags = dict() self.entries = list() self.__load() pass def __load(self): print("ContentFile::__load()") self.entries.clear() self.entries = list() stats = Stats.Stats.getInstance() print("ContentFile::__load()- Load File: text\\"+self._file) with open('text\\'+self._file) as f: data = json.load(f) for i in data: add = True if "mood_required" in i: statKeys = ["angry","annoyed","aroused","bored","compfortable","depressive","energy","excited","exhausted", "freezy","funny","happyness","hot","humanity","hungry","intelligent","irritated","lonely","naiv", "playful","sad","shy","sleepy","soziality","temperate","toLoud","toQuiet","usefull","useless"] for sk in statKeys: if sk+"_max" in i["mood_required"] and i["mood_required"][sk+"_max"] <= getattr(stats.deviceStats,sk): add = False break if sk+"_min" in i["mood_required"] and i["mood_required"][sk+"_min"] >= getattr(stats.deviceStats,sk): add = False break if add == True and "text" in i: self.entries.append(Contents.Contents(i)) print("Loading done") def getText(self, tags): tagList = self.__argumentToTagList(tags) res = dict() maxNum = 1 for e in self.entries: num = e._hasTags(tagList) if num>=maxNum: maxNum = num if num in res: res[num].append(e) else: res[num]=list() res[num].append(e) return random.choice(res[maxNum]) def executeText(self, tags): obj = self.getText(tags) if obj is not None: stats = Stats.Stats.getInstance() statKeys = ["angry","annoyed","aroused","bored","compfortable","depressive","energy","excited","exhausted", "freezy","funny","happyness","hot","humanity","hungry","intelligent","irritated","lonely","naiv", "playful","sad","shy","sleepy","soziality","temperate","toLoud","toQuiet","usefull","useless"] #for sk in statKeys: # if sk in obj.addStats: # print("AddStats "+sk+" "+obj.addStats[sk]) # val = getattr(stats.deviceStats,sk) # val+=obj.addStats[sk] # setattr(stats.deviceStats, sk, val) rndText = random.choice(obj.text) return rndText return "" def Update(): self.__load() def __argumentToTagList(self, arg): res = list() if isinstance(arg,list): for i in arg: tmp = self.__argumentToTagList(i) for j in tmp: res.append(j) else: tmp = arg.split(",") for i in tmp: res.append(i.strip().lower()) return res