143 lines
4.2 KiB
Python
143 lines
4.2 KiB
Python
# =============================================================================
|
|
# Copyright (C) 2016 Ryan Holmes
|
|
#
|
|
# This file is part of pyfa.
|
|
#
|
|
# pyfa is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation, either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# pyfa is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with pyfa. If not, see <http://www.gnu.org/licenses/>.
|
|
# =============================================================================
|
|
|
|
import copy
|
|
|
|
import eos.db
|
|
from service.market import Market
|
|
from eos.saveddata.implant import Implant as es_Implant
|
|
from eos.saveddata.implantSet import ImplantSet as es_ImplantSet
|
|
|
|
|
|
class ImportError(Exception):
|
|
pass
|
|
|
|
|
|
class ImplantSets:
|
|
instance = None
|
|
|
|
@classmethod
|
|
def getInstance(cls):
|
|
if cls.instance is None:
|
|
cls.instance = ImplantSets()
|
|
|
|
return cls.instance
|
|
|
|
@staticmethod
|
|
def getImplantSetList():
|
|
return eos.db.getImplantSetList(None)
|
|
|
|
@staticmethod
|
|
def getImplantSet(name):
|
|
return eos.db.getImplantSet(name)
|
|
|
|
@staticmethod
|
|
def getImplants(setID):
|
|
return eos.db.getImplantSet(setID).implants
|
|
|
|
@staticmethod
|
|
def addImplants(setID, *itemIDs):
|
|
implant_set = eos.db.getImplantSet(setID)
|
|
for itemID in itemIDs:
|
|
implant = es_Implant(eos.db.getItem(itemID))
|
|
implant_set.implants.makeRoom(implant)
|
|
implant_set.implants.append(implant)
|
|
eos.db.commit()
|
|
|
|
@staticmethod
|
|
def removeImplant(setID, implant):
|
|
eos.db.getImplantSet(setID).implants.remove(implant)
|
|
eos.db.commit()
|
|
|
|
@staticmethod
|
|
def newSet(name):
|
|
implant_set = es_ImplantSet()
|
|
implant_set.name = name
|
|
eos.db.save(implant_set)
|
|
return implant_set
|
|
|
|
@staticmethod
|
|
def renameSet(implant_set, newName):
|
|
implant_set.name = newName
|
|
eos.db.save(implant_set)
|
|
|
|
@staticmethod
|
|
def deleteSet(implant_set):
|
|
eos.db.remove(implant_set)
|
|
|
|
@staticmethod
|
|
def copySet(implant_set):
|
|
newS = copy.deepcopy(implant_set)
|
|
eos.db.save(newS)
|
|
return newS
|
|
|
|
@staticmethod
|
|
def saveChanges(implant_set):
|
|
eos.db.save(implant_set)
|
|
|
|
def importSets(self, text):
|
|
sMkt = Market.getInstance()
|
|
lines = text.splitlines()
|
|
newSets = []
|
|
errors = 0
|
|
current = None
|
|
lookup = {}
|
|
|
|
for i, line in enumerate(lines):
|
|
line = line.strip()
|
|
try:
|
|
if line == '' or line[0] == "#": # comments / empty string
|
|
continue
|
|
if line[:1] == "[" and line[-1:] == "]":
|
|
current = es_ImplantSet(line[1:-1])
|
|
newSets.append(current)
|
|
else:
|
|
item = sMkt.getItem(line)
|
|
current.implants.append(es_Implant(item))
|
|
except (KeyboardInterrupt, SystemExit):
|
|
raise
|
|
except:
|
|
errors += 1
|
|
continue
|
|
|
|
for implant_set in self.getImplantSetList():
|
|
lookup[implant_set.name] = implant_set
|
|
|
|
for implant_set in newSets:
|
|
if implant_set.name in lookup:
|
|
match = lookup[implant_set.name]
|
|
for implant in implant_set.implants:
|
|
match.implants.append(es_Implant(implant.item))
|
|
else:
|
|
eos.db.save(implant_set)
|
|
|
|
eos.db.commit()
|
|
|
|
lenImports = len(newSets)
|
|
if lenImports == 0:
|
|
raise ImportError("No patterns found for import")
|
|
if errors > 0:
|
|
raise ImportError("%d sets imported from clipboard; %d errors" %
|
|
(lenImports, errors))
|
|
|
|
def exportSets(self):
|
|
patterns = self.getImplantSetList()
|
|
patterns.sort(key=lambda p: p.name)
|
|
return es_ImplantSet.exportSets(*patterns)
|