diff --git a/eos b/eos index 9f5b45ead..40c99f0d1 160000 --- a/eos +++ b/eos @@ -1 +1 @@ -Subproject commit 9f5b45eadab5997d94e5171d0d88fb73867b72bc +Subproject commit 40c99f0d13751e0396ec58514a116ea7c460eef3 diff --git a/service/fit.py b/service/fit.py index c13664f05..401ffeb07 100644 --- a/service/fit.py +++ b/service/fit.py @@ -32,6 +32,7 @@ from eos.types import State, Slot from service.market import Market from service.damagePattern import DamagePattern from service.character import Character +from service.fleet import Fleet class FitBackupThread(threading.Thread): def __init__(self, path, callback): @@ -174,6 +175,9 @@ class Fit(object): return None fit = eos.db.getFit(fitID) + sFlt = Fleet.getInstance() + if sFlt.isInLinearFleet(fit) is False: + sFlt.removeAssociatedFleetData(fit) fit.calculateModifiedAttributes() fit.fill() eos.db.commit() diff --git a/service/fleet.py b/service/fleet.py index a4116d734..8f1beac2e 100644 --- a/service/fleet.py +++ b/service/fleet.py @@ -18,7 +18,7 @@ #=============================================================================== import eos.db -from eos.types import Fleet as Fleet_ +from eos.types import Fleet as Fleet_, Wing, Squad import copy class Fleet(object): @@ -69,3 +69,71 @@ class Fleet(object): def deleteFleetByID(self, ID): fleet = self.getFleetByID(ID) self.deleteFleet(fleet) + + def makeLinearFleet(self, fit): + f = Fleet_() + w = Wing() + f.wings.append(w) + s = Squad() + w.squads.append(s) + s.members.append(fit) + eos.db.save(f) + + def setLinearFleetCom(self, boostee, booster): + squadIDs = set(eos.db.getSquadsIDsWithFitID(boostee.ID)) + squad = eos.db.getSquad(squadIDs.pop()) + squad.wing.gang.leader = booster + squad.wing.gang.calculateModifiedAttributes() + + def setLinearWingCom(self, boostee, booster): + squadIDs = set(eos.db.getSquadsIDsWithFitID(boostee.ID)) + squad = eos.db.getSquad(squadIDs.pop()) + squad.wing.leader = booster + squad.wing.gang.calculateModifiedAttributes() + + def setLinearSquadCom(self, boostee, booster): + squadIDs = set(eos.db.getSquadsIDsWithFitID(boostee.ID)) + squad = eos.db.getSquad(squadIDs.pop()) + squad.leader = booster + squad.wing.gang.calculateModifiedAttributes() + + def isInLinearFleet(self, fit): + sqIDs = eos.db.getSquadsIDsWithFitID(fit.ID) + if len(sqIDs) != 1: + return False + s = eos.db.getSquad(sqIDs[0]) + if len(s.members) != 1: + return False + w = s.wing + if len(w.squads) != 1: + return False + f = w.gang + if len(f.wings) != 1: + return False + return True + + def removeAssociatedFleetData(self, fit): + squadIDs = set(eos.db.getSquadsIDsWithFitID(fit.ID)) + if len(squadIDs) == 0: + return + squads = list(eos.db.getSquad(sqID) for sqID in squadIDs) + wingIDs = set(squad.wing.ID for squad in squads) + fleetIDs = set(squad.wing.gang.ID for squad in squads) + for fleetID in fleetIDs: + fleet = eos.db.getFleet(fleetID) + for wing in fleet.wings: + wingIDs.add(wing.ID) + for wingID in wingIDs: + wing = eos.db.getWing(wingID) + for squad in wing.squads: + squadIDs.add(squad.ID) + for squadID in squadIDs: + squad = eos.db.getSquad(squadID) + eos.db.remove(squad) + for wingID in wingIDs: + wing = eos.db.getWing(wingID) + eos.db.remove(wing) + for fleetID in fleetIDs: + fleet = eos.db.getFleet(fleetID) + eos.db.remove(fleet) + return