From a97847e644d8a9a46ffa30d7d2511dba05bf6c90 Mon Sep 17 00:00:00 2001 From: Kalu Date: Tue, 7 Jul 2015 19:22:27 +0200 Subject: [PATCH 01/16] show rr factor in tooltip --- gui/builtinStatsViews/resistancesViewFull.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/gui/builtinStatsViews/resistancesViewFull.py b/gui/builtinStatsViews/resistancesViewFull.py index 9a1df251f..61e7e7026 100644 --- a/gui/builtinStatsViews/resistancesViewFull.py +++ b/gui/builtinStatsViews/resistancesViewFull.py @@ -197,8 +197,9 @@ class ResistancesViewFull(StatsView): lbl = getattr(self, "labelResistance%sEhp" % tankType.capitalize()) if ehp is not None: total += ehp[tankType] + rrFactor = fit.ehp[tankType] / fit.hp[tankType] lbl.SetLabel(formatAmount(ehp[tankType], 3, 0, 9)) - lbl.SetToolTip(wx.ToolTip("%s: %d" % (tankType.capitalize(), ehp[tankType]))) + lbl.SetToolTip(wx.ToolTip("%s: %d, x%.2f" % (tankType.capitalize(), ehp[tankType], rrFactor))) else: lbl.SetLabel("0") From 8a229079407faebeea647b5700555ffdf81e0add Mon Sep 17 00:00:00 2001 From: Kalu Date: Tue, 7 Jul 2015 20:35:08 +0200 Subject: [PATCH 02/16] newline in resist multiplier tooltip and explanation --- gui/builtinStatsViews/resistancesViewFull.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gui/builtinStatsViews/resistancesViewFull.py b/gui/builtinStatsViews/resistancesViewFull.py index 61e7e7026..a35424335 100644 --- a/gui/builtinStatsViews/resistancesViewFull.py +++ b/gui/builtinStatsViews/resistancesViewFull.py @@ -199,7 +199,7 @@ class ResistancesViewFull(StatsView): total += ehp[tankType] rrFactor = fit.ehp[tankType] / fit.hp[tankType] lbl.SetLabel(formatAmount(ehp[tankType], 3, 0, 9)) - lbl.SetToolTip(wx.ToolTip("%s: %d, x%.2f" % (tankType.capitalize(), ehp[tankType], rrFactor))) + lbl.SetToolTip(wx.ToolTip("%s: %d\nResist Multiplier: x%.2f" % (tankType.capitalize(), ehp[tankType], rrFactor))) else: lbl.SetLabel("0") From 4976516d4d00f1bfebb0f97609e228c62f7d9e75 Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Tue, 7 Jul 2015 23:36:03 +0300 Subject: [PATCH 03/16] Bump for a stable version --- config.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/config.py b/config.py index c20489972..71d14f559 100644 --- a/config.py +++ b/config.py @@ -20,10 +20,10 @@ saveInRoot = False logLevel = logging.WARN # Version data -version = "1.12.1" -tag = "git" -expansionName = "Singularity" -expansionVersion = "910808" +version = "1.13.0" +tag = "Stable" +expansionName = "Aegis" +expansionVersion = "1.0" evemonMinVersion = "4081" pyfaPath = None From e63c3541c4cfe97d02ef325ca96f17096fdc82fc Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Wed, 8 Jul 2015 00:09:34 +0300 Subject: [PATCH 04/16] Bump for next development release --- config.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config.py b/config.py index 71d14f559..c5d46cdeb 100644 --- a/config.py +++ b/config.py @@ -20,8 +20,8 @@ saveInRoot = False logLevel = logging.WARN # Version data -version = "1.13.0" -tag = "Stable" +version = "1.13.1" +tag = "git" expansionName = "Aegis" expansionVersion = "1.0" evemonMinVersion = "4081" From 5ac31920ee32a0db3b1e49ae674c64242403c4fd Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Wed, 8 Jul 2015 11:39:01 +0300 Subject: [PATCH 05/16] Fix #317 Crop images to square form before making thumbnail, not square images cause issues on Windows --- scripts/icons_update.py | 16 ++++++++++++++++ scripts/renders_update.py | 16 ++++++++++++++++ staticdata/icons/icon107_12.png | Bin 871 -> 883 bytes staticdata/icons/icon109_64_1.png | Bin 3382 -> 788 bytes staticdata/icons/icon109_64_2.png | Bin 3317 -> 750 bytes 5 files changed, 32 insertions(+) diff --git a/scripts/icons_update.py b/scripts/icons_update.py index ea44ca97c..c152f55be 100644 --- a/scripts/icons_update.py +++ b/scripts/icons_update.py @@ -165,6 +165,21 @@ for fname in os.listdir(export_dir): fnames.add(fname) +def crop_image(img): + w, h = img.size + if h == w: + return img + normal = min(h, w) + diff_w = w - normal + diff_h = h - normal + crop_top = diff_h // 2 + crop_bot = diff_h // 2 + diff_h % 2 + crop_left = diff_w // 2 + crop_right = diff_w // 2 + diff_w % 2 + box = (crop_left, crop_top, w - crop_right, h - crop_bot) + return img.crop(box) + + def get_icon_file(request): """ Get the iconFile field value and find proper @@ -190,6 +205,7 @@ def get_icon_file(request): except KeyError: fullpath = sizes[max(sizes)] img = Image.open(fullpath) + img = crop_image(img) img.thumbnail(ICON_SIZE, Image.ANTIALIAS) else: img = Image.open(fullpath) diff --git a/scripts/renders_update.py b/scripts/renders_update.py index e57fd5486..dfe88e448 100644 --- a/scripts/renders_update.py +++ b/scripts/renders_update.py @@ -58,11 +58,27 @@ toupdate = existing.intersection(needed) toadd = needed.difference(existing) +def crop_image(img): + w, h = img.size + if h == w: + return img + normal = min(h, w) + diff_w = w - normal + diff_h = h - normal + crop_top = diff_h // 2 + crop_bot = diff_h // 2 + diff_h % 2 + crop_left = diff_w // 2 + crop_right = diff_w // 2 + diff_w % 2 + box = (crop_left, crop_top, w - crop_right, h - crop_bot) + return img.crop(box) + + def get_render(type_id): fname = '{}.png'.format(type_id) fullpath = os.path.join(export_dir, fname) img = Image.open(fullpath) if img.size != RENDER_SIZE: + img = crop_image(img) img.thumbnail(RENDER_SIZE, Image.ANTIALIAS) return img diff --git a/staticdata/icons/icon107_12.png b/staticdata/icons/icon107_12.png index 0b907587e6f201102190447636a5b19eee045f23..1bf43c7e21500e801314b7a0c7b91c6468c7797e 100644 GIT binary patch delta 860 zcmV-i1Ec)s2J;4xB!40$9ZAR>%Xl>MJi zC6)WPjemeO8fA!R0|4DL&xOmDyW1nmP%vpzyEHznpi(6QM1&nBc)#Qr#_Y+W8d^xL zeQZ~Y!(OS$*+(q%GQR= zyY)h;!1uH_ihopdcw2=QA!p^@d%FA78C6v|MNzDJ3nKtT#C<;Y&Ic5z$qfzqyufy$ zU9z{z$*h=h2P&<+z$T~Tg&T=KULCz0n^I0FKdWkl<5f~Q1r_V?EB<4vg{4l9S4x<9 zQ`C+8J)fu1*kWbbs@!cOPdA%gym)nHBC)%equiP zYr4Pvbj#ySN1d6q;CtrS^4Gli(B*G#uh^+u1Y;S=80P!WX zE`4!5#!^~;i(l>w`rWX&xCENE!8Q9D;iFH!v>1c+!T!F0Q8L#6poZ`u@SkG)dpnxm z4pn&Nft*oxq*gaF{f`}VHU~ThoRW(Ln}g~1Kl|#nTxDzWKOaX#$ZDTcZ>DSuQIJewVx)Liw(2SdA$yu&#ch=|eZ!Z-mV@+Uw3_AU3>y|Qf7teP8A z#Z@oPCY-)qy@J1Kvo|q0RhXQblm~~Ncjd{v~n^4NRdd01Ay8rE*g5h-6)yG zWY$|d^?%ColK^n??dN-*d*fJa|Il0a93HR_CA`|URK=)&cJ8tc0K_>bBI5DP@y_&L zmmbS%SC^g)9oy}>srZ+2*}ayY@8@#Ul{U8vXMg%RtX*G#r^Qh#F6#$QeD}+kKtvoI zbRcl#`fMRRelYye(+}?)cz>m`{L&v27yIXvDSyayJ$!m>G@RC!?BLzq=J@Xk7TU4( zRRDst_D-Bdj|vot&Ad2e&rbh3idwl^b*nN>PA5b|n`2A468Z=3lUy<+fvD_IlvV)p ztt(J0#@EIfe*J}K!~Qn+!FIO_k(DuXO%sEG0KWQq6a-k$Jhi`VA)7q|pt{~PjX(Ez z6iGxnH+mj1Yuu&fOPL4m-O;qG+y9`urNvoiG&Ou;>`f3-w=*4yqPX5?4QvDu1RxWw a=Klq#gmyLzh5Gb> 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 KMNUMnLSTZaGlpXT diff --git a/staticdata/icons/icon109_64_2.png b/staticdata/icons/icon109_64_2.png index 876929af59f83f5871d564119555b524f191d770..57d3548da24c11a1d786495523b9bd0bca1484e5 100644 GIT binary patch literal 750 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 Date: Wed, 8 Jul 2015 10:45:37 +0200 Subject: [PATCH 06/16] moved dublicate code into one method --- config.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/config.py b/config.py index c5d46cdeb..f93c36c70 100644 --- a/config.py +++ b/config.py @@ -32,6 +32,10 @@ staticPath = None saveDB = None gameDB = None +def __createSavePath(): + if not os.path.exists(savePath): + os.mkdir(savePath) + def defPaths(): global pyfaPath global savePath @@ -69,15 +73,13 @@ def defPaths(): # Redirect stderr to file if we're requested to do so stderrToFile = getattr(configforced, "stderrToFile", None) if stderrToFile is True: - if not os.path.exists(savePath): - os.mkdir(savePath) + __createSavePath() sys.stderr = open(os.path.join(savePath, "error_log.txt"), "w") # Same for stdout stdoutToFile = getattr(configforced, "stdoutToFile", None) if stdoutToFile is True: - if not os.path.exists(savePath): - os.mkdir(savePath) + __createSavePath() sys.stdout = open(os.path.join(savePath, "output_log.txt"), "w") # Static EVE Data from the staticdata repository, should be in the staticdata From f08dc975769c851d936a9e8a094c98a1340892b4 Mon Sep 17 00:00:00 2001 From: Richard Poettler Date: Wed, 8 Jul 2015 10:47:14 +0200 Subject: [PATCH 07/16] logging crashes if the directory doesn't exist --- config.py | 1 + 1 file changed, 1 insertion(+) diff --git a/config.py b/config.py index f93c36c70..4d019590e 100644 --- a/config.py +++ b/config.py @@ -63,6 +63,7 @@ def defPaths(): format = '%(asctime)s %(name)-24s %(levelname)-8s %(message)s' logging.basicConfig(format=format, level=logLevel) + __createSavePath() handler = logging.handlers.RotatingFileHandler(os.path.join(savePath, "log.txt"), maxBytes=1000000, backupCount=3) formatter = logging.Formatter(format) handler.setFormatter(formatter) From adc9fb6d00c3d35ae1cabaa8af838c2b54adcf74 Mon Sep 17 00:00:00 2001 From: DarkPhoenix Date: Wed, 8 Jul 2015 17:45:25 +0300 Subject: [PATCH 08/16] Don't call function multiple times after first unconditional call --- config.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/config.py b/config.py index 4d019590e..c1a1bda89 100644 --- a/config.py +++ b/config.py @@ -32,9 +32,9 @@ staticPath = None saveDB = None gameDB = None -def __createSavePath(): - if not os.path.exists(savePath): - os.mkdir(savePath) +def __createDirs(path): + if not os.path.exists(path): + os.makedirs(path) def defPaths(): global pyfaPath @@ -61,9 +61,10 @@ def defPaths(): savePath = unicode(os.path.expanduser(os.path.join("~", ".pyfa")), sys.getfilesystemencoding()) + __createDirs(savePath) + format = '%(asctime)s %(name)-24s %(levelname)-8s %(message)s' logging.basicConfig(format=format, level=logLevel) - __createSavePath() handler = logging.handlers.RotatingFileHandler(os.path.join(savePath, "log.txt"), maxBytes=1000000, backupCount=3) formatter = logging.Formatter(format) handler.setFormatter(formatter) @@ -74,13 +75,11 @@ def defPaths(): # Redirect stderr to file if we're requested to do so stderrToFile = getattr(configforced, "stderrToFile", None) if stderrToFile is True: - __createSavePath() sys.stderr = open(os.path.join(savePath, "error_log.txt"), "w") # Same for stdout stdoutToFile = getattr(configforced, "stdoutToFile", None) if stdoutToFile is True: - __createSavePath() sys.stdout = open(os.path.join(savePath, "output_log.txt"), "w") # Static EVE Data from the staticdata repository, should be in the staticdata From c92911b79a8c8c30478177bb2ae23af051371f12 Mon Sep 17 00:00:00 2001 From: blitzmann Date: Wed, 8 Jul 2015 10:54:26 -0400 Subject: [PATCH 09/16] Work around for lack of flag_modified() support --- eos/db/saveddata/queries.py | 2 +- eos/effectHandlerHelpers.py | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/eos/db/saveddata/queries.py b/eos/db/saveddata/queries.py index fe4f0310c..b71f6b98a 100644 --- a/eos/db/saveddata/queries.py +++ b/eos/db/saveddata/queries.py @@ -186,7 +186,7 @@ def getFit(lookfor, eager=None): else: raise TypeError("Need integer as argument") - if fit.isInvalid: + if fit and fit.isInvalid: with sd_lock: removeInvalid([fit]) return None diff --git a/eos/effectHandlerHelpers.py b/eos/effectHandlerHelpers.py index c658cf0a9..bfc12da5e 100644 --- a/eos/effectHandlerHelpers.py +++ b/eos/effectHandlerHelpers.py @@ -17,7 +17,7 @@ # along with eos. If not, see . #=============================================================================== -from sqlalchemy.orm.attributes import flag_modified +#from sqlalchemy.orm.attributes import flag_modified import eos.db import eos.types import logging @@ -107,7 +107,9 @@ class HandledList(list): def remove(self, thing): # We must flag it as modified, otherwise it not be removed from the database - flag_modified(thing, "itemID") + # @todo: flag_modified isn't in os x skel. need to rebuild to include + #flag_modified(thing, "itemID") + thing.itemID = 0 list.remove(self, thing) class HandledModuleList(HandledList): From 4137a7cda94f4e784d662c188fb6fb554ae08ffa Mon Sep 17 00:00:00 2001 From: blitzmann Date: Wed, 8 Jul 2015 11:20:18 -0400 Subject: [PATCH 10/16] Bump stable --- config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.py b/config.py index c1a1bda89..d58867242 100644 --- a/config.py +++ b/config.py @@ -21,7 +21,7 @@ logLevel = logging.WARN # Version data version = "1.13.1" -tag = "git" +tag = "Stable" expansionName = "Aegis" expansionVersion = "1.0" evemonMinVersion = "4081" From d885bd4636e0f6c99a201f902e7ad8812f5a44b2 Mon Sep 17 00:00:00 2001 From: blitzmann Date: Thu, 9 Jul 2015 11:45:49 -0400 Subject: [PATCH 11/16] Bump dev and Fix #321 - oversight in tactical mode selection --- config.py | 4 ++-- eos/saveddata/fit.py | 2 ++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/config.py b/config.py index d58867242..9a56cd68c 100644 --- a/config.py +++ b/config.py @@ -20,8 +20,8 @@ saveInRoot = False logLevel = logging.WARN # Version data -version = "1.13.1" -tag = "Stable" +version = "1.13.2" +tag = "git" expansionName = "Aegis" expansionVersion = "1.0" evemonMinVersion = "4081" diff --git a/eos/saveddata/fit.py b/eos/saveddata/fit.py index 5c03d6a2a..5a277070c 100644 --- a/eos/saveddata/fit.py +++ b/eos/saveddata/fit.py @@ -96,6 +96,8 @@ class Fit(object): item = eos.db.getItem(self.modeID) # Don't need to verify if it's a proper item, as validateModeItem assures this self.__mode = self.ship.validateModeItem(item) + else: + self.__mode = self.ship.validateModeItem(None) self.build() From 1f82465a65712602a1adfdc339fabef0df714a21 Mon Sep 17 00:00:00 2001 From: blitzmann Date: Thu, 9 Jul 2015 12:13:13 -0400 Subject: [PATCH 12/16] Return None for price column on ship modes, fixes #322 --- gui/builtinViewColumns/price.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gui/builtinViewColumns/price.py b/gui/builtinViewColumns/price.py index 17c7ade3c..c046a4b55 100644 --- a/gui/builtinViewColumns/price.py +++ b/gui/builtinViewColumns/price.py @@ -33,7 +33,7 @@ class Price(ViewColumn): self.imageId = fittingView.imageList.GetImageIndex("totalPrice_small", "icons") def getText(self, stuff): - if stuff.item is None: + if stuff.item is None or stuff.item.group.name == "Ship Modifiers": return "" sMkt = service.Market.getInstance() From 221a3fde1429e5892dbff61f4ab00c3686ac039c Mon Sep 17 00:00:00 2001 From: blitzmann Date: Thu, 9 Jul 2015 18:18:36 -0400 Subject: [PATCH 13/16] Being extra cautious --- service/price.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/service/price.py b/service/price.py index 78e3e289b..71858cf7c 100644 --- a/service/price.py +++ b/service/price.py @@ -52,7 +52,7 @@ class Price(): item = eos.db.getItem(typeID) # We're not going to request items only with market group, as eve-central # doesn't provide any data for items not on the market - if item.marketGroupID: + if item is not None and item.marketGroupID: toRequest.add(typeID) # Do not waste our time if all items are not on the market From 4c17f38b1adc36d0980f6d09cf49657d2be47813 Mon Sep 17 00:00:00 2001 From: blitzmann Date: Thu, 9 Jul 2015 18:36:11 -0400 Subject: [PATCH 14/16] Fix for #324 - do not reset itemID automatically upon removal due to way modules are swapped. --- eos/effectHandlerHelpers.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/eos/effectHandlerHelpers.py b/eos/effectHandlerHelpers.py index bfc12da5e..5e1997ce7 100644 --- a/eos/effectHandlerHelpers.py +++ b/eos/effectHandlerHelpers.py @@ -109,7 +109,8 @@ class HandledList(list): # We must flag it as modified, otherwise it not be removed from the database # @todo: flag_modified isn't in os x skel. need to rebuild to include #flag_modified(thing, "itemID") - thing.itemID = 0 + if thing.isInvalid: # see GH issue #324 + thing.itemID = 0 list.remove(self, thing) class HandledModuleList(HandledList): @@ -191,6 +192,7 @@ class HandledImplantBoosterList(HandledList): oldObj = next((m for m in self if m.slot == thing.slot), None) if oldObj: logging.info("Slot %d occupied with %s, replacing with %s", thing.slot, oldObj.item.name, thing.item.name) + oldObj.itemID = 0 # hack to remove from DB. See GH issue #324 self.remove(oldObj) HandledList.append(self, thing) From b4604f8207cfc8846aedaf620f731d9476355258 Mon Sep 17 00:00:00 2001 From: blitzmann Date: Fri, 10 Jul 2015 12:17:14 -0400 Subject: [PATCH 15/16] Bump Stable... maybe it will be this time --- config.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config.py b/config.py index 9a56cd68c..f1b8bcb3e 100644 --- a/config.py +++ b/config.py @@ -21,7 +21,7 @@ logLevel = logging.WARN # Version data version = "1.13.2" -tag = "git" +tag = "Stable" expansionName = "Aegis" expansionVersion = "1.0" evemonMinVersion = "4081" From b8f73a7c94f69da12be9ca0414a9578ba7e38028 Mon Sep 17 00:00:00 2001 From: blitzmann Date: Fri, 10 Jul 2015 12:58:03 -0400 Subject: [PATCH 16/16] bump dev --- config.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config.py b/config.py index f1b8bcb3e..6f1047302 100644 --- a/config.py +++ b/config.py @@ -20,8 +20,8 @@ saveInRoot = False logLevel = logging.WARN # Version data -version = "1.13.2" -tag = "Stable" +version = "1.13.3" +tag = "git" expansionName = "Aegis" expansionVersion = "1.0" evemonMinVersion = "4081"