From 0b9cdaa9440d9e7163ce553e594299a38e5a5e4a Mon Sep 17 00:00:00 2001 From: blitzmann Date: Sat, 12 Sep 2015 10:59:44 -0400 Subject: [PATCH] Change the way skills are loaded. We now load all skills when character is created, instead of just creating character and loading skills on demand. This fixes a bug in which new characters were not saving their skills to the database. --- eos/saveddata/character.py | 20 +++++++++----------- service/character.py | 14 ++++++++------ 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/eos/saveddata/character.py b/eos/saveddata/character.py index d9a9d5d59..40c7dfacf 100644 --- a/eos/saveddata/character.py +++ b/eos/saveddata/character.py @@ -70,8 +70,7 @@ class Character(object): # We do not have to be afraid of committing here and saving # edited character data. If this ever runs, it will be during the # get character list phase when pyfa first starts - all5 = Character("All 5") - all5.defaultLevel = 5 + all5 = Character("All 5", 5) eos.db.character_session.add(all5) eos.db.character_session.commit() @@ -83,18 +82,21 @@ class Character(object): if all0 is None: all0 = Character("All 0") - all0.defaultLevel = None eos.db.character_session.add(all0) eos.db.character_session.commit() return all0 - def __init__(self, name): + def __init__(self, name, defaultLevel=None): self.name = name self.__owner = None - self.defaultLevel = None + self.defaultLevel = defaultLevel self.__skills = [] self.__skillIdMap = {} + + for item in self.getSkillList(): + self.addSkill(Skill(item.ID, self.defaultLevel)) + self.__implants = eos.saveddata.fit.HandledImplantBoosterList() self.apiKey = None @@ -135,11 +137,7 @@ class Character(object): skill = self.__skillIdMap.get(item.ID) if skill is None: - if self.defaultLevel is None: - skill = Skill(item, 0, False, False) - else: - skill = Skill(item, self.defaultLevel, False, True) - + skill = Skill(item, self.defaultLevel, False, True) self.addSkill(skill) return skill @@ -201,7 +199,7 @@ class Character(object): else: return val class Skill(HandledItem): - def __init__(self, item, level = 0, ro = False, learned = True): + def __init__(self, item, level=0, ro=False, learned=True): self.__item = item if not isinstance(item, int) else None self.itemID = item.ID if not isinstance(item, int) else item self.__level = level if learned else None diff --git a/service/character.py b/service/character.py index 5b66224d8..aab3089c2 100644 --- a/service/character.py +++ b/service/character.py @@ -190,6 +190,8 @@ class Character(object): if isinstance(thing, eos.types.Skill): if not thing.character.isDirty: thing.character.dirty = True + elif thing in eos.db.character_session.dirty: + thing.dirty = True return map(lambda c: (c.ID, c.name if not c.isDirty else "{} *".format(c.name), c == sFit.character), eos.db.getCharacterList()) @@ -249,10 +251,8 @@ class Character(object): skill = eos.db.getCharacter(charID).getSkill(skillID) return skill.level if skill.learned else "Not learned" - def rename(self, charID, newName): - char = eos.db.getCharacter(charID) - char.name = newName - self.saveCharacter(charID) + def getCharName(self, charID): + return eos.db.getCharacter(charID).name def new(self): #@todo: seems setting skills on a new character doesn't trigger the dirty setting. Probably goes for character copy too @@ -263,8 +263,10 @@ class Character(object): eos.db.character_session.flush([char]) return char.ID - def getCharName(self, charID): - return eos.db.getCharacter(charID).name + def rename(self, charID, newName): + char = eos.db.getCharacter(charID) + char.name = newName + self.saveCharacter(charID) def copy(self, charID): char = eos.db.getCharacter(charID)