import threading import time import service import wx class exportHtml(): _instance = None @classmethod def getInstance(cls): if cls._instance is None: cls._instance = exportHtml() return cls._instance def __init__(self): self.thread = exportHtmlThread() def refreshFittingHtml(self, force=False, callback=False): settings = service.settings.HTMLExportSettings.getInstance() if force or settings.getEnabled(): self.thread.stop() self.thread = exportHtmlThread(callback) self.thread.start() class exportHtmlThread(threading.Thread): def __init__(self, callback=False): threading.Thread.__init__(self) self.callback = callback self.stopRunning = False def stop(self): self.stopRunning = True def run(self): # wait 1 second just in case a lot of modifications get made time.sleep(1) if self.stopRunning: return sMkt = service.Market.getInstance() sFit = service.Fit.getInstance() settings = service.settings.HTMLExportSettings.getInstance() timestamp = time.localtime(time.time()) localDate = "%d/%02d/%02d %02d:%02d" % (timestamp[0], timestamp[1], timestamp[2], timestamp[3], timestamp[4]) minimal = settings.getMinimalEnabled(); website = settings.getWebsite() if website == "o.smium.org": dnaUrl = "https://o.smium.org/loadout/dna/" elif website == "null-sec.com": dnaUrl = "https://null-sec.com/hangar/?dna=" if minimal: HTML = self.generateMinimalHTML(sMkt,sFit, dnaUrl) else: HTML = self.generateFullHTML(sMkt,sFit, dnaUrl) try: FILE = open(settings.getPath(), "w") FILE.write(HTML.encode('utf-8')) FILE.close() except IOError: print "Failed to write to " + settings.getPath() pass if self.callback: wx.CallAfter(self.callback, -1) def generateFullHTML(self,sMkt,sFit,dnaUrl): """ Generate the complete HTML with styling and javascript """ timestamp = time.localtime(time.time()) localDate = "%d/%02d/%02d %02d:%02d" % (timestamp[0], timestamp[1], timestamp[2], timestamp[3], timestamp[4]) HTML = """ Pyfa Fittings

Pyfa fits

Last updated: %s ()
""" % (time.time(), dnaUrl, localDate) HTML += '
""" return HTML def generateMinimalHTML(self,sMkt,sFit,dnaUrl): """ Generate a minimal HTML version of the fittings, without any javascript or styling""" categoryList = list(sMkt.getShipRoot()) categoryList.sort(key=lambda ship: ship.name) count = 0 HTML = '' for group in categoryList: # init market group string to give ships something to attach to ships = list(sMkt.getShipList(group.ID)) ships.sort(key=lambda ship: ship.name) ships.sort(key=lambda ship: ship.name) for ship in ships: fits = sFit.getFitsWithShip(ship.ID) for fit in fits: if self.stopRunning: return try: dnaFit = sFit.exportDna(fit[0]) HTML += 'IGB' +\ ' / OOGB '+ship.name +': '+ fit[1]+ '
\n' except: continue finally: if self.callback: wx.CallAfter(self.callback, count) count += 1 return HTML;