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.

This commit is contained in:
blitzmann
2015-09-12 10:59:44 -04:00
parent 89c011d37e
commit 0b9cdaa944
2 changed files with 17 additions and 17 deletions

View File

@@ -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

View File

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