Compare commits

..

671 Commits

Author SHA1 Message Date
blitzmann
7032baa7ef Add some logic to disable from CREST menu items if character is not logged in 2015-10-25 22:02:15 -04:00
blitzmann
b52cbef26f Clean up some imports, get rid of CharacterInfo window. 2015-10-25 21:49:24 -04:00
blitzmann
34f699b96a Use cached_until value for GUI countdown 2015-10-25 21:44:24 -04:00
blitzmann
5b341dfc06 pycrest now injects cached until value into the results 2015-10-25 21:44:04 -04:00
blitzmann
cb0003b942 Use deepcopy instead of copy. Fixes issue with using same session object across characters 2015-10-25 20:17:42 -04:00
blitzmann
6ee6186280 Make a post thing for pycrest. Still having authentication errors occasionally. 2015-10-25 19:51:58 -04:00
blitzmann
781abeea53 Implement a character cache, as the database-layer cache is seemingly not working. =/ 2015-10-25 19:41:12 -04:00
blitzmann
6496164d95 Merge branch 'crest_fitting' of https://github.com/DarkFenX/Pyfa into crest_fitting 2015-10-25 18:14:46 -04:00
blitzmann
1ce2921eb7 Put current character info in titlebar, and disable getting image. 2015-10-25 18:14:12 -04:00
blitzmann
6eb6925606 Move html 2015-10-25 17:55:39 -04:00
blitzmann
9d7a3605dc Use timers properly 2015-10-25 17:52:53 -04:00
blitzmann
056e961ccc use webrowser module to open URIs (had some difficulty with LaunchDefaultBrowser on OS X) 2015-10-25 14:46:24 -04:00
blitzmann
8f08f8efb8 Make sure httpd server stops after a certain time frame. 2015-10-25 00:09:33 -04:00
blitzmann
167eb60fe3 Added logic to find CA certs for SSL connections (for frozen apps) and added some logging 2015-10-24 23:32:15 -04:00
blitzmann
c04b7e0552 Revert "Add tomorrow to repo rather than dependency" - going to including it in skel rebuild
This reverts commit ff87d5e456.
2015-10-24 22:51:46 -04:00
blitzmann
ff87d5e456 Add tomorrow to repo rather than dependency 2015-10-24 22:39:43 -04:00
blitzmann
c81774a3aa Move pycrest to service (might move it to utils later, dunno) 2015-10-24 22:28:31 -04:00
blitzmann
a5920a9c9c Added missing files (and fix why they were missing) 2015-10-24 16:46:45 -04:00
blitzmann
c103e563a9 remove old import 2015-10-24 16:23:54 -04:00
blitzmann
08382db011 Add character management window, ability to add and delete crest characters, and fix issue with not having default client ID available. 2015-10-23 21:26:38 -04:00
blitzmann
9929510e53 More work on CREST stuff. Now implicit character can GET and POST fits. 2015-10-23 19:14:43 -04:00
blitzmann
f6cddcc86d Add to repo missing preferences panel 2015-10-23 19:12:05 -04:00
blitzmann
953a70327a Fix (hack at) pycrest to fix caching issue when getting another character. 2015-10-23 01:21:51 -04:00
blitzmann
6e04c64ffb Changed login box to show currently logged in character with timer, and we now fetch the character image. 2015-10-23 00:52:03 -04:00
blitzmann
e0f99ee133 Start refinement of CREST utilities:
* Add preference page which gives option of implicit grant or user client details
* Improve CREST service
* Changes in pycrest which make things a little easier
2015-10-21 23:10:06 -04:00
blitzmann
69a4e42ab0 Forgot the server 2015-10-19 21:34:47 -04:00
blitzmann
8151debfe1 Can now login to SSO from pyfa, which completes basic integration. This is very crude, will be refined. 2015-10-19 20:09:39 -04:00
blitzmann
972df6cad3 Add support for importing CREST fittings from clipboard and through EVE Fittings browser 2015-10-18 23:38:21 -04:00
blitzmann
b1729095a0 Export fitting to EVE, fix json bugs, and include forgotten CREST service. 2015-10-18 17:13:19 -04:00
blitzmann
23dbb59f3f Couple fixes 2015-10-18 01:46:41 -04:00
blitzmann
9269c54434 Implement exporting in CREST format 2015-10-18 01:33:39 -04:00
blitzmann
c4246c0d50 Added CREST service and first pass of fitting resource browsing. I want to completely rework this eventually, but right now just focused on getting a rough draft going. 2015-10-18 00:21:01 -04:00
blitzmann
d013a41079 Added CREST client data (for SISI), and rudimentary database support. Valid data has to be manually entered at this time, but the loading of the crest character works and uses pycrest correctly 2015-10-17 21:47:55 -04:00
blitzmann
94995685e9 Added pycrest with a few fixes. 2015-10-17 21:41:24 -04:00
blitzmann
11c3859270 Added small server script to be used as CREST callback. This can listen for and print the authorization code. 2015-10-16 15:39:40 -04:00
blitzmann
5246432420 Fix triage effects 2015-10-12 19:30:09 -04:00
blitzmann
8ccdbcc51d Fixed generating .exe on Linux. 2015-10-11 21:49:28 -04:00
blitzmann
81c2895c9e Fix dist script 2015-10-12 00:00:10 -04:00
blitzmann
cbb31c1217 Update dist.py 2015-10-11 19:15:40 -04:00
blitzmann
6c80d15f1d Close update dialog, don't destroy (OSX bug fixes) 2015-10-09 17:43:23 -04:00
blitzmann
4baa6e9e9f Switch over wx.BusyInfo from custom wait dialog 2015-10-09 13:04:06 -07:00
blitzmann
2e998bd5a4 Merge branch 'master' into osx_fixes 2015-10-09 12:20:07 -07:00
blitzmann
a33ec89e87 Fix issue that caused fits that were supposed to open in the background to calculate. Unfortunately this fix breaks the tab snapshot, will have to figure that out later 2015-10-09 18:32:03 -04:00
blitzmann
ba9232e514 Fix preferences dialog 2015-10-09 09:10:37 -07:00
blitzmann
f090cafa5c OS X distributive was pointing to the wrong path for the pyfa root, due to the executable being in a different place than the actual root. This changes the logic to use sys.executable as a fallback when __file__ doesn't exist (for example in the windows distributive) 2015-10-08 15:23:51 -04:00
blitzmann
a67b46bb9a Fix some mining effects 2015-10-05 20:37:41 -04:00
blitzmann
f17fb82ce7 Fix issue with ship bonuses not applying when fit is projected (#374) 2015-10-05 18:10:39 -04:00
blitzmann
3f6c484c99 Fix paths that point to eve.db 2015-10-05 12:33:07 -04:00
blitzmann
11cf4b356c Correct GUI problem with character editor 2015-10-05 03:26:41 -04:00
blitzmann
231cdb8399 Fix minor default settings, fix dist script for wx3 merge 2015-10-04 22:07:23 -04:00
blitzmann
30f077027b Update README.md 2015-10-04 21:37:02 -04:00
blitzmann
8a2c4671bf Update README.md 2015-10-04 21:34:53 -04:00
blitzmann
35f56b9c32 Rename gpl.txt to LICENSE 2015-10-04 21:34:36 -04:00
blitzmann
ae3bd9d9d4 Fix additions toggle to fully collapse 2015-10-04 18:58:55 -04:00
blitzmann
9465aceddb Add splitter between fitting and additions 2015-10-04 18:28:15 -04:00
blitzmann
8e353b08ae Fix some weirdness with come columns 2015-10-04 17:16:48 -04:00
blitzmann
a5f1370eec Fit system effects not applying to projected fits. 2015-10-04 13:17:13 -04:00
blitzmann
b454ac003b Present error message if HTML Export path does not exist 2015-10-04 15:36:56 -04:00
blitzmann
17d353e09b Fix crash with GUI HTML export, and clean up dialogs. 2015-10-04 15:24:53 -04:00
blitzmann
365cacac66 Fix #371 2015-10-02 11:16:41 -04:00
blitzmann
30fef3039c Merge branch 'wx3' 2015-10-01 21:16:06 -04:00
blitzmann
6f161b495f Bump dev version 2015-10-01 21:15:53 -04:00
blitzmann
582e54e758 Fix a few things in inno script 2015-09-29 22:48:50 -04:00
blitzmann
072fac4259 Merge branch 'master' into wx3 2015-09-29 21:35:44 -04:00
DarkPhoenix
4e890e1e1d Update database to tq version and bump version in config 2015-09-29 22:28:49 +03:00
DarkPhoenix
473b70944f Merge branch 'singularity' 2015-09-29 22:25:36 +03:00
blitzmann
37b158439d Fix #359 2015-09-28 20:32:55 -04:00
blitzmann
2617143330 Fix #363 2015-09-27 18:16:54 -04:00
blitzmann
a3b108382e Move eve.db to root 2015-09-27 09:45:44 -04:00
blitzmann
e07c162453 Reduce confusion with number of cycles vs charges 2015-09-26 19:17:22 -04:00
blitzmann
0f8992432b Merge branch 'master' into wx3
Conflicts:
	gui/characterEditor.py
2015-09-26 18:53:28 -04:00
blitzmann
c751544560 Do not show level change menu for All 5/0 in char editor 2015-09-25 12:56:40 -04:00
blitzmann
1d51e86c1c Added individual skill save to context menu 2015-09-25 12:16:11 -04:00
blitzmann
05b9d1e607 Fixed some bugs, added character action buttons on editor 2015-09-25 12:13:17 -04:00
blitzmann
2a88e3114b Skill color goes back to normal when saving/reverting skill. 2015-09-25 11:15:08 -04:00
blitzmann
a0f9fb6ad6 Enable/disable edit menu options, and add color to character editor to show which skills are edited 2015-09-24 22:11:31 -04:00
blitzmann
b844bdf986 Add save character as dialog 2015-09-24 20:46:07 -04:00
blitzmann
61614553a2 Fix bug with char copy, and added char revert and save as (unfinished) 2015-09-24 19:03:30 -04:00
blitzmann
ae870f9535 Merge branch 'newTempChar' 2015-09-24 17:16:14 -04:00
blitzmann
30a8437515 Fix returning unicode with __repr__ and __str__. Fixes #356 2015-09-24 14:15:54 -04:00
blitzmann
8647fa245f Fix Jump Drive Economizer. It does not project, and is only applies bonus when online. 2015-09-24 13:09:43 -04:00
blitzmann
23bb763c51 Fix system effects to respect their state 2015-09-24 13:09:25 -04:00
blitzmann
c158cb076f Fix dist script for icons 2015-09-24 12:43:20 -04:00
blitzmann
b1ebf8562a Incorporate icon zipfile making into dist script 2015-09-24 12:27:29 -04:00
blitzmann
e9d02ce4c8 Change to use BitmapLoader class 2015-09-24 12:21:50 -04:00
blitzmann
ec6914d4aa Bitmap Loader is now a proper class, and can be used to load images from zipfile 2015-09-24 12:18:33 -04:00
blitzmann
474f270b26 Change to new icon locations 2015-09-24 12:17:17 -04:00
blitzmann
fb7574e476 Remove extra location stuff from bitmap loader 2015-09-24 11:45:24 -04:00
blitzmann
760b5f3d74 Change in icon layout in preparation for better icon loading. 2015-09-24 11:44:20 -04:00
DarkPhoenix
51c481206c Bump version to make preview build 2015-09-24 01:15:56 +03:00
DarkPhoenix
7b6b922c57 Update database to 965413 and implement BC changes 2015-09-24 01:08:20 +03:00
blitzmann
a08bb2494b Fix system effect states 2015-09-22 21:45:32 -04:00
blitzmann
4affc24ec7 update setup.py 2015-09-20 20:47:16 -04:00
blitzmann
d7cb0d536f Polish the Inno script to delete left overs and only uninstall if version is before a certain milestone. 2015-09-19 23:14:53 -04:00
blitzmann
bf9a4b4919 Run uninstall before installing. Removes old files. Still need version checker and deleting pyc/pyo files 2015-09-18 19:48:06 -04:00
blitzmann
3ea4439b8d Allow changing all 5 and 0 from editor 2015-09-18 11:59:52 -04:00
blitzmann
bd53785667 Allow all 5 and 0 to change skills from affecting skill menu 2015-09-14 20:35:36 -04:00
blitzmann
f2b4400834 Do auto-save when editing in character editor. 2015-09-14 20:30:12 -04:00
blitzmann
b8d01d5ecb Fix a few things 2015-09-13 16:59:59 -04:00
blitzmann
9ae5cfbab2 Revert "Fix API stuff. This should theoretically work, but it's untested."
This reverts commit 1402ceec63.
2015-09-13 16:57:22 -04:00
blitzmann
045031e8ae Revert "Fix character rename, delete, and copy."
This reverts commit c72f049ccd.

Conflicts:
	service/character.py
2015-09-13 16:55:32 -04:00
blitzmann
2c7bfd14b6 Revert "Separate characters from Fit relationship..."
This reverts commit 3521b3887d.

Conflicts:
	eos/db/saveddata/queries.py
2015-09-13 16:53:42 -04:00
blitzmann
1584586fd2 Try a different approach to temp skill levels 2015-09-13 16:51:36 -04:00
blitzmann
1402ceec63 Fix API stuff. This should theoretically work, but it's untested. 2015-09-12 13:15:59 -04:00
blitzmann
4663270067 Since we now have a list of skills by default on our character, remove the iterSkills iterator which helped fetch skills that were not previously loaded 2015-09-12 11:06:21 -04:00
blitzmann
0b9cdaa944 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. 2015-09-12 10:59:44 -04:00
blitzmann
89c011d37e Minor modifications. 2015-09-12 10:30:51 -04:00
blitzmann
c72f049ccd Fix character rename, delete, and copy. 2015-09-09 23:12:59 -04:00
blitzmann
ca34217f3b Added character saving.
Deleting characters is broken for now due to using wrong session, but I believe creating character works. Further tests needed
2015-09-09 20:33:15 -04:00
blitzmann
3521b3887d Separate characters from Fit relationship and create new character session. At this point, changes to characters do not persist. Efforts must still be made to focus on creating a character save function as well as ensure characters that are dirty are loaded correctly for fresh fits. 2015-09-09 19:08:38 -04:00
blitzmann
492776c5a8 Fix Scram effect to turn off MWDs. Fixes #70 2015-09-06 11:06:52 -04:00
blitzmann
51a8076d30 Comment cleanup 2015-09-01 23:29:47 -04:00
blitzmann
decf7ff028 Fix #351 2015-09-01 23:23:52 -04:00
DarkPhoenix
31b1c94c0f Add AT13 prize ships 2015-09-01 01:26:30 +03:00
DarkPhoenix
a9fc457510 Bump dev version 2015-09-01 00:09:10 +03:00
blitzmann
7c3c8182a7 Fix initial database creation 2015-08-28 22:03:54 -04:00
blitzmann
b162927f79 Merge branch 'master' into wx3 2015-08-27 22:05:38 -04:00
blitzmann
6dbed1403a Bump stable 2015-08-27 21:50:13 -04:00
blitzmann
aa5eb7ac92 Update DB, force Imp and Fiend as not published again (will publish these when they are live) 2015-08-27 21:49:06 -04:00
blitzmann
e0fbcc91f1 Update effect headers 2015-08-25 17:47:15 -04:00
blitzmann
b2dce223b0 Add AT13 prizes 2015-08-25 17:42:34 -04:00
blitzmann
4b7b22025c Add new drifter incursion effect 2015-08-25 17:39:57 -04:00
blitzmann
8e37dab37e Disallow assistance with active Estonis link 2015-08-25 17:37:17 -04:00
blitzmann
6e95f69565 Support speedLimit introduced with Entosis Link 2015-08-25 17:26:25 -04:00
blitzmann
31331b1e34 Update to 957210 - Galatea 1.0 2015-08-25 17:25:12 -04:00
blitzmann
05b3777ad2 Add build directory to ignore file. 2015-08-25 16:06:38 -04:00
blitzmann
cda8dd4c8b Windows skel has an issue with this, so if there is an issue, use default path to cache file. 2015-08-21 19:04:42 -04:00
blitzmann
e7542fec44 move debug setting, remove debug print 2015-08-21 18:23:46 -04:00
blitzmann
e7fcdd86ac Well, adding this caused severe issues. >_> 2015-08-21 18:02:06 -04:00
blitzmann
d909e8adc4 Fix config file, clean up pyfa.py 2015-08-21 16:48:07 -04:00
blitzmann
def20311a8 New migration import mechanics, borrowed from market conversion imports, because we can't os.listdir from a zipfile 2015-08-21 15:10:00 -04:00
blitzmann
503907e2d8 Fix setup so that we can execute it from dist script and not have it complain 2015-08-21 15:08:51 -04:00
blitzmann
88dc1edfb4 Work on dist script 2015-08-21 15:08:23 -04:00
blitzmann
cbedf03026 Another fix to prep_data. I'll get this right one day 2015-08-21 12:08:57 -04:00
blitzmann
a69589dd23 Merge pull request #346 from Will-W/master
Context menu to swap modules for different variation
2015-08-18 13:08:15 -04:00
Will Wykeham
2904ab6afa Non-windows platform fix for variations menu 2015-08-18 15:59:02 +01:00
Will Wykeham
c763595cc4 Remove debug print statement 2015-08-17 15:41:58 +01:00
Will Wykeham
8fe97180ed Sort higher metalevel items properly in variations menu 2015-08-16 21:56:39 +01:00
Will Wykeham
6a4b2ffe69 Make variations menu handle multiple selections
Ensure the variations menu only shows when you've got
a matching set of items selected.
2015-08-16 21:45:20 +01:00
Will Wykeham
7f100353e2 Make variations menu actually swap out module
Functional, but not handling multiple selections well
2015-08-16 18:30:27 +01:00
Will Wykeham
97ac0804c5 Add Submenu of variations of module type.
Non functional so far.
2015-08-15 19:35:31 +01:00
blitzmann
48f96a7a32 Merge branch 'master' into wx3
Conflicts:
	config.py
	staticdata/icons/icon01_08.png
	staticdata/icons/icon02_11.png
	staticdata/icons/icon105_46.png
	staticdata/icons/icon105_47.png
	staticdata/icons/icon105_48.png
	staticdata/icons/icon105_49.png
	staticdata/icons/icon108_5.png
	staticdata/icons/icon113_64_1.png
	staticdata/icons/icon113_64_2.png
	staticdata/icons/icon113_64_3.png
	staticdata/icons/icon34_16.png
	staticdata/icons/iconMarketIcon_16px_Amarr.png
	staticdata/icons/iconMarketIcon_16px_Caldari.png
	staticdata/icons/iconMarketIcon_16px_Gallente.png
	staticdata/icons/iconMarketIcon_16px_Minmatar.png
2015-08-15 10:50:58 -04:00
DarkPhoenix
598512a904 Fix stacking penalties on active tank effects 2015-08-13 02:21:24 +03:00
DarkPhoenix
121a81ce70 Remove few debugging prints 2015-08-11 15:59:38 +03:00
blitzmann
a2e031cf27 Fix prep_data script so that it actually works 2015-08-09 23:20:00 -04:00
DarkPhoenix
f18ba6160a Do 2 blank lines between cargo contents and the rest of the fit, and when exported with the implants - do cargo items after the implants 2015-08-08 13:36:16 +03:00
blitzmann
c2ca5dffe8 Fix incorrect bitmap rendering of OSX-wx3. MacSetTheme was removed, but it's still required for 2.8 otherwise we get an off-color background 2015-08-04 23:48:31 -04:00
blitzmann
ab7bbcb6ef Remove matplotlib's font cache. Fixes #234 2015-08-04 22:18:28 -04:00
blitzmann
e5e7311748 Revert "Fix preferenceDialog list view width" and actually fix it. OS X untested
This reverts commit 9ba3ca3f5f.
2015-07-26 19:34:42 -04:00
blitzmann
9ba3ca3f5f Fix preferenceDialog list view width 2015-07-26 19:19:53 -04:00
blitzmann
cc59612fa4 Debug logging when flag is set 2015-07-23 16:58:55 -04:00
Ryan Holmes
01db1efdf7 Merge pull request #336 from blitzmann/regSkills
Register skills when applying ship bonuses
2015-07-23 15:58:07 -04:00
blitzmann
e74e2615ad Merge remote-tracking branch 'origin/projections' 2015-07-23 15:46:32 -04:00
blitzmann
2f246d0897 Add context menu to affected by list 2015-07-23 15:32:27 -04:00
DarkPhoenix
505b0ce38f Clear info dicts in-place instead of replacing them with new ones
Sometimes it can cause fuckups, so who knows how PIL works with them...
2015-07-23 20:34:02 +03:00
DarkPhoenix
8c19a956e0 Strip ICC color profile data
Fixes #337
2015-07-23 20:32:40 +03:00
blitzmann
9de3600d7f Fix self-boosting 2015-07-23 01:38:51 -04:00
blitzmann
5a4f526b2b Fix fit copying 2015-07-22 14:27:44 -04:00
blitzmann
cd0b0eada0 Fix graphing 2015-07-22 13:12:57 -04:00
blitzmann
17733d5951 Added missing tactical mode calculations... whoops 2015-07-22 13:02:08 -04:00
blitzmann
0a1f324053 Fix Advanced Spaceship Command skill and resists for Occator 2015-07-21 12:27:46 -04:00
blitzmann
e12b3f3054 Merge tag 'v1.13.2' into wx3
Conflicts:
	config.py
	A lot of icons
2015-07-20 13:21:00 -04:00
blitzmann
b32f76cfde Show affecting skills for charges as well 2015-07-19 16:39:07 -04:00
blitzmann
182104a010 Fix #109 2015-07-19 16:20:42 -04:00
blitzmann
90c883da67 Fix some syntax errors. 2015-07-19 15:51:03 -04:00
blitzmann
ac08b1b264 Add check for current skill level 2015-07-19 15:16:29 -04:00
blitzmann
f17d015ebe Fix having multiple skills in skill list (happens when multiple attributes are modified) 2015-07-19 15:02:50 -04:00
blitzmann
d496637614 Add ship skill bonuses to modified modules. Modify effect files for new skill parameter. Enable affecting skill menu. 2015-07-19 14:19:24 -04:00
blitzmann
4596c526a2 Fix #335 - properly represent charge modifiers 2015-07-18 23:39:16 -04:00
blitzmann
9941b6c74b Make default view module again 2015-07-18 15:23:10 -04:00
blitzmann
b06ce24d4a Fix attribute view items (two of the same item would merge into one, even if they had different modifiers. now simply list them individually) 2015-07-18 15:20:15 -04:00
blitzmann
2f8c201ab3 Add attribute view 2015-07-18 14:45:26 -04:00
blitzmann
d184820728 Fix toggle attribute names. Previous way assumed no other trees apart from first child and siblings. Not true now with projected fit trees. Instead of attempting to walk the tree, we simply store the items in a list that we later iterate over. Much easier 2015-07-17 18:28:31 -04:00
blitzmann
40aeb1ed4a Move active fir to init, fixes bug when refreshing with another active fit 2015-07-17 16:33:07 -04:00
blitzmann
71b258a8f5 Merge fit attributes with ship 2015-07-17 16:32:42 -04:00
blitzmann
cd7579a4bf Fix #332 - offline rigs calculated in calibration stats 2015-07-17 00:01:31 -04:00
blitzmann
d6199a58c2 Separate projected fits from list of affectors. Also, show when affected module is projected. Still need to clean up affector tree stuff 2015-07-16 23:59:37 -04:00
blitzmann
3ad5aaac89 Fix #331 - gang boosts not applied to self projection 2015-07-15 16:52:09 -04:00
blitzmann
3bed268d81 Fix use case for downgrading and adding a row with NULL 2015-07-14 19:13:56 -04:00
blitzmann
9a1b0f07c0 Added documentation on why projections don't respect the __calculated flag which gang boosts do 2015-07-14 16:32:10 -04:00
blitzmann
f591ecba10 Fix use case where gang boosts were not being applied when projections were added/removed. 2015-07-14 16:15:52 -04:00
blitzmann
c571fdc5e6 Fit fit alterations with self projections 2015-07-13 19:29:23 -04:00
DarkPhoenix
6f944fc7db Stacking penalize missile flight time rigs 2015-07-12 02:12:59 +03:00
blitzmann
63fce4be17 Handle self projections by creating a copy of the fit. Due to the way effects are calculated, we would have double effects implemented if not for the copy 2015-07-11 16:28:09 -04:00
blitzmann
86ee5292d8 Fix fit copying and deleting fits not being reflected in other fits. 2015-07-11 12:43:47 -04:00
blitzmann
0060f58e3d Support evemon character imports. 2015-07-11 10:17:02 -04:00
blitzmann
23b458534f Remove unneeded collection class for projected fits 2015-07-10 23:22:58 -04:00
blitzmann
2256efacb0 Do migration stuff for projected fits 2015-07-10 16:40:00 -04:00
blitzmann
28a5318e3b Merge branch 'master' into toggleProjectionFit
Conflicts:
	config.py
2015-07-10 16:09:00 -04:00
blitzmann
609ee13cd6 Redirect stderr and stdout to logger when we are frozen. Need to test this. 2015-07-10 15:58:45 -04:00
blitzmann
4216904736 Remove function to remove projected fits correctly. This is now handled by proper DB relationships 2015-07-10 15:46:42 -04:00
blitzmann
496e9b56b5 Handle use case of invalid fit's mucking things up 2015-07-10 15:46:15 -04:00
blitzmann
b8f73a7c94 bump dev 2015-07-10 12:58:03 -04:00
blitzmann
b4604f8207 Bump Stable... maybe it will be this time 2015-07-10 12:17:14 -04:00
blitzmann
68dddf2810 Fix for init projected fit. Took a long time to figure out what was happening. 2015-07-10 11:58:15 -04:00
blitzmann
4c17f38b1a Fix for #324 - do not reset itemID automatically upon removal due to way modules are swapped. 2015-07-09 18:36:11 -04:00
blitzmann
221a3fde14 Being extra cautious 2015-07-09 18:18:36 -04:00
blitzmann
c17e03d8d0 Fixes critical design issue when it comes to projected fits. Disabled some of the more advanced functionality (projection amount and active) to cope to development. Crash still happens occasionally when adding projected fit for unknown reasons - not 100% reproducable yet 2015-07-09 17:53:41 -04:00
blitzmann
af9f64db5f Move the chain into the runtime loop, otherwise projections won't work for some odd reason. 2015-07-09 14:48:15 -04:00
blitzmann
1f82465a65 Return None for price column on ship modes, fixes #322 2015-07-09 12:13:13 -04:00
blitzmann
d885bd4636 Bump dev and Fix #321 - oversight in tactical mode selection 2015-07-09 11:48:11 -04:00
blitzmann
c17bce55bb Lots of stuff
- Added logging and replaced Timer class with more useful one
- Move projected fit loop out of runtimes
- Eliminate recursions from Fit.clear()
- Clean up overall fit calc logic
2015-07-09 10:43:39 -04:00
blitzmann
4137a7cda9 Bump stable 2015-07-08 11:20:18 -04:00
blitzmann
c92911b79a Work around for lack of flag_modified() support 2015-07-08 10:54:26 -04:00
DarkPhoenix
adc9fb6d00 Don't call function multiple times after first unconditional call 2015-07-08 17:45:25 +03:00
Ryan Holmes
5baf70694a Merge pull request #318 from poettler-ric/fix-logging
Fix logging
2015-07-08 10:14:46 -04:00
Richard Poettler
f08dc97576 logging crashes if the directory doesn't exist 2015-07-08 10:47:25 +02:00
Richard Poettler
35094ae1ce moved dublicate code into one method 2015-07-08 10:45:37 +02:00
DarkPhoenix
5ac31920ee Fix #317
Crop images to square form before making thumbnail, not square images cause issues on Windows
2015-07-08 11:39:01 +03:00
DarkPhoenix
e63c3541c4 Bump for next development release 2015-07-08 00:09:34 +03:00
DarkPhoenix
4976516d4d Bump for a stable version 2015-07-07 23:36:03 +03:00
Ryan Holmes
e042a21d32 Merge pull request #315 from lunedis/resistmultiplier
Showing Resist Multiplier in Tooltip
2015-07-07 14:42:50 -04:00
Kalu
8a22907940 newline in resist multiplier tooltip and explanation 2015-07-07 20:38:27 +02:00
Kalu
a97847e644 show rr factor in tooltip 2015-07-07 20:38:16 +02:00
blitzmann
23309a5da6 Remove unneeded code that created a bitmap for checkboxes 2015-07-07 13:49:40 -04:00
blitzmann
06e4a7e80f Support changing amount of projected fits 2015-07-07 13:49:39 -04:00
blitzmann
b95a10d284 Add active column. Looping the fit to apply it x amount of times doesn't seem to work. Probably because it's been flagged calculated and returns early 2015-07-07 13:49:38 -04:00
blitzmann
2bca3ddcc8 GUI support (also made regular checkboxes pretty for drones/implant/etc) 2015-07-07 13:49:37 -04:00
blitzmann
9ef182aa99 First working prototype of toggleable projected fits. Creates a new association object that stores projection-specific information. GUI hasn't been touched (need to show state), and there are a lot of variables that I need to rename. 2015-07-07 13:49:35 -04:00
blitzmann
5e56107582 Revert changes to minimum / default sizes of splitter windows 2015-07-07 13:28:02 -04:00
DarkPhoenix
972c08e7e4 Remove AT13 prizes from ship list for now 2015-07-07 16:10:29 +03:00
DarkPhoenix
091832af21 Fix bug in script and add missing icons 2015-07-07 16:09:13 +03:00
DarkPhoenix
16d1891e16 Add script which updates renders and update them using aegis release export 2015-07-07 16:05:44 +03:00
DarkPhoenix
40ee68e2cf Update module/attribute icons 2015-07-07 15:11:55 +03:00
DarkPhoenix
bfe3b4a26d Add new entosis offline mass penalty 2015-07-07 15:10:37 +03:00
DarkPhoenix
9aa1332b15 Update database to 912410 2015-07-07 15:07:39 +03:00
DarkPhoenix
0521d242eb Make sure bitmap loader searches for proper file (w/o EVE embedfs-specific path and extension) 2015-07-06 11:31:02 +03:00
DarkPhoenix
2b3f3773e5 Merge branch 'master' into singularity 2015-07-06 01:39:50 +03:00
DarkPhoenix
4041407878 Also make sure to process icons for categories and attributes 2015-07-06 01:38:51 +03:00
blitzmann
1b5e0467fc Save browser sizes 2015-07-05 13:59:18 -04:00
DarkPhoenix
a7c346f78e Add script which is supposed to update icons 2015-07-05 20:59:15 +03:00
blitzmann
3cc51aaf89 Change logging location to ~/.pyfa and set default level to WARN 2015-07-05 13:15:26 -04:00
Ryan Holmes
a339ae1c55 Merge pull request #312 from blitzmann/dbCorruption
Fixes for database rot
2015-07-05 13:08:11 -04:00
blitzmann
3773d1c28e Improvements to fit initializations and logging 2015-07-05 12:57:04 -04:00
blitzmann
41b8db346f Fix broken drone drag 2015-07-05 01:16:53 -04:00
blitzmann
7959593c6c Improve object initialization and add support for logging the errors. 2015-07-05 00:31:52 -04:00
blitzmann
aaa60cbc14 Fix instance where some items were being re-added due to lack of return. Also, implement some basic logging. 2015-07-05 00:28:55 -04:00
DarkPhoenix
8ae5a96047 Merge branch 'master' into singularity 2015-07-04 12:45:15 +03:00
blitzmann
8c90b3132b Use lunedis's method and apply it to additions pane, cleans up code 2015-07-04 01:38:11 -04:00
blitzmann
1326e21f6b Fix IndexError when selecting module index that doesn't exist. Also, tweaked setting the selItem variable. 2015-07-04 01:27:57 -04:00
blitzmann
bfdc2161e0 Add shortcut cues as toggle in prefs 2015-07-04 00:52:44 -04:00
blitzmann
9ab79af70c Show shortcut values in market list 2015-07-04 00:44:19 -04:00
Ryan Holmes
f0de2000bf Merge pull request #313 from lunedis/quickfit
Quickly fitting modules using ALT+1-9
2015-07-04 00:34:43 -04:00
blitzmann
5991d19b3e Allow Subsystems as modules. 2015-07-04 00:32:28 -04:00
Kalu
51fed996f1 refactor quickfit shortcuts with list 2015-07-03 23:43:04 +02:00
Kalu
f6bbc6c410 Implemented using Alt+1-5 for quickly fitting modules, see issue #183 2015-07-03 23:42:54 +02:00
blitzmann
3de6b63325 Fix oversight when creating a new database 2015-07-03 14:18:11 -04:00
blitzmann
dd48815f30 Offline rigs, closes #100 2015-07-03 14:05:57 -04:00
DarkPhoenix
5608676dc8 Merge branch 'master' into singularity 2015-07-03 12:37:08 +03:00
DarkPhoenix
86ab1f7444 Ignore python pyc files and rely on index within file rather than just on amount of files 2015-07-03 12:36:17 +03:00
DarkPhoenix
8f51642f70 Merge branch 'master' into singularity 2015-07-03 12:13:53 +03:00
blitzmann
de71123a48 Merge branch 'pricing' 2015-07-03 02:38:23 -04:00
blitzmann
874cf4ef0a Use old price information if update fails. Add "(!)" to show that price is out of date 2015-07-03 02:37:52 -04:00
blitzmann
87e5929cb1 DB migration is triggered by number of upgrade files found, rather than number in config.py. This allows us to remove the db version variable in config.py and not worry about it. 2015-07-02 19:35:53 -04:00
blitzmann
84b1e0ac41 Migrate boosters table to new schema that drops the UNIQUE constraint (causes issues and is unneeded) 2015-07-02 19:34:02 -04:00
blitzmann
539360d5f6 Remove old debug print 2015-07-02 15:04:07 -04:00
blitzmann
ca08f8d8da Handle fits with invalid ships by removing and deleting them when loaded. 2015-07-02 15:03:56 -04:00
blitzmann
e1ce672569 Move flag_modified to HandledList.remove() so that it takes care of all our use cases. Give fits an itemID like everything else so that projected fits can be removed correctly by this logic. No reason for them to be special snowflakes. 2015-07-02 11:22:26 -04:00
blitzmann
717080b58c Handle invalid implants and boosters. Uses a different method to ensure implant and booster slot is not duplicated. Still need to modify existing databases to remove Booster table constraint. Reverts a previous commit: "Gracefully handle invalid boosters in database (both itemIDs that don't exist as well as non-booster items). Implants need a little more work" (aaa5a6ae18) 2015-07-02 00:48:32 -04:00
blitzmann
51696c509f Merged Cargo and Drone collection class (essentially the same). Utilized SQLAlchemy's flag_modified() to force SA to update DB (in this case, remove the entry) 2015-07-01 20:54:40 -04:00
blitzmann
4a5ae9f6f1 Handle invalid cargo. Noticed that cargo nor drones are removed from the database with these methods. Not sure why - projected drones and modules are correctly removed in similar ways 2015-07-01 15:21:27 -04:00
blitzmann
fa9f324f78 Handle invalid drones 2015-07-01 14:55:05 -04:00
blitzmann
bcc77f11cd Handle invalid projected drones 2015-07-01 14:50:08 -04:00
blitzmann
f737f292e3 Refine appending projected modules. Ensure that module can actually be projected, and also ensure that we only have 1 system effect running at a time. Invalid modules are removed at earliest opportunity as we are later accessing attributes that may not be there for corrupted data. 2015-07-01 13:34:19 -04:00
blitzmann
1c18a5207c System Effects are wrapped in Module class, even though they are not modules. Account for this. 2015-07-01 13:32:31 -04:00
blitzmann
fa2b1e3821 Handle invalid modules. This streamlines the module init code from both program and database sources. When loading from the database, we ensure that the module item is actually an item. If not, we set a flag to delete it (which is picked up by the collection class)(can't use exceptions as there's no place to catch them) 2015-07-01 02:20:56 -04:00
DarkPhoenix
6184753822 Merge branch 'master' into singularity 2015-06-30 21:16:15 +03:00
DarkPhoenix
91a9c860ea Merge branch 'singularity' of github.com:DarkFenX/Pyfa into singularity 2015-06-30 21:15:10 +03:00
DarkPhoenix
0730ac369f Update data to 910808 2015-06-30 21:14:22 +03:00
blitzmann
aaa5a6ae18 Gracefully handle invalid boosters in database (both itemIDs that don't exist as well as non-booster items). Implants need a little more work 2015-06-30 13:51:49 -04:00
blitzmann
5372f31be8 Revert "Revert "Merge branch 'master' into wx3"". So many reverts.
This reverts commit cca7f1112a.
2015-06-27 21:53:59 -04:00
blitzmann
6d01877d78 Merge branch 'master' into wx3
Conflicts:
	pyfa.py
2015-06-27 19:33:12 -04:00
blitzmann
646f3afd27 Fixed oversights 2015-06-27 19:32:21 -04:00
blitzmann
030f22b66f Merge branch 'debugGtk' into wx3 2015-06-27 18:25:31 -04:00
blitzmann
98815f2b85 Fix #307 by moving menu code to spawn event 2015-06-27 18:18:43 -04:00
blitzmann
a4fe3fe142 Fix crash in character editor 2015-06-27 15:56:34 -04:00
blitzmann
5b0857e169 Ensure that resources gauge is not drawn with a width of 0 to make GTK happy 2015-06-27 15:35:22 -04:00
blitzmann
975a414c5f Ensure that SetSize() does not take values less than -1 2015-06-27 14:39:35 -04:00
Ryan Holmes
95eb5a6117 Update README.md
Added note for Linux users and wxPython 2.8
2015-06-25 21:45:06 -04:00
blitzmann
8a7e69b902 Fix progress dialog stuff. Closes #281 2015-06-25 16:43:39 -04:00
blitzmann
dc035469ed Fix background color for certain panels under Linux 2015-06-25 16:09:56 -04:00
DarkPhoenix
ec4a00cdfc Merge branch 'master' into singularity 2015-06-25 12:12:33 +03:00
blitzmann
21937c02ff Made it look nicer 2015-06-24 19:53:55 -04:00
DarkPhoenix
edfd446e46 Update to 908326 2015-06-25 00:33:37 +03:00
blitzmann
7ec78b941e Add help text for why api is disabled, per #269. I may or may not make it look nicer later 2015-06-24 15:10:37 -04:00
blitzmann
95bf1039c0 Fix #291 - Triage not properly implemented on projected fit 2015-06-24 14:36:31 -04:00
blitzmann
e6def6f5f9 Fix #299 - fit not recalculated after module states change upon module append 2015-06-24 00:40:13 -04:00
DarkPhoenix
de0b03630a Bump version 2015-06-23 00:17:41 +03:00
DarkPhoenix
90a2a79d5b Add hecate effects, update database to 906843 2015-06-23 00:00:09 +03:00
DarkPhoenix
21efd6d06a CCP added faction 200mm plates back to the game 2015-06-22 22:22:35 +03:00
DarkPhoenix
ea288a6133 Update conversion scripts to use new scheme 2015-06-21 16:50:07 +03:00
blitzmann
da16f6cee7 Fix closing of progress dialogs 2015-06-20 15:00:02 -04:00
blitzmann
f285395e0f Fix black bitmap when dragging fit, closes #303 2015-06-17 19:43:48 -04:00
blitzmann
b54e3aeaf9 See #303 2015-06-16 15:28:23 -04:00
blitzmann
23baaa7dba Merge branch 'master' of https://github.com/DarkFenX/Pyfa 2015-06-16 13:14:28 -04:00
blitzmann
8008c986d3 Fix #302 - Projected fit applying Tactical Destroyer mode effects on projectee 2015-06-16 13:14:16 -04:00
DarkPhoenix
b9efc919ea Add missing RHML rof effect 2015-06-16 16:53:21 +03:00
blitzmann
6cc6fd9468 Instead of icon, use unicode refresh. Minor issues with image and GUI flickering 2015-06-06 22:42:42 -05:00
blitzmann
53c9169043 Simplified price pane. Will show pricing update label and will only clear it when prices are done. Removed all timer code as it makes it overly complicated and I suspect half of it didn't work as intended anyway 2015-06-05 15:39:10 -05:00
blitzmann
eb2f4991ee Fix search in wx3 (and remove some needless crap... seriously, why was all that there?) 2015-06-04 22:48:46 -05:00
blitzmann
16017a3c31 Remove middle click to open new page, fixing wx3 deprecation warning (didn't seem to work anyway) 2015-06-04 21:01:49 -05:00
blitzmann
98d9adef8a Fix for libpng hating our color profiles 2015-06-04 17:27:11 -05:00
blitzmann
9e96aac04d Fix situation in which module prices are fetched individually (which the price column). Instead, have them wait in a queue that is processed when the entire fit is called and calculated (with the price pane). Also adds a little refresh icon to know that prices are updating and it's not just blank (might change) 2015-06-04 14:10:27 -05:00
DarkPhoenix
3395f8ebe6 Bump for next development release 2015-06-02 23:43:16 +03:00
DarkPhoenix
1d45102100 Bump for a stable release 2015-06-02 23:32:16 +03:00
DarkPhoenix
1694d74afa Add Carnyx tiericide module upgrade/import paths 2015-06-02 23:27:08 +03:00
DarkPhoenix
9c9f1dcefa Get faction 200mm plates back 2015-06-02 19:37:32 +03:00
DarkPhoenix
a4ca2e90f9 Add effect which affects entosis duration on cap ships 2015-06-02 16:48:58 +03:00
DarkPhoenix
dbfcfd9acf Change expansion data in config and update database to 893722 2015-06-02 16:38:38 +03:00
DarkPhoenix
8c30ee3fd3 Merge branch 'master' into singularity 2015-05-28 15:21:28 +03:00
Anton Vorobyov
ca17d17232 Merge pull request #292 from wolfwood/master
fix issue copying fits with sqlalchemy 1.0
2015-05-28 15:17:02 +03:00
wolfwood
b78c0a5845 fix issue copying fits with sqlalchemy 1.0 2015-05-27 10:21:16 -07:00
DarkPhoenix
ef6e25bfce Merge branch 'master' into singularity 2015-05-27 14:55:12 +03:00
DarkPhoenix
e81f7eb765 Change validator requirement for owner ID
This fixes bug related to sqlalch 1.0
2015-05-27 14:54:37 +03:00
DarkPhoenix
26122f6da7 Add latest changes from Singularity 2015-05-21 16:44:39 +03:00
blitzmann
e7264108dd Fix #287 2015-05-05 23:23:38 -04:00
blitzmann
2bcbb03c10 Fix #286 and another minor bug related to colors 2015-05-05 22:56:40 -04:00
DarkPhoenix
9cf20942f1 Change validator requirement for owner ID
This fixes bug related to sqlalch 1.0
2015-05-01 20:15:08 +03:00
DarkPhoenix
dbb98e981a Merge branch 'wx3' of github.com:DarkFenX/Pyfa into wx3 2015-05-01 19:03:04 +03:00
DarkPhoenix
3ae39b2e7c Remove unused import 2015-05-01 19:02:13 +03:00
DarkPhoenix
7b43b516c9 Add effect i should've added for mosaic release 2015-05-01 18:50:11 +03:00
DarkPhoenix
12d6a2c5de Bundle runtime libs with windows executable 2015-05-01 16:37:13 +03:00
DarkPhoenix
26bba49193 Work around bug in wxpython
Button is specified as property in wx docs, but it returns bound method instead of actually being a property
2015-05-01 16:00:26 +03:00
DarkPhoenix
4e69a2656c Add some options for Mac binary generation
Can't test it atm, but whatever
2015-05-01 15:37:09 +03:00
DarkPhoenix
68d504c79d Force writing errors/output to file in case of frozen distributive 2015-05-01 15:08:14 +03:00
DarkPhoenix
2180b1ac3b Add folder with assets used for distributives 2015-05-01 14:50:09 +03:00
DarkPhoenix
32712a8798 Fetch app version from config file 2015-05-01 14:20:01 +03:00
DarkPhoenix
73c7ad55b6 Add comment which shows how to use script 2015-05-01 14:00:31 +03:00
DarkPhoenix
a34c5ace5c Change setup file to make sure msi installer can be built 2015-05-01 13:54:40 +03:00
DarkPhoenix
fd77661f41 Tune setup file a bit more 2015-05-01 04:02:10 +03:00
DarkPhoenix
ad07cf25d8 Settle on just Tkinter in excludes 2015-05-01 03:23:57 +03:00
DarkPhoenix
4daf1b1ba3 Merge branch 'wx3' of github.com:DarkFenX/Pyfa into wx3 2015-05-01 01:28:18 +03:00
DarkPhoenix
4b189ab146 Remove obsolete readme 2015-05-01 01:27:54 +03:00
DarkPhoenix
64a69e3910 Remove tcl/tk from distributive 2015-05-01 01:27:07 +03:00
DarkPhoenix
9482404ca7 Remove setting locale
Who knows what it may cause, i'm not an wx expert, but wx3 bundled with xc_freeze keeps bitching about it...
2015-05-01 00:04:35 +03:00
DarkPhoenix
124d4fab9b Change the way we fetch conversions from package to make it compatible with frozen and packed builds 2015-04-30 23:59:56 +03:00
DarkPhoenix
722406f636 Change the way we detect root
This is needed for executable freeze to work correctly
2015-04-30 23:08:42 +03:00
DarkPhoenix
6d4957b148 Add setup.py for building binary distributives with wx3 2015-04-30 22:24:27 +03:00
DarkPhoenix
cca7f1112a Revert "Merge branch 'master' into wx3"
This reverts commit 33a0c10650, reversing
changes made to 2077655694.

Reverting merges fucks up git, but oh well - we probably better merge stuff manually rather than fucking up master with wx3 which is apparently buggy
2015-04-30 19:47:15 +03:00
DarkPhoenix
c809a614f9 Revert "Move logging initialization back to pyfa.py"
This reverts commit d18cf7b3b0.

Reverting all wx3 commits in master
2015-04-30 19:39:11 +03:00
DarkPhoenix
2c366faa66 Revert "Remove setting locale"
This reverts commit 7606bded40.

Reverting all wx3 commits on master
2015-04-30 19:38:47 +03:00
DarkPhoenix
06252d761d Revert "Change the way we detect pyfa path"
This reverts commit bb8d5d0d65.

Reverting all wx3 commits in master
2015-04-30 19:38:18 +03:00
DarkPhoenix
bb8d5d0d65 Change the way we detect pyfa path
This ensures that it works even with frozen executable
2015-04-29 00:27:42 +03:00
DarkPhoenix
7606bded40 Remove setting locale
It causes issues with wx3 on windows
2015-04-28 23:49:11 +03:00
DarkPhoenix
daaf48d02a Add effect i should've added for mosaic release 2015-04-28 21:59:54 +03:00
DarkPhoenix
d18cf7b3b0 Move logging initialization back to pyfa.py 2015-04-28 21:59:14 +03:00
DarkPhoenix
33a0c10650 Merge branch 'master' into wx3 2015-04-28 21:53:27 +03:00
DarkPhoenix
2077655694 Bump version for next development release 2015-04-28 21:43:22 +03:00
DarkPhoenix
0dc3cbb7c7 Bump version for a stable release 2015-04-28 19:50:53 +03:00
Anton Vorobyov
a3c19f6f2b Merge pull request #271 from BlckKnght/fix_stagger
Fix stagger
2015-04-28 19:34:58 +03:00
DarkPhoenix
f97b037011 Forgot to save file for previous commit 2015-04-28 19:18:56 +03:00
DarkPhoenix
dd3dd799b2 Move loggin configuration to config temporarily 2015-04-28 19:17:50 +03:00
Anton Vorobyov
ac881ac371 Merge pull request #276 from kainz/master
Support fits exported from jEveAssets
2015-04-28 18:30:20 +03:00
DarkPhoenix
d734ccbf0d Add effect for entosis link and update effect comments 2015-04-28 18:24:25 +03:00
DarkPhoenix
024e0ad4f5 Support proper migration for ishukone scorp (which is skin for regular scorp now) 2015-04-28 18:19:58 +03:00
DarkPhoenix
545d98883a Update DB to mosaic 2015-04-28 18:06:03 +03:00
DarkPhoenix
742abc3250 Remove bunch of chinese skinned ships 2015-04-28 18:05:15 +03:00
DarkPhoenix
294e213ac2 Remove support for vanity ships which were converted into base hulls in game
We do not need any DB conversion for them because we converted them into base hull during import time. Also it breaks import of old posted EFT-style fits with removed skinned ships, but i can't say we care alot about this case
2015-04-28 18:01:06 +03:00
Bryon Roche
557f32ab91 Implement support for loading utf-16 XML.
Such XML is generated by software like jEveAssets's owned ships->fitting
export tool.

Without such detection, pyfa will go and try to import those as DNA
fits, with all the ensuing hilarity, thus the DNA import debug code as
well.
2015-04-22 05:05:48 -07:00
DarkPhoenix
e5430cac84 Do not apply ES bonus to weapon locus rigs 2015-04-20 15:07:19 +03:00
blitzmann
39c14b62fd Merge branch 'master' into wx3 2015-04-17 17:48:56 -04:00
DarkPhoenix
940035fa8c Fix market groups of civilian modules 2015-04-13 15:48:35 +03:00
blitzmann
5eaaaf070b Merge branch 'master' of https://github.com/DarkFenX/Pyfa 2015-04-08 23:44:51 -04:00
blitzmann
0bc9264c28 Fix #268 2015-04-08 23:43:56 -04:00
Steven Barker
cb1de9589e fix typo, pick a better stagger amount 2015-03-31 12:09:27 -07:00
Steven Barker
370e34cff9 Make staggerred modules with ammo work 2015-03-30 21:02:56 -07:00
Anton Vorobyov
28c3fc720f Merge pull request #249 from f-andrey/master
Update gpl.txt
2015-03-27 22:03:08 +03:00
DarkPhoenix
04b3a687fc Add new yacht to LIS category and add its render 2015-03-26 15:42:32 +03:00
DarkPhoenix
629f6e60a4 Mark as development 2015-03-26 15:35:05 +03:00
blitzmann
f801d7905c Update effect file headers, mark as stable 2015-03-24 16:30:40 -04:00
blitzmann
694a2a3d9b Fix #267 2015-03-23 21:21:38 -04:00
blitzmann
222888984a Update to 871030 SISI, also fix prep_data script for changes in Phobos / reverence 2015-03-23 18:00:38 -04:00
Ryan Holmes
bb96ecb647 Merge pull request #263 from OISumeko/master
Fix for #261
2015-02-22 23:51:04 -05:00
Cameron Grout
e082077dfc Updated None || 0 check to meet requested style
Updated for pull  request #263
2015-02-23 17:02:47 +13:00
blitzmann
a31769bde3 Remove problematic pyd files upon installation 2015-02-22 21:17:20 -05:00
Cameron Grout
be7e8be85b Fix for bug #261
Missile launchers do not have a "capacitorNeed" attribute (while other
capless weapon systems do), so getModifiedItemAttr will return None
rather than 0. Added a check for this.
2015-02-22 23:52:58 +13:00
DarkPhoenix
b16d2eae15 Bump for a next development release 2015-02-18 15:48:40 +03:00
DarkPhoenix
0ef05ffaf8 Bump version 2015-02-18 15:47:43 +03:00
DarkPhoenix
9ee7671a3c Update DB to 862956 2015-02-18 13:55:23 +03:00
DarkPhoenix
ca301f8d5b Fix svipul's sensor str effect on sharpshooter mode 2015-02-15 14:27:32 +03:00
blitzmann
471261275a Commit missing database 862583 2015-02-14 21:56:10 -05:00
blitzmann
55f2f3bfe8 Merge remote-tracking branch 'blitzmann/singularity' into singularity 2015-02-14 01:33:08 -05:00
blitzmann
3ce673d8af Merge remote-tracking branch 'origin/master' into singularity 2015-02-14 01:32:44 -05:00
blitzmann
3e2053b2dd Update 862583 sans database 2015-02-14 01:27:52 -05:00
DarkPhoenix
931e48d9a0 Fix ES effect affecting local modules 2015-02-13 22:09:38 +03:00
blitzmann
6c19f446be Sort import stage results 2015-02-09 22:44:33 -05:00
Ryan Holmes
d4842c2f8e Merge pull request #260 from blitzmann/importStage
Import stage, resolves #93
2015-02-09 22:25:01 -05:00
blitzmann
dc77ee9353 Add import stage to goTo logic, and fixed a bug with search initiating a goTo to the last hx item 2015-02-09 22:05:56 -05:00
blitzmann
6d29fd6bc1 Simplified stage 3 history handling. Fixes:
* Hitting back button after creating/copying new fit breaks stage
* Importing more than 1 fit while on the search stage and hitting the back button breaks stage
2015-02-08 21:12:56 -05:00
blitzmann
cbcd5ccca5 Fixed bugs:
* Importing 1 fit would open stage3 of that ship, but add incorrect history data.
* Deleting fit from search stage caused blank stage most times, fixed this.
2015-02-08 20:29:54 -05:00
blitzmann
30d2ab23ad Initial support for import stage in shipBrowser. Few bugs, see issue #93 2015-02-08 16:14:52 -05:00
blitzmann
f4f028b843 Fix #258: broken EFT cfg import 2015-02-07 22:59:55 -05:00
blitzmann
ef62f102bc Fix #256 2015-02-07 21:15:23 -05:00
blitzmann
7b8bb79cbe Fix error when loading previous fits that no longer exist in DB 2015-02-03 15:23:31 -05:00
blitzmann
3a26790109 If in debug, publish ship mode items (makes it easy to find in market and look at stats).
Tweak effectsUsedBy.py to publish all modes in group rather than individually listing them.
2015-02-03 14:16:09 -05:00
blitzmann
c861adc5ed Sanity check to importing effect handler
Tweaks to opening effect files when in debug (support for OS X and Linux)
2015-02-03 14:07:21 -05:00
blitzmann
36a3ac70b6 Removed unneeded variable in effect file 2015-01-26 23:51:46 -05:00
blitzmann
54d1b35ce7 Fix path to point to actual gamedata - useful when importing from terminal and has no effect on pyfa's import (as it is specifically provided in pyfa/config.py) 2015-01-25 11:09:43 -05:00
blitzmann
675213f20f Fix #252 2015-01-21 11:18:58 -05:00
blitzmann
3a9e1f8b85 Fix XML export 2015-01-17 13:41:49 -05:00
blitzmann
e520758334 dev version 2015-01-15 12:29:16 -05:00
blitzmann
073309de0a Increment database version and bump to 1.8.1 stable 2015-01-15 12:08:35 -05:00
DarkPhoenix
1bce724190 Do not write non-ascii comments to effect files 2015-01-15 12:17:30 +03:00
blitzmann
2c47d0758e Bump to stable 2015-01-14 21:31:28 -05:00
blitzmann
8f7ae4b00c Remove Chinese ships from effect "used by" header 2015-01-14 21:04:12 -05:00
DarkPhoenix
f11f3bfb79 Implement recon effect changes 2015-01-15 02:35:22 +03:00
DarkPhoenix
68703f3db5 Put old innerzone names back
To make sure EFT fittings with these are imported & converted properly
2015-01-14 23:03:14 +03:00
Andrey
ad18560412 Update gpl.txt
Fix license text http://www.gnu.org/licenses/gpl-3.0.txt
2015-01-14 12:27:47 +03:00
blitzmann
d3def54b5a Conversion pack for Proteus Module Tiericide + conversion helper script 2015-01-13 22:37:20 -05:00
DarkPhoenix
27d72ed909 Add vanity ship changes from proteus 2015-01-14 03:22:28 +03:00
DarkPhoenix
55e45b6bc1 Remove published chinese ships from visibility 2015-01-14 03:15:35 +03:00
DarkPhoenix
252f56732b Merge branch 'master' of github.com:DarkFenX/Pyfa 2015-01-14 03:00:15 +03:00
DarkPhoenix
d52e88cdaa Update database to proteus & add tiericide item conversions 2015-01-14 02:59:15 +03:00
blitzmann
371e33764e Ammo name tooltip added to charge icon 2015-01-13 17:26:56 -05:00
blitzmann
9b8b7aba07 Add module state information to state tooltip 2015-01-12 23:37:40 -05:00
blitzmann
0a6274474e Fixes #204 2015-01-10 21:53:30 -05:00
Ryan Holmes
0ff69068c0 Merge pull request #241 from cockroach/master
Make tab tooltips optional
2015-01-10 20:13:35 -06:00
DarkPhoenix
731477b366 Open fit upon importing 2015-01-11 00:43:05 +03:00
Anton Vorobyov
0295f04ec4 Merge pull request #243 from blitzmann/issue-156
Fix #156
2015-01-10 18:21:30 +03:00
blitzmann
059af217aa Fix #246 2015-01-08 15:04:22 -05:00
Ryan Holmes
2a391fa38b Merge pull request #242 from blitzmann/issue-233
Fix #233
2015-01-08 13:26:26 -06:00
Ryan Holmes
88b1426fe0 Merge pull request #232 from blitzmann/progress
Port custom wait dialog to wx.ProgressDialog
2015-01-08 12:15:05 -06:00
blitzmann
07da5aa861 Resolve #245 - Adding tooltips to fitting columns 2015-01-08 12:39:16 -05:00
blitzmann
192d6f4605 Fix #156 2015-01-05 22:50:33 -05:00
blitmann
487f65d62b Fix #233 2015-01-04 17:19:53 -06:00
Stefan Ott
c202aefd2e Reverted accidentally committed change 2015-01-02 17:06:26 +01:00
Stefan Ott
0ed91e4079 Fixed code formatting 2015-01-02 17:04:10 +01:00
Stefan Ott
9c2a667635 Made tab tooltips optional 2015-01-02 16:55:05 +01:00
blitzmann
19579fb087 Implement middle click to offline modules 2014-12-31 20:18:16 -05:00
blitzmann
ea77e6851e Fix #238 2014-12-31 20:07:36 -05:00
blitzmann
1c3f9ccf5b Fix #240 2014-12-31 19:57:10 -05:00
blitzmann
e42671fbec Workaround for seg fault (see comments in pull request # 232) 2014-12-31 16:20:25 -05:00
blitzmann
18c86daea6 Do not include rigs in skill requirement checks 2014-12-30 21:08:55 -05:00
blitzmann
c59b818677 Add wx.ProgressDialog to HTML export, along with some documentation and silent try-except in HTML export 2014-12-19 00:13:06 -05:00
Ryan Holmes
71bf1556a1 Fix column name in upgrade3 migration script 2014-12-19 00:02:39 -05:00
blitzmann
26e50f2e8a Implement ProgressDialog for fit file imports (EVE XML / EFT cfg).
To make it simpler, changed the way fits are imported and saved from a per-file basis (process file->save fits->process file->save fits) to a per-batch basis (process file->process file -> save all fits).
2014-12-17 21:36:42 -05:00
blitzmann
25e30672fe Start conversion of various wait dialogs to wx.ProgresDialog. Implemented new wx.ProgresDialog for fitting backup 2014-12-15 20:01:03 -05:00
DarkPhoenix
e8268633e3 Merge branch 'master' into wx3
Used code from the master on conflicts
2014-12-15 15:45:33 +03:00
blitzmann
1b3c058eab Put XML export in a try-except block so that a failed export of 1 fit doesn't crash the whole process 2014-12-13 20:12:24 -05:00
blitzmann
adcae42ae7 Goodbye CREST support, we hardly used ya! (close #201) 2014-12-13 19:03:22 -05:00
blitzmann
238712e62c Add consumption info for siege/cyno module in misc column (resolves #219) 2014-12-13 18:39:06 -05:00
Ryan Holmes
f2b959895e Merge pull request #227 from unpoetical/master
Show amount over limit on pg/cpu/drone displays
2014-12-12 19:04:41 -05:00
blitzmann
ffb7719937 Fix #228 - missing Heretic effect 2014-12-12 18:49:00 -05:00
DarkPhoenix
3c1bf22e87 Merge branch 'master' into wx3 2014-12-12 14:42:25 +03:00
unpoetical
e0488dce4f Update powergrid, CPU, drone bandwidth, and drone bay displays to show remaining units so I don't have to do math. Could affect other gauge displays? 2014-12-11 22:15:50 -08:00
blitzmann
88074c8516 Fix fonts and lag with OS X 2014-12-11 23:25:44 -05:00
blitzmann
359840aee8 bump dev 2014-12-11 23:13:04 -05:00
blitzmann
77e3a0f666 Bump Stable 2014-12-11 14:39:01 -05:00
blitzmann
3d4eef2466 Fix #197, again 2014-12-11 11:34:21 -05:00
blitzmann
663cf7104c Fix #226, as well as another bug with coloring rack that had too many modules 2014-12-11 10:37:07 -05:00
blitzmann
0d6a55dcb6 Fix #224 2014-12-10 22:09:46 -05:00
blitzmann
85608616dd readjust some mode logic 2014-12-10 22:04:12 -05:00
blitzmann
d5ce666d8d Fix #225 - set mode whenever the ship is set. 2014-12-10 21:54:26 -05:00
blitzmann
2bff11e5ab bump dev 2014-12-09 19:31:01 -05:00
blitzmann
5adaaac75e Bump release 2014-12-09 18:50:34 -05:00
blitzmann
a49269b759 Edit effect headers and fix effects script 2014-12-09 18:49:40 -05:00
blitzmann
a96efaee1a Revert "Bump release", forgot effect headers 2014-12-09 18:49:10 -05:00
blitzmann
299de38bf6 Bump release 2014-12-09 18:37:24 -05:00
DarkPhoenix
b29019f0a7 Restore old race detection mechanism, but new has priority over it
Few unique ships still have no factionID
2014-12-10 01:13:58 +03:00
DarkPhoenix
da15b63831 Fix race detection 2014-12-10 01:01:51 +03:00
DarkPhoenix
20b2f1e5fc Merge branch 'singularity' 2014-12-09 23:39:57 +03:00
blitzmann
f1cdabf37c Fix bullets in traits 2014-12-08 23:10:55 -05:00
blitzmann
94e1c7aba3 Fix more bindings 2014-12-08 15:10:45 -05:00
blitzmann
797db36a42 Fix menu spawning when no fit open 2014-12-08 12:26:51 -05:00
blitzmann
ac18c58a0a fix menu bindings 2014-12-08 12:12:50 -05:00
Anton Vorobyov
281850d7df Merge pull request #214 from blitzmann/singularity 2014-12-08 03:05:04 +03:00
blitzmann
2e460adbc9 Add drone volleys 2014-12-04 21:08:41 -05:00
blitzmann
5660b2b8ed Add missing icons 2014-12-02 18:57:33 -05:00
blitzmann
de9fbd672f Fix scripts for t3 tactical modes 2014-12-02 18:33:59 -05:00
blitzmann
85029f6be8 Add mode to blanks list to avoid exception in module operations 2014-12-02 14:52:56 -05:00
blitzmann
337db326fd Add Mode and separation to fitting list.
Todo: A few exceptions are thrown when trying to remove mode via double click, spawn context menu, move to a different position, etc. All simply because Mode is not a Module. Will need to add try-except blocks to cover these instances
2014-12-02 14:33:47 -05:00
blitzmann
795230dae6 Quick fix for game version bug when running jsonToSql 2014-12-02 12:53:02 -05:00
blitzmann
022a929399 Fix initial mode assignment 2014-12-02 12:31:10 -05:00
blitzmann
b64238634a Merge branch 'master' into singularity
Conflicts:
	gui/builtinContextMenus/__init__.py
2014-12-02 02:50:27 -05:00
blitzmann
4b0e0300ad Fix path for .git directory 2014-12-02 02:48:50 -05:00
blitzmann
7762bb365f Set debug back to False 2014-12-02 02:45:46 -05:00
blitzmann
dfec7d8fa2 Added new skinned ships to conversions 2014-12-02 02:42:05 -05:00
blitzmann
5c5ec60efd Bowhead effects 2014-12-02 02:28:54 -05:00
blitzmann
2a7e35ff6f Fix exception with non-t3-dessys context menu 2014-12-02 02:15:01 -05:00
blitzmann
d7ab709d52 Add EVE version to about box 2014-12-02 01:35:30 -05:00
blitzmann
831478e034 Finish effects for Confessor 2014-12-02 01:15:06 -05:00
blitzmann
d0b5f3ad78 Fixed Confessor Prop mode effects and added Defense / Sharpshooter mode effects 2014-12-02 00:50:02 -05:00
blitzmann
190c1f135f Add slot modifiers to misc column for subsystems 2014-11-30 22:36:52 -05:00
blitzmann
374d6d6d34 Publish other modes to market 2014-11-30 16:59:55 -05:00
blitzmann
edbdaf5631 Add .Check() to tactical mode menu items 2014-11-30 16:56:43 -05:00
blitzmann
23a71e7448 Implement service layer mode setter. Modes now have basic support and testing.
Also decided to have two separate functions that return the mode items as Items or Modes. Returning them as Items makes it easier to check if provided modeID from user database is valid (since we cannot easily map the modeID to create a Mode), returning as Modes allows us to easily use them for setters. There's probably a better way to do this, but w/e
2014-11-30 16:43:15 -05:00
blitzmann
892c5c5b60 Various event binding fixes for context menus. It's still a mess, but it's not as bad of a mess.
(cherry picked from commit 081e32da6f)
2014-11-30 01:19:10 -05:00
blitzmann
081e32da6f Various event binding fixes for context menus. It's still a mess, but it's not as bad of a mess. 2014-11-30 01:14:47 -05:00
blitzmann
7100e8997b Merge branch 'master' into singularity 2014-11-29 21:53:22 -05:00
blitzmann
9a8642e789 Fix more paths 2014-11-29 20:57:44 -05:00
blitzmann
a565abe6f7 Added script to automate json dump, sql convert, and diff prep. Also adds metadata to eve.db 2014-11-29 20:50:34 -05:00
blitzmann
b93b59fe4d Add windows installer generation to dist.py 2014-11-29 20:49:58 -05:00
blitzmann
9782ca3a29 Improvements on distributable generator 2014-11-29 20:49:40 -05:00
blitzmann
f9fd894c9f Rename nighty to dist and fix path in itemDiff 2014-11-29 20:49:27 -05:00
blitzmann
ee8395e8fd Fix paths 2014-11-29 20:49:10 -05:00
blitzmann
7836506444 Move scripts directory 2014-11-29 20:48:58 -05:00
blitzmann
8df7593223 Moved compat.py to new dir utils/ and also added timer class 2014-11-29 20:47:53 -05:00
blitzmann
8351b0fc9d Fix gitignore 2014-11-29 20:46:16 -05:00
blitzmann
88ee1d60be Fix loading of mode, and add some (untested) setting functions 2014-11-29 02:58:43 -05:00
blitzmann
dda1494b90 Added method to check/get modes, and start GUI integration (simple context menu) 2014-11-28 01:23:44 -05:00
blitzmann
f53384c4c2 Preliminary backend support for tactical destroyer modes.
* Modifies fits table to add "mode" column, which contains typeID of mode for fit
* Introduces Mode type, similar to Ship and Module type
* Includes effects for Amarr Tactical Destroyer Propulsion Mode

Still a lot to do: GUI switching, constraints on which ships get modes, etc
2014-11-27 23:23:24 -05:00
blitzmann
d4af877e47 Update to 848581 2014-11-27 23:15:45 -05:00
blitzmann
5242c6df60 Fix #192
If price is not valid, cancel it out. This will force an update.
2014-11-25 23:54:24 -05:00
blitzmann
8c1d14ec4a Add version to title bar 2014-11-21 13:39:14 -05:00
blitzmann
f187caa549 Reduce minimum vertical size 2014-11-20 13:00:57 -05:00
blitzmann
70d52fd0b2 Moved price update info to header 2014-11-20 12:27:32 -05:00
blitzmann
222ee22fe3 Ability to remove Cargo from context menu 2014-11-20 00:45:30 -05:00
blitzmann
76f1f217e1 Implements forced price refresh (resolves #196) 2014-11-20 00:29:53 -05:00
blitzmann
6f42e7c286 Bump dev version 2014-11-18 20:05:25 -05:00
blitzmann
aab2ec5f96 Bump to Stable 2014-11-18 19:04:59 -05:00
blitzmann
9831ed5c3d Fix old migrations 2014-11-18 18:55:03 -05:00
Ryan Holmes
399ec7d009 Update README.md 2014-11-13 18:07:50 -05:00
Ryan Holmes
bf91e82813 Rename readme.md to README.md 2014-11-13 18:02:14 -05:00
Ryan Holmes
7ca1fc4cfb Merge pull request #202 from danmane/master
Change README to Markdown
2014-11-13 18:01:52 -05:00
Daniel Mane
3f86d3c33d Fix syntax 2014-11-13 10:47:16 -08:00
Daniel Mane
fd1dc5b4e2 Move README to Markdown so it gets displayed better in Github UI 2014-11-13 10:45:23 -08:00
blitzmann
05c73d1b1b If something happens and an error happens, return so that status is not reset later on 2014-11-13 11:18:44 -05:00
blitzmann
7a6e3ac665 Fix #199 2014-11-13 11:06:15 -05:00
DarkPhoenix
9de8fe5884 Fix graphs for drones (#197) 2014-11-11 00:40:31 +03:00
blitzmann
ff55f2817b Fix for collapsible stats panels 2014-11-08 18:17:57 -05:00
Gleb Golubitsky
198ee8d129 Icon column size bumped to 24
Signed-off-by: Gleb Golubitsky <sectoid@gnolltech.org>
2014-11-08 17:33:37 +02:00
Gleb Golubitsky
7db13bd3ba Fixed ChromeTabs not rendering properly in wx 3.0
Signed-off-by: Gleb Golubitsky <sectoid@gnolltech.org>
2014-11-08 17:33:04 +02:00
blitzmann
5be0d4b70e Added version selection logic 2014-11-08 16:45:09 +02:00
blitzmann
a603a4359a Fixed font discrepancy from different wxPython versions. 2014-11-08 16:45:09 +02:00
blitzmann
b4f4024903 Fixed some bugs that blocked startup 2014-11-08 16:38:18 +02:00
blitzmann
df18651b4f Bump wxPython requirements 2014-11-08 16:38:18 +02:00
blitzmann
61197ec061 Fixed old variable name in docstring 2014-11-07 23:40:58 -05:00
blitzmann
9f2124ac9f Forgot to edit main comment =/ 2014-11-07 23:36:50 -05:00
blitzmann
dbacfc19f0 Reintroduced old migration path. 2014-11-07 23:25:51 -05:00
blitzmann
6fafe40f35 Fix for a fix that was removed with a fix (see #62) 2014-11-07 23:17:14 -05:00
DarkPhoenix
7641384aba Remove unused import 2014-11-07 12:52:01 +03:00
DarkPhoenix
15087a290a Add proper support of attribute value limit
This fixes issue with blighted/polarized weapons getting resistances down to negative values
2014-11-07 12:49:34 +03:00
DarkPhoenix
cb27efd5e1 Mark next development cycle 2014-11-07 01:33:57 +03:00
DarkPhoenix
091935259a Bump version and mark as stable 2014-11-07 01:08:57 +03:00
DarkPhoenix
1fca17f5dd Do not add time to misc column for ASB/AAR when factor reload time is turned on, fixes #123 2014-11-06 23:51:37 +03:00
DarkPhoenix
98cac2a0da Penalize speed ganglinks against overheat on module itself (fixes #170) 2014-11-06 23:17:44 +03:00
DarkPhoenix
c28e52f2d1 Disable global ammo picker until we find alternative solution to using it (RMB or modifier keys for regular ammo picker) 2014-11-06 23:02:16 +03:00
DarkPhoenix
36df6878e8 Remove couple of skinned variations from ship browser 2014-11-06 02:45:26 +03:00
DarkPhoenix
7077261fe1 Work around EVE bug (Assault Frigs have raceID assigned) and make race detection to cope with 3+ skill reqs better overall, which fixes race detection for revenant and alike 2014-11-06 02:42:05 +03:00
DarkPhoenix
89052edda2 Commit new Phoebe effect files 2014-11-06 02:22:06 +03:00
DarkPhoenix
e60b677b3f Update to Phoebe 1.0 data 2014-11-06 02:17:29 +03:00
DarkPhoenix
bf5c443053 Fix command processors - they used to allow to have 2 more ganglinks online 2014-11-05 22:03:43 +03:00
DarkPhoenix
d298ed8e01 Fix for new ammo picker (which borked resistance profile selector) 2014-11-05 22:00:55 +03:00
Ryan Holmes
28f2644a15 Merge pull request #189 from Headpigeon/master
Global Charge Switcher
2014-11-04 10:30:20 -05:00
Headpigeon
635e684c3a Added module context menu entry for changing charges on all modules of same type at once (no need to manually select them) 2014-11-02 19:12:03 +01:00
DarkPhoenix
d991048be3 Fix crash on opening stats for items w/o traits 2014-10-30 14:12:37 +03:00
blitzmann
69e99d98c2 Fix minor formatting consistency issue for gauge tooltip 2014-10-26 00:24:40 -04:00
blitzmann
20362d2c0c Added thousands separators to price tooltip 2014-10-26 00:18:54 -04:00
blitzmann
2e1d0c43a1 Added agility and mass to align time tooltip 2014-10-26 00:13:22 -04:00
DarkPhoenix
f78e2ed405 Adapt pyfa scripts to latest Phobos changes 2014-10-25 17:39:33 +04:00
blitzmann
23906d5824 Fix #126 2014-10-14 00:10:47 -04:00
blitzmann
41a67bfae2 Fix some inconsistent behavior and a possible issue with adding a GUI element twice 2014-10-03 23:35:56 -04:00
blitzmann
df58614674 Fix #180 2014-10-03 23:13:12 -04:00
blitzmann
90369b679c Fix #179 2014-10-03 21:25:28 -04:00
blitzmann
fed7107857 Implement better system for item conversions / definitions 2014-10-03 00:32:05 -04:00
blitzmann
4a2223323d Bump dev version 2014-10-01 18:21:45 -04:00
blitzmann
0bbc35cd1b Bump to v1.5.1 stable, fix for #176 (pyfa update breaks skeletons) 2014-10-01 17:43:54 -04:00
blitzmann
9b8c1ff3ba Bump dev cycle 2014-09-30 21:56:54 -04:00
blitzmann
3394fabfc8 Bump to stable version 2014-09-30 19:37:23 -04:00
blitzmann
1bdfd7f924 Those who keep up with dev branch had issues with new migrations. 2014-09-30 18:03:04 -04:00
blitzmann
b69a46f9b1 Update to Oceanus 1.0 2014-09-30 13:28:56 -04:00
blitzmann
c17579505c Merge branch 'singularity' 2014-09-30 13:28:08 -04:00
blitzmann
2f990b9de2 Add auto backup when migrating data 2014-09-30 13:20:51 -04:00
blitzmann
c9f33f200d Fix #119 2014-09-29 16:20:59 -04:00
blitzmann
4abde609d8 Remove old effects, and modify current effects using new header with real effect name 2014-09-29 14:20:12 -04:00
blitzmann
9c09cef783 Added option to automatically remove unused effects with --remove flag 2014-09-29 14:09:56 -04:00
blitzmann
7570fee97b Include real effect name in effect file comments to assist with debugging 2014-09-29 14:02:05 -04:00
blitzmann
22e8330045 Add Scram effect (does not include projection effects) 2014-09-29 13:43:21 -04:00
blitzmann
98c37a253f Fix background color on fleet view on Linux 2014-09-29 11:38:49 -04:00
blitzmann
a931d46cb0 Implement open fit context item for projected fits 2014-09-29 01:02:00 -04:00
blitzmann
f4de596193 Add Oceanus module conversions to market item overrides 2014-09-28 02:54:36 -04:00
blitzmann
973a081e8d Update to 829786 2014-09-28 02:08:33 -04:00
blitzmann
3054ac9d90 Introduce new migration procedure.
This creates a new migration module that include upgrade logic files, one file for each DB version. It should be noted that this will not support downgrades (the previous method didn't really support them either)
2014-09-28 00:14:10 -04:00
blitzmann
4ea2636788 Fix #171 2014-09-21 23:44:19 -04:00
Ryan Holmes
b5f2df58ce Merge pull request #168 from blitzmann/161-effDps
Implement effective DPS
2014-09-19 19:18:20 -04:00
blitzmann
6d15645198 Added some docs to chrome tabs, and removed / commented some slight redundancies as well as style tweaks 2014-09-19 00:07:55 -04:00
blitzmann
a1bd671d89 Give a bit more horizontal room for fleet view (more work needs to be done - looks like crap on gtk) 2014-09-19 00:05:27 -04:00
blitzmann
aba5d43fc7 Added some docs ChromeTabs and did some cleaning 2014-09-17 19:00:09 -04:00
blitzmann
c903dff8ad Removed debugging prints 2014-09-15 18:02:49 -04:00
blitzmann
35d5c49745 Allow us to select target resist after creating / renaming it 2014-09-15 16:11:30 -04:00
blitzmann
030e6aa9db Instead of sending id, send parent item (which contains ID). This allows us to access the item to modify bitmap or any other value for it. 2014-09-15 15:48:26 -04:00
blitzmann
cc770898d9 Fixes issue where cargo is not copied with fit 2014-09-14 17:46:14 -04:00
blitzmann
8e383a085e Enable Ctrl+Page(Up/Down) for fitting tab navigation 2014-09-13 00:32:00 -04:00
blitzmann
5fef07a552 Fix background color for empty fitting view on Linux (and osx?) 2014-09-13 00:14:30 -04:00
DarkPhoenix
72e272084e Fix #159
Added all new system-wide effects as postMul, removed penalty group for cases where in coincides with 'default' group (e.g. it's also postMul for turret damage mods)
2014-09-09 19:54:38 +04:00
Anton Vorobyov
a2499cc070 Merge pull request #160 from blitzmann/fix-159
Fixes for stacking penalties for various wormhole effects
2014-09-09 19:16:42 +04:00
DarkPhoenix
c262acd0dc RR drone rigs are penalized 2014-09-09 15:44:21 +04:00
blitzmann
da047106f3 Implements support for child menus for damage patterns. 2014-09-08 01:11:38 -04:00
blitzmann
c04bb8f82c Greatly simplified target resists menu logic. Also added active bitmap 2014-09-04 00:23:41 -04:00
blitzmann
bb16e649af Added message to damage profile export 2014-09-03 18:45:04 -04:00
blitzmann
035443b4ff We now use EFT-style import/exports for damage profiles.
Also, percentages now shown next to damage amount instead of foot (where notifications are going)
2014-09-03 14:56:44 -04:00
blitzmann
0e10ac3928 Damage Pattern editor cleanup / GUI improvements 2014-09-03 13:52:42 -04:00
blitzmann
f0473f1eab Added support to show errors for resist imports, as well as many improvements to GUI logic. 2014-09-03 12:52:05 -04:00
blitzmann
a95eabac7b TargetResists: drones work. Also cleaned up redundancy in module.damageStats() 2014-09-03 01:37:59 -04:00
blitzmann
1ab76a7170 Commit initial work for effect DPS / Target resists 2014-09-03 00:49:53 -04:00
blitzmann
53c4a31334 Fix Guided Missile Precision skill for Citadel missiles 2014-08-30 13:07:18 -04:00
blitzmann
f02be0b0fd Update Notifications: Sort release results by published date before iterating 2014-08-28 20:34:16 -04:00
blitzmann
0524b901f5 Fixes for stacking penalties for various wormhole effects 2014-08-27 23:12:30 -04:00
blitzmann
d5a701ab31 If in debug mode, open effect file when double clicking effect (windows only) 2014-08-27 21:29:04 -04:00
DarkPhoenix
55c7488a0d Update ship icons 2014-08-27 02:52:25 +04:00
DarkPhoenix
8c8cf05207 Add icons for AT12 prize ships and move them to limited issue category 2014-08-27 02:34:19 +04:00
DarkPhoenix
ab9822b37e Bump version to indicate next development cycle 2014-08-27 01:21:49 +04:00
DarkPhoenix
4e5f27a643 Bump version for stable release 2014-08-27 00:44:25 +04:00
DarkPhoenix
92c9e1afc3 Fix black hole missile velocity effect 2014-08-27 00:13:59 +04:00
DarkPhoenix
e6e503f9e8 Merge branch 'master' of github.com:DarkFenX/Pyfa 2014-08-27 00:03:18 +04:00
DarkPhoenix
578716767f Hide tournament MJU 2014-08-27 00:02:39 +04:00
blitzmann
ec083428da Fit search shortcut: Fix focus issues for Linux 2014-08-26 16:01:39 -04:00
DarkPhoenix
f57c18810e Fix broken refresh button in item stats view 2014-08-26 23:59:05 +04:00
DarkPhoenix
5d4c0b443e Added couple of vanity variations (which are not so vanity - their stats differ from original) to limited issue group 2014-08-26 23:20:23 +04:00
DarkPhoenix
b89f55c675 Remove obsolete scripts 2014-08-26 22:59:23 +04:00
DarkPhoenix
81d991b48d Update database to 820762 2014-08-26 22:57:48 +04:00
DarkPhoenix
944bc971bd Update chatroom to the one we're actually using 2014-08-26 22:53:48 +04:00
DarkPhoenix
cf44af3586 Merge branch 'master' into singularity 2014-08-26 22:47:50 +04:00
DarkPhoenix
3e70a6fd7c Fix #139 (Compare Charges mismatch) 2014-08-26 18:19:39 +04:00
blitzmann
59be18506c Added "Open in Ship Browser" to fitting context menu, and modified a bit of the history logic in shipBrowser. 2014-08-19 23:50:10 -04:00
Ryan Holmes
b1bf14de29 Merge pull request #155 from blitzmann/network
Network service, other things - Resolves #135
2014-08-19 16:50:32 -04:00
blitzmann
2dd8453bbb Give itemStat width more room on GTK, resolves #113 2014-08-19 16:22:37 -04:00
blitzmann
4e61d1b17a Update 818790 2014-08-19 09:00:54 -04:00
blitzmann
458e89a534 Fixes #154 2014-08-18 17:46:51 -04:00
blitzmann
493bf5cb0d Merge remote-tracking branch 'origin/master' 2014-08-18 01:24:04 -04:00
Ryan Holmes
0032163a38 Merge pull request #152 from DarkFenX/jams
Adds "Chance to Jam" to Sensor Strength tooltip, resolves #114
2014-08-18 01:20:06 -04:00
blitzmann
84ac71f528 Fixed bugs introduced from code consistency fix 2014-08-18 01:10:49 -04:00
blitzmann
e8041470c8 Remove / disable debugging prints 2014-08-17 23:40:22 -04:00
blitzmann
8928d394c0 Updates "update" prefs to reflect new changes 2014-08-17 23:27:07 -04:00
blitzmann
0881abae7b Moves price fetching to new service as well as removes old and defunct c0rporation price source (along with much of the price fetching logic used to support multiple sources) 2014-08-17 21:47:07 -04:00
blitzmann
0686b602c6 Adds network toggling to the preferences, as well as a few tweaks to network service 2014-08-15 01:00:31 -04:00
blitzmann
fa5edbb804 Fix reference to old eveapi 2014-08-14 22:52:55 -04:00
blitzmann
1279b20370 Some (bad) network error handling logic, borrowed from eveapi 2014-08-14 22:52:27 -04:00
blitzmann
ed1b9854a0 Modify eveapi to work with pyfa service, move all character API calls from EOS to Character service and use new network service 2014-08-14 11:44:50 -04:00
blitzmann
4fe80b7554 Implement new network service for: Updates, CREST. 2014-08-14 11:43:25 -04:00
blitzmann
a5773a3fd6 Update to eveapi 1.3.0, and move to service. 2014-08-14 01:59:03 -04:00
blitzmann
ca61be2476 Bump SISI version 2014-08-11 17:14:23 -04:00
Ryan Holmes
ae02e214f0 Add effects up to 8.47.816656 2014-08-11 21:06:09 +00:00
blitzmann
a0093d9760 Update to EVE 8.47.816656 2014-08-11 14:03:44 -04:00
blitzmann
11891340af Merge branch 'linux' 2014-08-11 13:31:35 -04:00
blitzmann
e60735a1f2 wxGTK itemStats Improvements: fixes button sizes, removes first column size on effects and increases second colum to prevent clipping
with window borders.
2014-08-11 02:15:34 -04:00
blitzmann
ce3772ecee Set a min size for character selection. This prevents the character selector from stretching the entire stats panel with long character names 2014-08-11 01:27:47 -04:00
blitzmann
9e5f119248 Reduces icon opacity of "Empty Groups" toggle dependant on filtering state. 2014-08-10 17:21:48 -04:00
blitzmann
1315f8d8ed Adds prices to Drone and Cargo bay. Also removed redundant and broken columns in drone bay 2014-08-08 10:46:58 -04:00
blitzmann
bec61e43ae Only do overload effect if not projecting (otherwise overload bonus is applied twice) 2014-08-07 23:09:03 -04:00
blitzmann
d29b4d91e9 Adds "Chance to Jam" to Sensor Strength tooltip 2014-08-07 22:47:59 -04:00
blitzmann
356c741e54 Fixes #151 2014-08-07 21:13:18 -04:00
blitzmann
04f52f1f86 Adds Deployables to market / search 2014-08-06 15:16:37 -04:00
blitzmann
c7042f314b Code consistency 2014-07-31 00:14:29 -04:00
blitzmann
dd27c3c805 Set files to 644 besides pyfa.py and scripts 2014-07-30 21:23:27 -04:00
Ryan Holmes
9685d15e61 Merge pull request #149 from blitzmann/issue-134
Introduces empty group filtering to ship browser: stage 1
2014-07-30 16:07:08 -04:00
blitzmann
b31d14158f Added caching to empty group filtering
Stage 2 now sums total fittings in category and sets the cache to True if t_fits > 0
Stage 3 sets the cache to True if number of fits for ship > 0. This takes care of creating new fits

If fit is deleted, and there are no other fits for the ship, it reverts back to stage 2, which should set the correct value in the cache
2014-07-30 16:00:38 -04:00
blitzmann
b3b62fcecc Introduces empty group filtering to ship browser stage 1 2014-07-30 00:40:55 -04:00
DarkPhoenix
51063ef758 Fix #144 (mindlink bonus is not applied anymore when SI link bonus is applied) 2014-07-27 12:10:50 +04:00
blitzmann
f406d7da09 Added keyboard shortcut to toggle search box in market and ship browser 2014-07-24 22:37:20 -04:00
blitzmann
4f64ae9f85 Added "Last Updated" stat to HTML export, resolves #128 2014-07-23 23:04:02 -04:00
blitzmann
bdfa46cea2 Bump to dev version 2014-07-22 20:36:37 -04:00
blitzmann
693d213ec1 Update to Crius 1.0 2014-07-22 14:08:59 -04:00
blitzmann
c76e4c8220 Fix #137 - TP and Webs affect DPS in graph 2014-07-21 15:57:00 -04:00
blitzmann
979539cb79 Fix #141 - Triage stacking not applying to shield boosts 2014-07-21 12:20:55 -04:00
DarkPhoenix
009956c301 Fix mistype in heron name and paste proper iteron V name 2014-06-19 23:29:51 +04:00
blitzmann
0b64dad408 Merge pull request #125 from akosiaris/damagetypesimport_blankline_fix
Fix blank lines in damage types import
2014-06-14 22:55:23 -04:00
blitzmann
032204bd53 Fix subsystem exports, resolves #130 2014-06-14 22:44:23 -04:00
blitzmann
55847adb41 Merge branch 'akosiaris_miningyeild' 2014-06-12 19:22:50 -04:00
blitzmann
e2abc51bbf Use small icon with mining yield / firepower toggle button 2014-06-12 19:22:29 -04:00
blitzmann
15ac9aca18 Use # charges instead of # shots when exporting loaded charges. Fixes #115 2014-06-12 01:59:44 -04:00
blitzmann
9cc70fd301 Bump to dev version 2014-06-12 01:59:34 -04:00
blitzmann
1cae335f65 Bump version 2014-06-11 19:15:14 -04:00
blitzmann
3c5538109d Instead of passing fitID to export service, pass the fit itself. Fixes #122 2014-06-11 18:56:40 -04:00
Alexandros Kosiaris
9de7585d33 Fix blank lines in damage types import
If the text variable contains blank lines like for example ending with a
newline character or having two consecutive newline characters the
fields dict is empty and DamagePattern fails with an Exception.

This closes #124
2014-06-11 11:02:58 +03:00
blitzmann
23044b5cdb Resolves #117 2014-06-06 21:31:08 -04:00
blitzmann
dea6ced052 Fixes #118 2014-06-05 15:07:13 -04:00
DarkPhoenix
c584d668b7 Bump version number for dev release 2014-06-04 01:42:38 +04:00
Alexandros Kosiaris
bd60733bfe Use a button to toggle between firepower/miningyield
Introduce a button on both firepowerViewFull and miningyieldViewFull
views that allows switching between the two. Work by destroying each
view and recreating/populating on every button press.
2014-06-02 19:46:45 +03:00
Alexandros Kosiaris
d08b1c8284 Calculate mining yields for module/drone
Following the weaponStats paradigm, add mining yield information
throughout the drone/module modules
2014-05-28 17:47:25 +03:00
Alexandros Kosiaris
28cfaf1702 Add mining yield view
Add a panel for displaying the mining yield. Display miner and drone
yield. Only create the frontend in this commit.
2014-05-28 17:47:25 +03:00
3708 changed files with 16993 additions and 8166 deletions

7
.gitignore vendored
View File

@@ -11,8 +11,13 @@
#Patch files
*.patch
#Personal
/saveddata
/saveddata/
#PyCharm
.idea/
#Pyfa file
pyfaFits.html
build/

View File

@@ -549,14 +549,14 @@ to collect a royalty for further conveying from those to whom you convey
the Program, the only way you could satisfy both those terms and this
License would be to refrain entirely from conveying the Program.
13. Use with the GNU General Public License.
13. Use with the GNU Affero General Public License.
Notwithstanding any other provision of this License, you have
permission to link or combine any covered work with a work licensed
under version 3 of the GNU General Public License into a single
under version 3 of the GNU Affero General Public License into a single
combined work, and to convey the resulting work. The terms of this
License will continue to apply to the part which is the covered work,
but the special requirements of the GNU General Public License,
but the special requirements of the GNU Affero General Public License,
section 13, concerning interaction through a network will apply to the
combination as such.

47
README.md Normal file
View File

@@ -0,0 +1,47 @@
# pyfa
![pyfa](https://cloud.githubusercontent.com/assets/3904767/10271512/af385ef2-6ade-11e5-8f67-52b8b1e4c797.PNG)
## What is it?
pyfa, short for **py**thon **f**itting **a**ssistant, allows you to create, experiment with, and save ship fittings without being in game. Open source and written in Python, it is available on any platform where Python 2.x and wxWidgets are available, including Windows, Mac OS X, and Linux.
## Latest Version and Changelogs
The latest version along with release notes can always be found on the projects [Releases](https://github.com/DarkFenX/Pyfa/releases) page. pyfa will notify you if you are running an outdated version.
## Installing
Windows and OS X users are supplied self-contained builds of pyfa that can be run without additional software. An `.exe` installer is also available for the Windows builds. There is no self-contained package for Linux users, which are expected to run pyfa through their distributions Python interpreter. However, there are a number of third-party packages available that handle the dependencies and updates for pyfa (for example, [pyfa for Arch Linux](https://aur.archlinux.org/packages/pyfa/)). Please check your distributions repositories.
## Requirements
If you wish to help with development or simply need to run pyfa through a Python interpreter, the following software is required:
* Python >= 2.6
* `wxPython` 2.8/3.0
* `sqlalchemy` >= 0.6
* `dateutil`
* `matplotlib` (for some Linux distributions, you may need to install separate wxPython bindings, such as `python-matplotlib-wx`)
## Bug Reporting
The preferred method of reporting bugs is through the projects GitHub Issues interface. Alternatively, posting a report in the pyfa thread on the official EVE Online forums is acceptable. Guidelines for bug reporting can be found on [this wiki page](https://github.com/DarkFenX/Pyfa/wiki/Bug-Reporting).
## Liscense
pyfa is licensed under the GNU GPL v3.0, see LICENSE
## Resources
* Development repository: [http://github.com/DarkFenX/Pyfa](http://github.com/DarkFenX/Pyfa)
* XMPP conference: [pyfa@conference.jabber.org](pyfa@conference.jabber.org)
* [EVE forum thread](http://forums.eveonline.com/default.aspx?g=posts&t=247609)
* [EVE University guide using pyfa](http://wiki.eveuniversity.org/Guide_to_using_PYFA)
* [EVE Online website](http://www.eveonline.com/)
## Contacts:
* Kadesh Priestess
* GitHub: @DarkFenX
* [TweetFleet Slack](https://www.fuzzwork.co.uk/tweetfleet-slack-invites/): @kadesh
* Sable Blitzmann
* GitHub: @blitzmann
* [TweetFleet Slack](https://www.fuzzwork.co.uk/tweetfleet-slack-invites/): @blitzmann
* Email: sable.blitzmann@gmail.com
## CCP Copyright Notice
EVE Online, the EVE logo, EVE and all associated logos and designs are the intellectual property of CCP hf. All artwork, screenshots, characters, vehicles, storylines, world facts or other recognizable features of the intellectual property relating to these trademarks are likewise the intellectual property of CCP hf. EVE Online and the EVE logo are the registered trademarks of CCP hf. All rights are reserved worldwide. All other trademarks are the property of their respective owners. CCP hf. has granted permission to Osmium to use EVE Online and all associated logos and designs for promotional and information purposes on its website but does not endorse, and is not in any way affiliated with, Osmium. CCP is in no way responsible for the content on or functioning of this website, nor can it be liable for any damage arising from the use of this website.

220
config.py
View File

@@ -1,86 +1,134 @@
import os
import sys
# Load variable overrides specific to distribution type
try:
import configforced
except ImportError:
configforced = None
# Turns on debug mode
debug = False
# Defines if our saveddata will be in pyfa root or not
saveInRoot = False
# Version data
version = "1.2.0"
tag = "stable"
expansionName = "Kronos"
expansionVersion = "1.0"
evemonMinVersion = "4081"
pyfaPath = None
savePath = None
staticPath = None
saveDB = None
gameDB = None
def defPaths():
global pyfaPath
global savePath
global staticPath
global saveDB
global gameDB
global saveInRoot
# The main pyfa directory which contains run.py
# Python 2.X uses ANSI by default, so we need to convert the character encoding
pyfaPath = getattr(configforced, "pyfaPath", pyfaPath)
if pyfaPath is None:
pyfaPath = unicode(os.path.dirname(os.path.realpath(os.path.abspath(
sys.modules['__main__'].__file__))), sys.getfilesystemencoding())
# Where we store the saved fits etc, default is the current users home directory
if saveInRoot is True:
savePath = getattr(configforced, "savePath", None)
if savePath is None:
savePath = os.path.join(pyfaPath, "saveddata")
else:
savePath = getattr(configforced, "savePath", None)
if savePath is None:
savePath = unicode(os.path.expanduser(os.path.join("~", ".pyfa")),
sys.getfilesystemencoding())
# 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)
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)
sys.stdout = open(os.path.join(savePath, "output_log.txt"), "w")
# Static EVE Data from the staticdata repository, should be in the staticdata
# directory in our pyfa directory
staticPath = os.path.join(pyfaPath, "staticdata")
# The database where we store all the fits etc
saveDB = os.path.join(savePath, "saveddata.db")
# The database where the static EVE data from the datadump is kept.
# This is not the standard sqlite datadump but a modified version created by eos
# maintenance script
gameDB = os.path.join(staticPath, "eve.db")
## DON'T MODIFY ANYTHING BELOW ##
import eos.config
#Caching modifiers, disable all gamedata caching, its unneeded.
eos.config.gamedataCache = False
# saveddata db location modifier, shouldn't ever need to touch this
eos.config.saveddata_connectionstring = "sqlite:///" + saveDB + "?check_same_thread=False"
eos.config.gamedata_connectionstring = "sqlite:///" + gameDB + "?check_same_thread=False"
import os
import sys
# TODO: move all logging back to pyfa.py main loop
# We moved it here just to avoid rebuilding windows skeleton for now (any change to pyfa.py needs it)
import logging
import logging.handlers
# Load variable overrides specific to distribution type
try:
import configforced
except ImportError:
configforced = None
# Turns on debug mode
debug = False
# Defines if our saveddata will be in pyfa root or not
saveInRoot = False
# Version data
version = "1.15.1"
tag = "git"
expansionName = "Vanguard"
expansionVersion = "1.0"
evemonMinVersion = "4081"
clientID = 'af87365240d644f7950af563b8418bad'
pyfaPath = None
savePath = None
saveDB = None
gameDB = None
class StreamToLogger(object):
"""
Fake file-like stream object that redirects writes to a logger instance.
From: http://www.electricmonk.nl/log/2011/08/14/redirect-stdout-and-stderr-to-a-logger-in-python/
"""
def __init__(self, logger, log_level=logging.INFO):
self.logger = logger
self.log_level = log_level
self.linebuf = ''
def write(self, buf):
for line in buf.rstrip().splitlines():
self.logger.log(self.log_level, line.rstrip())
def isFrozen():
if hasattr(sys, 'frozen'):
return True
else:
return False
def getPyfaRoot():
base = getattr(sys.modules['__main__'], "__file__", sys.executable) if isFrozen() else sys.argv[0]
root = os.path.dirname(os.path.realpath(os.path.abspath(base)))
root = unicode(root, sys.getfilesystemencoding())
return root
def __createDirs(path):
if not os.path.exists(path):
os.makedirs(path)
def defPaths():
global debug
global pyfaPath
global savePath
global saveDB
global gameDB
global saveInRoot
if debug:
logLevel = logging.DEBUG
else:
logLevel = logging.WARN
# The main pyfa directory which contains run.py
# Python 2.X uses ANSI by default, so we need to convert the character encoding
pyfaPath = getattr(configforced, "pyfaPath", pyfaPath)
if pyfaPath is None:
pyfaPath = getPyfaRoot()
# Where we store the saved fits etc, default is the current users home directory
if saveInRoot is True:
savePath = getattr(configforced, "savePath", None)
if savePath is None:
savePath = os.path.join(pyfaPath, "saveddata")
else:
savePath = getattr(configforced, "savePath", None)
if savePath is None:
savePath = unicode(os.path.expanduser(os.path.join("~", ".pyfa")),
sys.getfilesystemencoding())
__createDirs(savePath)
if isFrozen():
os.environ["REQUESTS_CA_BUNDLE"] = os.path.join(pyfaPath, "cacert.pem")
format = '%(asctime)s %(name)-24s %(levelname)-8s %(message)s'
logging.basicConfig(format=format, level=logLevel)
handler = logging.handlers.RotatingFileHandler(os.path.join(savePath, "log.txt"), maxBytes=1000000, backupCount=3)
formatter = logging.Formatter(format)
handler.setFormatter(formatter)
logging.getLogger('').addHandler(handler)
logging.info("Starting pyfa")
if hasattr(sys, 'frozen'):
stdout_logger = logging.getLogger('STDOUT')
sl = StreamToLogger(stdout_logger, logging.INFO)
sys.stdout = sl
# This interferes with cx_Freeze's own handling of exceptions. Find a way to fix this.
#stderr_logger = logging.getLogger('STDERR')
#sl = StreamToLogger(stderr_logger, logging.ERROR)
#sys.stderr = sl
# The database where we store all the fits etc
saveDB = os.path.join(savePath, "saveddata.db")
# The database where the static EVE data from the datadump is kept.
# This is not the standard sqlite datadump but a modified version created by eos
# maintenance script
gameDB = os.path.join(pyfaPath, "eve.db")
## DON'T MODIFY ANYTHING BELOW ##
import eos.config
#Caching modifiers, disable all gamedata caching, its unneeded.
eos.config.gamedataCache = False
# saveddata db location modifier, shouldn't ever need to touch this
eos.config.saveddata_connectionstring = "sqlite:///" + saveDB + "?check_same_thread=False"
eos.config.gamedata_connectionstring = "sqlite:///" + gameDB + "?check_same_thread=False"

BIN
dist_assets/mac/pyfa.icns Normal file

Binary file not shown.

BIN
dist_assets/win/pyfa.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 76 KiB

0
eos/__init__.py Executable file → Normal file
View File

21
eos/capSim.py Executable file → Normal file
View File

@@ -82,18 +82,25 @@ class CapSimulator(object):
if self.scale:
duration, capNeed = self.scale_activation(duration, capNeed)
if self.stagger:
duration = int(duration/amount)
else:
capNeed *= amount
period = lcm(period, duration)
# set clipSize to infinite if reloads are disabled unless it's
# a cap booster module.
if not self.reload and capNeed > 0:
clipSize = 0
if self.stagger:
if clipSize == 0:
duration = int(duration/amount)
else:
stagger_amount = (duration*clipSize+10000)/(amount*clipSize)
for i in range(1, amount):
heapq.heappush(self.state,
[i*stagger_amount, duration,
capNeed, 0, clipSize])
else:
capNeed *= amount
period = lcm(period, duration)
# period optimization doesn't work when reloads are active.
if clipSize:
disable_period = True

8
eos/config.py Executable file → Normal file
View File

@@ -1,11 +1,11 @@
import os.path
from os.path import realpath, join, dirname, abspath
import sys
debug = False
gamedataCache = True
saveddataCache = True
gamedata_connectionstring = 'sqlite:///' + os.path.expanduser(os.path.join("~", ".pyfa","eve.db"))
saveddata_connectionstring = 'sqlite:///:memory:'
gamedata_connectionstring = 'sqlite:///' + unicode(realpath(join(dirname(abspath(__file__)), "..", "eve.db")), sys.getfilesystemencoding())
saveddata_connectionstring = 'sqlite:///' + unicode(realpath(join(dirname(abspath(__file__)), "..", "saveddata", "saveddata.db")), sys.getfilesystemencoding())
#Autodetect path, only change if the autodetection bugs out.
path = os.path.dirname(unicode(__file__, sys.getfilesystemencoding()))
path = dirname(unicode(__file__, sys.getfilesystemencoding()))

14
eos/db/__init__.py Executable file → Normal file
View File

@@ -40,6 +40,15 @@ gamedata_meta = MetaData()
gamedata_meta.bind = gamedata_engine
gamedata_session = sessionmaker(bind=gamedata_engine, autoflush=False, expire_on_commit=False)()
# This should be moved elsewhere, maybe as an actual query. Current, without try-except, it breaks when making a new
# game db because we haven't reached gamedata_meta.create_all()
try:
config.gamedata_version = gamedata_session.execute(
"SELECT `field_value` FROM `metadata` WHERE `field_name` LIKE 'client_build'"
).fetchone()[0]
except:
config.gamedata_version = None
saveddata_connectionstring = config.saveddata_connectionstring
if saveddata_connectionstring is not None:
if callable(saveddata_connectionstring):
@@ -49,7 +58,6 @@ if saveddata_connectionstring is not None:
saveddata_meta = MetaData()
saveddata_meta.bind = saveddata_engine
migration.update(saveddata_engine)
saveddata_session = sessionmaker(bind=saveddata_engine, autoflush=False, expire_on_commit=False)()
# Lock controlling any changes introduced to session
@@ -66,7 +74,8 @@ from eos.db.saveddata.queries import getUser, getCharacter, getFit, getFitsWithS
getCharacterList, getPrice, getDamagePatternList, getDamagePattern, \
getFitList, getFleetList, getFleet, save, remove, commit, add, \
getCharactersForUser, getMiscData, getSquadsIDsWithFitID, getWing, \
getSquad, getBoosterFits, getProjectedFits
getSquad, getBoosterFits, getProjectedFits, getTargetResistsList, getTargetResists,\
clearPrices, countAllFits, getCrestCharacters, getCrestCharacter
#If using in memory saveddata, you'll want to reflect it so the data structure is good.
if config.saveddata_connectionstring == "sqlite:///:memory:":
@@ -75,3 +84,4 @@ if config.saveddata_connectionstring == "sqlite:///:memory:":
def rollback():
with sd_lock:
saveddata_session.rollback()

0
eos/db/gamedata/__init__.py Executable file → Normal file
View File

1
eos/db/gamedata/attribute.py Executable file → Normal file
View File

@@ -31,6 +31,7 @@ attributes_table = Table("dgmattribs", gamedata_meta,
Column("attributeID", Integer, primary_key = True),
Column("attributeName", String),
Column("defaultValue", Float),
Column("maxAttributeID", Integer, ForeignKey("dgmattribs.attributeID")),
Column("description", Unicode),
Column("published", Boolean),
Column("displayName", String),

0
eos/db/gamedata/category.py Executable file → Normal file
View File

0
eos/db/gamedata/effect.py Executable file → Normal file
View File

0
eos/db/gamedata/group.py Executable file → Normal file
View File

0
eos/db/gamedata/icon.py Executable file → Normal file
View File

6
eos/db/gamedata/item.py Executable file → Normal file
View File

@@ -30,6 +30,7 @@ items_table = Table("invtypes", gamedata_meta,
Column("typeName", String, index=True),
Column("description", String),
Column("raceID", Integer),
Column("factionID", Integer),
Column("volume", Float),
Column("mass", Float),
Column("capacity", Float),
@@ -53,9 +54,8 @@ mapper(Item, items_table,
"name" : synonym("typeName"),
"description" : deferred(items_table.c.description),
"traits" : relation(Traits,
primaryjoin = traits_table.c.typeID == items_table.c.typeID,
order_by = traits_table.c.typeID,
uselist = True)
primaryjoin = traits_table.c.typeID == items_table.c.typeID,
uselist = False)
})
Item.category = association_proxy("group", "category")

0
eos/db/gamedata/marketGroup.py Executable file → Normal file
View File

4
eos/db/gamedata/metaData.py Executable file → Normal file
View File

@@ -23,7 +23,7 @@ from eos.types import MetaData
from eos.db import gamedata_meta
metadata_table = Table("metadata", gamedata_meta,
Column("fieldName", String, primary_key=True),
Column("fieldValue", String))
Column("field_name", String, primary_key=True),
Column("field_value", String))
mapper(MetaData, metadata_table)

0
eos/db/gamedata/metaGroup.py Executable file → Normal file
View File

0
eos/db/gamedata/queries.py Executable file → Normal file
View File

View File

@@ -1,22 +1,11 @@
from sqlalchemy import Column, Table, Integer, String, ForeignKey, and_, select
from sqlalchemy.orm import mapper, column_property
from eos.types import Item, Traits
from sqlalchemy import Column, Table, Integer, String, ForeignKey
from sqlalchemy.orm import mapper
from eos.types import Traits
from eos.db import gamedata_meta
traits_table = Table("invtraits", gamedata_meta,
Column("typeID", Integer, ForeignKey("invtypes.typeID"), primary_key=True),
Column("skillID", Integer, ForeignKey("invtypes.typeID"), primary_key=True),
Column("bonusText", String, primary_key=True))
Column("traitText", String))
from .item import items_table
mapper(Traits, traits_table,
properties = {"skillName" : column_property(
select([items_table.c.typeName],
and_(
items_table.c.typeID == traits_table.c.skillID,
traits_table.c.skillID != -1
)))
});
mapper(Traits, traits_table);

0
eos/db/gamedata/unit.py Executable file → Normal file
View File

87
eos/db/migration.py Executable file → Normal file
View File

@@ -1,59 +1,40 @@
import sqlalchemy
import config
import shutil
import time
import re
import os
import migrations
def getVersion(db):
cursor = db.execute('PRAGMA user_version')
return cursor.fetchone()[0]
def getAppVersion():
return migrations.appVersion
def update(saveddata_engine):
checkPriceFailures(saveddata_engine)
checkApiDefaultChar(saveddata_engine)
checkFitBooster(saveddata_engine)
dbVersion = getVersion(saveddata_engine)
appVersion = getAppVersion()
def checkPriceFailures(saveddata_engine):
# Check if we have 'failed' column
try:
saveddata_engine.execute("SELECT failed FROM prices")
except sqlalchemy.exc.DatabaseError:
# As we don't have any important data there, let's just drop
# and recreate whole table
from eos.db.saveddata.price import prices_table
# Attempt to drop/create table only if it's already there
try:
prices_table.drop(saveddata_engine)
prices_table.create(saveddata_engine)
except sqlalchemy.exc.DatabaseError:
pass
if dbVersion == appVersion:
return
if dbVersion < appVersion:
# Automatically backup database
toFile = "%s/saveddata_migration_%d-%d_%s.db"%(
config.savePath,
dbVersion,
appVersion,
time.strftime("%Y%m%d_%H%M%S"))
def checkApiDefaultChar(saveddata_engine):
try:
saveddata_engine.execute("SELECT * FROM characters LIMIT 1")
# If table doesn't exist, it means we're doing everything from scratch
# and sqlalchemy will process everything as needed
except sqlalchemy.exc.DatabaseError:
pass
# If not, we're running on top of existing DB
else:
# Check that we have columns
try:
saveddata_engine.execute("SELECT defaultChar, chars FROM characters LIMIT 1")
# If we don't, create them
# This is ugly as hell, but we can't use proper migrate packages as it
# will require us to rebuild skeletons, including mac
except sqlalchemy.exc.DatabaseError:
saveddata_engine.execute("ALTER TABLE characters ADD COLUMN defaultChar INTEGER;")
saveddata_engine.execute("ALTER TABLE characters ADD COLUMN chars VARCHAR;")
shutil.copyfile(config.saveDB, toFile)
def checkFitBooster(saveddata_engine):
try:
saveddata_engine.execute("SELECT * FROM fits LIMIT 1")
# If table doesn't exist, it means we're doing everything from scratch
# and sqlalchemy will process everything as needed
except sqlalchemy.exc.DatabaseError:
pass
# If not, we're running on top of existing DB
else:
# Check that we have columns
try:
saveddata_engine.execute("SELECT booster FROM fits LIMIT 1")
# If we don't, create them
except sqlalchemy.exc.DatabaseError:
saveddata_engine.execute("ALTER TABLE fits ADD COLUMN booster BOOLEAN;")
# Set NULL data to 0 (needed in case of downgrade, see GH issue #62
saveddata_engine.execute("UPDATE fits SET booster = 0 WHERE booster IS NULL;")
for version in xrange(dbVersion, appVersion):
func = migrations.updates[version+1]
if func:
print "applying update",version+1
func(saveddata_engine)
# when all is said and done, set version to current
saveddata_engine.execute("PRAGMA user_version = {}".format(appVersion))

View File

@@ -0,0 +1,31 @@
"""
The migration module includes migration logic to update database scheme and/or
data for the user database.
To create a migration, simply create a file upgrade<migration number>.py and
define an upgrade() function with the logic. Please note that there must be as
many upgrade files as there are database versions (version 5 would include
upgrade files 1-5)
"""
import pkgutil
import re
updates = {}
appVersion = 0
prefix = __name__ + "."
for importer, modname, ispkg in pkgutil.iter_modules(__path__, prefix):
# loop through python files, extracting update number and function, and
# adding it to a list
modname_tail = modname.rsplit('.', 1)[-1]
module = __import__(modname, fromlist=True)
m = re.match("^upgrade(?P<index>\d+)$", modname_tail)
if not m:
continue
index = int(m.group("index"))
appVersion = max(appVersion, index)
upgrade = getattr(module, "upgrade", False)
if upgrade:
updates[index] = upgrade

View File

@@ -0,0 +1,97 @@
"""
Migration 1
- Alters fits table to introduce target resist attribute
- Converts modules based on Oceanus Module Tiericide
Some modules have been deleted, which causes pyfa to crash when fits are
loaded as they no longer exist in the database. We therefore replace these
modules with their new replacements
Based on http://community.eveonline.com/news/patch-notes/patch-notes-for-oceanus/
and output of itemDiff.py
"""
import sqlalchemy
CONVERSIONS = {
6135: [ # Scoped Cargo Scanner
6133, # Interior Type-E Cargo Identifier
],
6527: [ # Compact Ship Scanner
6525, # Ta3 Perfunctory Vessel Probe
6529, # Speculative Ship Identifier I
6531, # Practical Type-E Ship Probe
],
6569: [ # Scoped Survey Scanner
6567, # ML-3 Amphilotite Mining Probe
6571, # Rock-Scanning Sensor Array I
6573, # 'Dactyl' Type-E Asteroid Analyzer
],
509: [ # 'Basic' Capacitor Flux Coil
8163, # Partial Power Plant Manager: Capacitor Flux
8165, # Alpha Reactor Control: Capacitor Flux
8167, # Type-E Power Core Modification: Capacitor Flux
8169, # Marked Generator Refitting: Capacitor Flux
],
8135: [ # Restrained Capacitor Flux Coil
8131, # Local Power Plant Manager: Capacitor Flux I
],
8133: [ # Compact Capacitor Flux Coil
8137, # Mark I Generator Refitting: Capacitor Flux
],
3469: [ # Basic Co-Processor
8744, # Nanoelectrical Co-Processor
8743, # Nanomechanical CPU Enhancer
8746, # Quantum Co-Processor
8745, # Photonic CPU Enhancer
15425, # Naiyon's Modified Co-Processor (never existed but convert
# anyway as some fits may include it)
],
8748: [ # Upgraded Co-Processor
8747, # Nanomechanical CPU Enhancer I
8750, # Quantum Co-Processor I
8749, # Photonic CPU Enhancer I
],
1351: [ # Basic Reactor Control Unit
8251, # Partial Power Plant Manager: Reaction Control
8253, # Alpha Reactor Control: Reaction Control
8257, # Marked Generator Refitting: Reaction Control
],
8263: [ # Compact Reactor Control Unit
8259, # Local Power Plant Manager: Reaction Control I
8265, # Mark I Generator Refitting: Reaction Control
8261, # Beta Reactor Control: Reaction Control I
],
16537: [ # Compact Micro Auxiliary Power Core
16539, # Micro B88 Core Augmentation
16541, # Micro K-Exhaust Core Augmentation
],
31936: [ # Navy Micro Auxiliary Power Core
16543, # Micro 'Vigor' Core Augmentation
],
8089: [ # Compact Light Missile Launcher
8093, # Prototype 'Arbalest' Light Missile Launcher
],
8091: [ # Ample Light Missile Launcher
7993, # Experimental TE-2100 Light Missile Launcher
],
# Surface Cargo Scanner I was removed from game, however no mention of
# replacement module in patch notes. Morphing it to meta 0 module to be safe
442: [ # Cargo Scanner I
6129, # Surface Cargo Scanner I
]
}
def upgrade(saveddata_engine):
# Update fits schema to include target resists attribute
try:
saveddata_engine.execute("SELECT targetResistsID FROM fits LIMIT 1")
except sqlalchemy.exc.DatabaseError:
saveddata_engine.execute("ALTER TABLE fits ADD COLUMN targetResistsID INTEGER;")
# Convert modules
for replacement_item, list in CONVERSIONS.iteritems():
for retired_item in list:
saveddata_engine.execute('UPDATE "modules" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item))
saveddata_engine.execute('UPDATE "cargo" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item))

View File

@@ -0,0 +1,16 @@
"""
Migration 10
- Adds active attribute to projected fits
"""
import sqlalchemy
def upgrade(saveddata_engine):
# Update projectedFits schema to include active attribute
try:
saveddata_engine.execute("SELECT active FROM projectedFits LIMIT 1")
except sqlalchemy.exc.DatabaseError:
saveddata_engine.execute("ALTER TABLE projectedFits ADD COLUMN active BOOLEAN")
saveddata_engine.execute("UPDATE projectedFits SET active = 1")
saveddata_engine.execute("UPDATE projectedFits SET amount = 1")

View File

@@ -0,0 +1,21 @@
"""
Migration 2
- Includes old upgrade paths pre-1.5.0. See GH issue #190 for why this is needed
"""
import sqlalchemy
def upgrade(saveddata_engine):
# Update characters schema to include default chars
try:
saveddata_engine.execute("SELECT defaultChar, chars FROM characters LIMIT 1")
except sqlalchemy.exc.DatabaseError:
saveddata_engine.execute("ALTER TABLE characters ADD COLUMN defaultChar INTEGER")
saveddata_engine.execute("ALTER TABLE characters ADD COLUMN chars VARCHAR")
# Update fits schema to include booster attribute
try:
saveddata_engine.execute("SELECT booster FROM fits LIMIT 1")
except sqlalchemy.exc.DatabaseError:
saveddata_engine.execute("ALTER TABLE fits ADD COLUMN booster BOOLEAN")

View File

@@ -0,0 +1,13 @@
"""
Migration 3
- Adds mode column for fits (t3 dessy)
"""
import sqlalchemy
def upgrade(saveddata_engine):
try:
saveddata_engine.execute("SELECT modeID FROM fits LIMIT 1")
except sqlalchemy.exc.DatabaseError:
saveddata_engine.execute("ALTER TABLE fits ADD COLUMN modeID INTEGER")

View File

@@ -0,0 +1,141 @@
"""
Migration 4
- Converts modules based on Proteus Module Tiericide
Some modules have been unpublished (and unpublished module attributes are removed
from database), which causes pyfa to crash. We therefore replace these
modules with their new replacements
Based on http://community.eveonline.com/news/patch-notes/patch-notes-for-proteus/
and output of itemDiff.py
"""
CONVERSIONS = {
506: ( # 'Basic' Capacitor Power Relay
8205, # Alpha Reactor Control: Capacitor Power Relay
8209, # Marked Generator Refitting: Capacitor Power Relay
8203, # Partial Power Plant Manager: Capacity Power Relay
8207, # Type-E Power Core Modification: Capacitor Power Relay
),
8177: ( # Mark I Compact Capacitor Power Relay
8173, # Beta Reactor Control: Capacitor Power Relay I
),
8175: ( # Type-D Restrained Capacitor Power Relay
8171, # Local Power Plant Manager: Capacity Power Relay I
),
421: ( # 'Basic' Capacitor Recharger
4425, # AGM Capacitor Charge Array,
4421, # F-a10 Buffer Capacitor Regenerator
4423, # Industrial Capacitor Recharger
4427, # Secondary Parallel Link-Capacitor
),
4435: ( # Eutectic Compact Cap Recharger
4433, # Barton Reactor Capacitor Recharger I
4431, # F-b10 Nominal Capacitor Regenerator
4437, # Fixed Parallel Link-Capacitor I
),
1315: ( # 'Basic' Expanded Cargohold
5483, # Alpha Hull Mod Expanded Cargo
5479, # Marked Modified SS Expanded Cargo
5481, # Partial Hull Conversion Expanded Cargo
5485, # Type-E Altered SS Expanded Cargo
),
5493: ( # Type-D Restrained Expanded Cargo
5491, # Beta Hull Mod Expanded Cargo
5489, # Local Hull Conversion Expanded Cargo I
5487, # Mark I Modified SS Expanded Cargo
),
1401: ( # 'Basic' Inertial Stabilizers
5523, # Alpha Hull Mod Inertial Stabilizers
5521, # Partial Hull Conversion Inertial Stabilizers
5525, # Type-E Altered SS Inertial Stabilizers
),
5533: ( # Type-D Restrained Inertial Stabilizers
5531, # Beta Hull Mod Inertial Stabilizers
5529, # Local Hull Conversion Inertial Stabilizers I
5527, # Mark I Modified SS Inertial Stabilizers
5519, # Marked Modified SS Inertial Stabilizers
),
5239: ( # EP-S Gaussian Scoped Mining Laser
5241, # Dual Diode Mining Laser I
),
5233: ( # Single Diode Basic Mining Laser
5231, # EP-R Argon Ion Basic Excavation Pulse
5237, # Rubin Basic Particle Bore Stream
5235, # Xenon Basic Drilling Beam
),
5245: ( # Particle Bore Compact Mining Laser
5243, # XeCl Drilling Beam I
),
22619: ( # Frigoris Restrained Ice Harvester Upgrade
22617, # Crisium Ice Harvester Upgrade
),
22611: ( # Elara Restrained Mining Laser Upgrade
22609, # Erin Mining Laser Upgrade
),
1242: ( # 'Basic' Nanofiber Internal Structure
5591, # Alpha Hull Mod Nanofiber Structure
5595, # Marked Modified SS Nanofiber Structure
5559, # Partial Hull Conversion Nanofiber Structure
5593, # Type-E Altered SS Nanofiber Structure
),
5599: ( # Type-D Restrained Nanofiber Structure
5597, # Beta Hull Mod Nanofiber Structure
5561, # Local Hull Conversion Nanofiber Structure I
5601, # Mark I Modified SS Nanofiber Structure
),
1192: ( # 'Basic' Overdrive Injector System
5613, # Alpha Hull Mod Overdrive Injector
5617, # Marked Modified SS Overdrive Injector
5611, # Partial Hull Conversion Overdrive Injector
5615, # Type-E Altered SS Overdrive Injector
),
5631: ( # Type-D Restrained Overdrive Injector
5629, # Beta Hull Mod Overdrive Injector
5627, # Local Hull Conversion Overdrive Injector I
5633, # Mark I Modified SS Overdrive Injector
),
1537: ( # 'Basic' Power Diagnostic System
8213, # Alpha Reactor Control: Diagnostic System
8217, # Marked Generator Refitting: Diagnostic System
8211, # Partial Power Plant Manager: Diagnostic System
8215, # Type-E Power Core Modification: Diagnostic System
8255, # Type-E Power Core Modification: Reaction Control
),
8225: ( # Mark I Compact Power Diagnostic System
8221, # Beta Reactor Control: Diagnostic System I
8219, # Local Power Plant Manager: Diagnostic System I
8223, # Type-D Power Core Modification: Diagnostic System
),
1240: ( # 'Basic' Reinforced Bulkheads
5677, # Alpha Hull Mod Reinforced Bulkheads
5681, # Marked Modified SS Reinforced Bulkheads
5675, # Partial Hull Conversion Reinforced Bulkheads
5679, # Type-E Altered SS Reinforced Bulkheads
),
5649: ( # Mark I Compact Reinforced Bulkheads
5645, # Beta Hull Mod Reinforced Bulkheads
),
5647: ( # Type-D Restrained Reinforced Bulkheads
5643, # Local Hull Conversion Reinforced Bulkheads I
),
}
def upgrade(saveddata_engine):
# Convert modules
for replacement_item, list in CONVERSIONS.iteritems():
for retired_item in list:
saveddata_engine.execute('UPDATE "modules" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item))
saveddata_engine.execute('UPDATE "cargo" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item))

View File

@@ -0,0 +1,8 @@
"""
Migration 5
Simply deletes damage profiles with a blank name. See GH issue #256
"""
def upgrade(saveddata_engine):
saveddata_engine.execute('DELETE FROM damagePatterns WHERE name LIKE ?', ("",))

View File

@@ -0,0 +1,9 @@
"""
Migration 6
Overwrites damage profile 0 to reset bad uniform values (bad values set with bug)
"""
def upgrade(saveddata_engine):
saveddata_engine.execute('DELETE FROM damagePatterns WHERE name LIKE ? OR ID LIKE ?', ("Uniform", "1"))
saveddata_engine.execute('INSERT INTO damagePatterns VALUES (?, ?, ?, ?, ?, ?, ?)', (1, "Uniform", 25, 25, 25, 25, None))

View File

@@ -0,0 +1,24 @@
"""
Migration 7
- Converts Scorpion Ishukone Watch to Scorpion
Mosaic introduced proper skinning system, and Ishukone Scorp
was the only ship which was presented as stand-alone ship in
Pyfa.
"""
CONVERSIONS = {
640: ( # Scorpion
4005, # Scorpion Ishukone Watch
)
}
def upgrade(saveddata_engine):
# Convert ships
for replacement_item, list in CONVERSIONS.iteritems():
for retired_item in list:
saveddata_engine.execute('UPDATE "fits" SET "shipID" = ? WHERE "shipID" = ?', (replacement_item, retired_item))

View File

@@ -0,0 +1,85 @@
"""
Migration 8
- Converts modules based on Carnyx Module Tiericide
Some modules have been unpublished (and unpublished module attributes are removed
from database), which causes pyfa to crash. We therefore replace these
modules with their new replacements
"""
CONVERSIONS = {
8529: ( # Large F-S9 Regolith Compact Shield Extender
8409, # Large Subordinate Screen Stabilizer I
),
8419: ( # Large Azeotropic Restrained Shield Extender
8489, # Large Supplemental Barrier Emitter I
),
8517: ( # Medium F-S9 Regolith Compact Shield Extender
8397, # Medium Subordinate Screen Stabilizer I
),
8433: ( # Medium Azeotropic Restrained Shield Extender
8477, # Medium Supplemental Barrier Emitter I
),
20627: ( # Small 'Trapper' Shield Extender
8437, # Micro Azeotropic Ward Salubrity I
8505, # Micro F-S9 Regolith Shield Induction
3849, # Micro Shield Extender I
3851, # Micro Shield Extender II
8387, # Micro Subordinate Screen Stabilizer I
8465, # Micro Supplemental Barrier Emitter I
),
8521: ( # Small F-S9 Regolith Compact Shield Extender
8401, # Small Subordinate Screen Stabilizer I
),
8427: ( # Small Azeotropic Restrained Shield Extender
8481, # Small Supplemental Barrier Emitter I
),
11343: ( # 100mm Crystalline Carbonide Restrained Plates
11345, # 100mm Reinforced Nanofiber Plates I
),
11341: ( # 100mm Rolled Tungsten Compact Plates
11339, # 100mm Reinforced Titanium Plates I
),
11327: ( # 1600mm Crystalline Carbonide Restrained Plates
11329, # 1600mm Reinforced Nanofiber Plates I
),
11325: ( # 1600mm Rolled Tungsten Compact Plates
11323, # 1600mm Reinforced Titanium Plates I
),
11351: ( # 200mm Crystalline Carbonide Restrained Plates
11353, # 200mm Reinforced Nanofiber Plates I
),
11349: ( # 200mm Rolled Tungsten Compact Plates
11347, # 200mm Reinforced Titanium Plates I
),
11311: ( # 400mm Crystalline Carbonide Restrained Plates
11313, # 400mm Reinforced Nanofiber Plates I
),
11309: ( # 400mm Rolled Tungsten Compact Plates
11307, # 400mm Reinforced Titanium Plates I
),
23791: ( # 'Citadella' 100mm Steel Plates
11335, # 50mm Reinforced Crystalline Carbonide Plates I
11337, # 50mm Reinforced Nanofiber Plates I
11333, # 50mm Reinforced Rolled Tungsten Plates I
11291, # 50mm Reinforced Steel Plates I
20343, # 50mm Reinforced Steel Plates II
11331, # 50mm Reinforced Titanium Plates I
),
11319: ( # 800mm Crystalline Carbonide Restrained Plates
11321, # 800mm Reinforced Nanofiber Plates I
),
11317: ( # 800mm Rolled Tungsten Compact Plates
11315, # 800mm Reinforced Titanium Plates I
),
}
def upgrade(saveddata_engine):
# Convert modules
for replacement_item, list in CONVERSIONS.iteritems():
for retired_item in list:
saveddata_engine.execute('UPDATE "modules" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item))
saveddata_engine.execute('UPDATE "cargo" SET "itemID" = ? WHERE "itemID" = ?', (replacement_item, retired_item))

View File

@@ -0,0 +1,23 @@
"""
Migration 9
Effectively drops UNIQUE constraint from boosters table. SQLite does not support
this, so we have to copy the table to the updated schema and then rename it
"""
tmpTable = """
CREATE TABLE boostersTemp (
'ID' INTEGER NOT NULL,
'itemID' INTEGER,
'fitID' INTEGER NOT NULL,
'active' BOOLEAN,
PRIMARY KEY(ID),
FOREIGN KEY('fitID') REFERENCES fits ('ID')
)
"""
def upgrade(saveddata_engine):
saveddata_engine.execute(tmpTable)
saveddata_engine.execute("INSERT INTO boostersTemp (ID, itemID, fitID, active) SELECT ID, itemID, fitID, active FROM boosters")
saveddata_engine.execute("DROP TABLE boosters")
saveddata_engine.execute("ALTER TABLE boostersTemp RENAME TO boosters")

4
eos/db/saveddata/__init__.py Executable file → Normal file
View File

@@ -1,3 +1,3 @@
__all__ = ["character", "fit", "module", "user", "skill", "price",
__all__ = ["character", "fit", "module", "user", "crest", "skill", "price",
"booster", "drone", "implant", "fleet", "damagePattern",
"miscData"]
"miscData", "targetResists"]

2
eos/db/saveddata/booster.py Executable file → Normal file
View File

@@ -29,7 +29,7 @@ boosters_table = Table("boosters", saveddata_meta,
Column("itemID", Integer),
Column("fitID", Integer, ForeignKey("fits.ID"), nullable = False),
Column("active", Boolean),
UniqueConstraint("itemID", "fitID"))
)
activeSideEffects_table = Table("boostersActiveSideEffects", saveddata_meta,
Column("boosterID", ForeignKey("boosters.ID"), primary_key = True),

0
eos/db/saveddata/character.py Executable file → Normal file
View File

31
eos/db/saveddata/crest.py Normal file
View File

@@ -0,0 +1,31 @@
#===============================================================================
# Copyright (C) 2010 Diego Duclos
#
# This file is part of eos.
#
# eos is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# eos 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 Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
from sqlalchemy import Table, Column, Integer, String, Boolean
from sqlalchemy.orm import mapper
from eos.db import saveddata_meta
from eos.types import CrestChar
crest_table = Table("crest", saveddata_meta,
Column("ID", Integer, primary_key = True),
Column("name", String, nullable = False, unique = True),
Column("refresh_token", String, nullable = False))
mapper(CrestChar, crest_table)

0
eos/db/saveddata/damagePattern.py Executable file → Normal file
View File

0
eos/db/saveddata/drone.py Executable file → Normal file
View File

159
eos/db/saveddata/fit.py Executable file → Normal file
View File

@@ -17,19 +17,20 @@
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
from sqlalchemy import Table, Column, Integer, ForeignKey, String, Boolean
from sqlalchemy.orm import relation, mapper
from sqlalchemy import *
from sqlalchemy.orm import *
from sqlalchemy.sql import and_
from sqlalchemy.ext.associationproxy import association_proxy
from sqlalchemy.orm.collections import attribute_mapped_collection
from eos.db import saveddata_meta
from eos.db.saveddata.module import modules_table
from eos.db.saveddata.drone import drones_table
from eos.db.saveddata.cargo import cargo_table
from eos.db.saveddata.implant import fitImplants_table
from eos.types import Fit, Module, User, Booster, Drone, Cargo, Implant, Character, DamagePattern
from eos.effectHandlerHelpers import HandledModuleList, HandledDroneList, \
HandledImplantBoosterList, HandledProjectedModList, HandledProjectedDroneList, \
HandledProjectedFitList, HandledCargoList
from eos.types import Fit, Module, User, Booster, Drone, Cargo, Implant, Character, DamagePattern, TargetResists
from eos.effectHandlerHelpers import *
fits_table = Table("fits", saveddata_meta,
Column("ID", Integer, primary_key = True),
Column("ownerID", ForeignKey("users.ID"), nullable = True, index = True),
@@ -38,35 +39,127 @@ fits_table = Table("fits", saveddata_meta,
Column("timestamp", Integer, nullable = False),
Column("characterID", ForeignKey("characters.ID"), nullable = True),
Column("damagePatternID", ForeignKey("damagePatterns.ID"), nullable=True),
Column("booster", Boolean, nullable = False, index = True, default = 0))
Column("booster", Boolean, nullable = False, index = True, default = 0),
Column("targetResistsID", ForeignKey("targetResists.ID"), nullable=True),
Column("modeID", Integer, nullable=True),
)
projectedFits_table = Table("projectedFits", saveddata_meta,
Column("sourceID", ForeignKey("fits.ID"), primary_key = True),
Column("victimID", ForeignKey("fits.ID"), primary_key = True),
Column("amount", Integer))
Column("amount", Integer, nullable = False, default = 1),
Column("active", Boolean, nullable = False, default = 1),
)
class ProjectedFit(object):
def __init__(self, sourceID, source_fit, amount=1, active=True):
self.sourceID = sourceID
self.source_fit = source_fit
self.active = active
self.__amount = amount
@reconstructor
def init(self):
if self.source_fit.isInvalid:
# Very rare for this to happen, but be prepared for it
eos.db.saveddata_session.delete(self.source_fit)
eos.db.saveddata_session.flush()
eos.db.saveddata_session.refresh(self.victim_fit)
# We have a series of setters and getters here just in case someone
# downgrades and screws up the table with NULL values
@property
def amount(self):
return self.__amount or 1
@amount.setter
def amount(self, amount):
self.__amount = amount
def __repr__(self):
return "ProjectedFit(sourceID={}, victimID={}, amount={}, active={}) at {}".format(
self.sourceID, self.victimID, self.amount, self.active, hex(id(self))
)
Fit._Fit__projectedFits = association_proxy(
"victimOf", # look at the victimOf association...
"source_fit", # .. and return the source fits
creator=lambda sourceID, source_fit: ProjectedFit(sourceID, source_fit)
)
mapper(Fit, fits_table,
properties = {"_Fit__modules" : relation(Module, collection_class = HandledModuleList,
primaryjoin = and_(modules_table.c.fitID == fits_table.c.ID, modules_table.c.projected == False),
order_by = modules_table.c.position, cascade='all, delete, delete-orphan'),
"_Fit__projectedModules" : relation(Module, collection_class = HandledProjectedModList, cascade='all, delete, delete-orphan', single_parent=True,
primaryjoin = and_(modules_table.c.fitID == fits_table.c.ID, modules_table.c.projected == True)),
"owner" : relation(User, backref = "fits"),
"_Fit__boosters" : relation(Booster, collection_class = HandledImplantBoosterList, cascade='all, delete, delete-orphan', single_parent=True),
"_Fit__drones" : relation(Drone, collection_class = HandledDroneList, cascade='all, delete, delete-orphan', single_parent=True,
primaryjoin = and_(drones_table.c.fitID == fits_table.c.ID, drones_table.c.projected == False)),
"_Fit__cargo" : relation(Cargo, collection_class = HandledCargoList, cascade='all, delete, delete-orphan', single_parent=True,
primaryjoin = and_(cargo_table.c.fitID == fits_table.c.ID)),
"_Fit__projectedDrones" : relation(Drone, collection_class = HandledProjectedDroneList, cascade='all, delete, delete-orphan', single_parent=True,
primaryjoin = and_(drones_table.c.fitID == fits_table.c.ID, drones_table.c.projected == True)),
"_Fit__implants" : relation(Implant, collection_class = HandledImplantBoosterList, cascade='all, delete, delete-orphan', single_parent=True,
primaryjoin = fitImplants_table.c.fitID == fits_table.c.ID,
secondaryjoin = fitImplants_table.c.implantID == Implant.ID,
secondary = fitImplants_table),
"_Fit__character" : relation(Character, backref = "fits"),
"_Fit__damagePattern" : relation(DamagePattern),
"_Fit__projectedFits" : relation(Fit,
primaryjoin = projectedFits_table.c.victimID == fits_table.c.ID,
secondaryjoin = fits_table.c.ID == projectedFits_table.c.sourceID,
secondary = projectedFits_table,
collection_class = HandledProjectedFitList)
})
properties = {
"_Fit__modules": relation(
Module,
collection_class=HandledModuleList,
primaryjoin=and_(modules_table.c.fitID == fits_table.c.ID, modules_table.c.projected == False),
order_by=modules_table.c.position,
cascade='all, delete, delete-orphan'),
"_Fit__projectedModules": relation(
Module,
collection_class=HandledProjectedModList,
cascade='all, delete, delete-orphan',
single_parent=True,
primaryjoin=and_(modules_table.c.fitID == fits_table.c.ID, modules_table.c.projected == True)),
"owner": relation(
User,
backref="fits"),
"itemID": fits_table.c.shipID,
"shipID": fits_table.c.shipID,
"_Fit__boosters": relation(
Booster,
collection_class=HandledImplantBoosterList,
cascade='all, delete, delete-orphan',
single_parent=True),
"_Fit__drones": relation(
Drone,
collection_class=HandledDroneCargoList,
cascade='all, delete, delete-orphan',
single_parent=True,
primaryjoin=and_(drones_table.c.fitID == fits_table.c.ID, drones_table.c.projected == False)),
"_Fit__cargo": relation(
Cargo,
collection_class=HandledDroneCargoList,
cascade='all, delete, delete-orphan',
single_parent=True,
primaryjoin=and_(cargo_table.c.fitID == fits_table.c.ID)),
"_Fit__projectedDrones": relation(
Drone,
collection_class=HandledProjectedDroneList,
cascade='all, delete, delete-orphan',
single_parent=True,
primaryjoin=and_(drones_table.c.fitID == fits_table.c.ID, drones_table.c.projected == True)),
"_Fit__implants": relation(
Implant,
collection_class=HandledImplantBoosterList,
cascade='all, delete, delete-orphan',
backref='fit',
single_parent=True,
primaryjoin=fitImplants_table.c.fitID == fits_table.c.ID,
secondaryjoin=fitImplants_table.c.implantID == Implant.ID,
secondary=fitImplants_table),
"_Fit__character": relation(
Character,
backref="fits"),
"_Fit__damagePattern": relation(DamagePattern),
"_Fit__targetResists": relation(TargetResists),
"projectedOnto": relationship(
ProjectedFit,
primaryjoin=projectedFits_table.c.sourceID == fits_table.c.ID,
backref='source_fit',
collection_class=attribute_mapped_collection('victimID'),
cascade='all, delete, delete-orphan'),
"victimOf": relationship(
ProjectedFit,
primaryjoin=fits_table.c.ID == projectedFits_table.c.victimID,
backref='victim_fit',
collection_class=attribute_mapped_collection('sourceID'),
cascade='all, delete, delete-orphan'),
}
)
mapper(ProjectedFit, projectedFits_table,
properties = {
"_ProjectedFit__amount": projectedFits_table.c.amount,
}
)

0
eos/db/saveddata/fleet.py Executable file → Normal file
View File

0
eos/db/saveddata/implant.py Executable file → Normal file
View File

0
eos/db/saveddata/miscData.py Executable file → Normal file
View File

0
eos/db/saveddata/module.py Executable file → Normal file
View File

0
eos/db/saveddata/price.py Executable file → Normal file
View File

93
eos/db/saveddata/queries.py Executable file → Normal file
View File

@@ -19,7 +19,7 @@
from eos.db.util import processEager, processWhere
from eos.db import saveddata_session, sd_lock
from eos.types import User, Character, Fit, Price, DamagePattern, Fleet, MiscData, Wing, Squad
from eos.types import User, Character, Fit, Price, DamagePattern, Fleet, MiscData, Wing, Squad, TargetResists, CrestChar
from eos.db.saveddata.fleet import squadmembers_table
from eos.db.saveddata.fit import projectedFits_table
from sqlalchemy.sql import and_
@@ -185,6 +185,12 @@ def getFit(lookfor, eager=None):
fit = saveddata_session.query(Fit).options(*eager).filter(Fit.ID == fitID).first()
else:
raise TypeError("Need integer as argument")
if fit and fit.isInvalid:
with sd_lock:
removeInvalid([fit])
return None
return fit
@cachedQuery(Fleet, 1, "fleetID")
@@ -244,9 +250,10 @@ def getFitsWithShip(shipID, ownerID=None, where=None, eager=None):
filter = processWhere(filter, where)
eager = processEager(eager)
with sd_lock:
fits = saveddata_session.query(Fit).options(*eager).filter(filter).all()
fits = removeInvalid(saveddata_session.query(Fit).options(*eager).filter(filter).all())
else:
raise TypeError("ShipID must be integer")
return fits
def getBoosterFits(ownerID=None, where=None, eager=None):
@@ -264,9 +271,15 @@ def getBoosterFits(ownerID=None, where=None, eager=None):
filter = processWhere(filter, where)
eager = processEager(eager)
with sd_lock:
fits = saveddata_session.query(Fit).options(*eager).filter(filter).all()
fits = removeInvalid(saveddata_session.query(Fit).options(*eager).filter(filter).all())
return fits
def countAllFits():
with sd_lock:
count = saveddata_session.query(Fit).count()
return count
def countFitsWithShip(shipID, ownerID=None, where=None, eager=None):
"""
Get all the fits using a certain ship.
@@ -290,7 +303,8 @@ def countFitsWithShip(shipID, ownerID=None, where=None, eager=None):
def getFitList(eager=None):
eager = processEager(eager)
with sd_lock:
fits = saveddata_session.query(Fit).options(*eager).all()
fits = removeInvalid(saveddata_session.query(Fit).options(*eager).all())
return fits
def getFleetList(eager=None):
@@ -308,6 +322,12 @@ def getPrice(typeID):
raise TypeError("Need integer as argument")
return price
def clearPrices():
with sd_lock:
deleted_rows = saveddata_session.query(Price).delete()
commit()
return deleted_rows
def getMiscData(field):
if isinstance(field, basestring):
with sd_lock:
@@ -322,6 +342,12 @@ def getDamagePatternList(eager=None):
patterns = saveddata_session.query(DamagePattern).options(*eager).all()
return patterns
def getTargetResistsList(eager=None):
eager = processEager(eager)
with sd_lock:
patterns = saveddata_session.query(TargetResists).options(*eager).all()
return patterns
@cachedQuery(DamagePattern, 1, "lookfor")
def getDamagePattern(lookfor, eager=None):
if isinstance(lookfor, int):
@@ -340,6 +366,24 @@ def getDamagePattern(lookfor, eager=None):
raise TypeError("Need integer or string as argument")
return pattern
@cachedQuery(TargetResists, 1, "lookfor")
def getTargetResists(lookfor, eager=None):
if isinstance(lookfor, int):
if eager is None:
with sd_lock:
pattern = saveddata_session.query(TargetResists).get(lookfor)
else:
eager = processEager(eager)
with sd_lock:
pattern = saveddata_session.query(TargetResists).options(*eager).filter(TargetResists.ID == lookfor).first()
elif isinstance(lookfor, basestring):
eager = processEager(eager)
with sd_lock:
pattern = saveddata_session.query(TargetResists).options(*eager).filter(TargetResists.name == lookfor).first()
else:
raise TypeError("Need integer or string as argument")
return pattern
def searchFits(nameLike, where=None, eager=None):
if not isinstance(nameLike, basestring):
raise TypeError("Need string as argument")
@@ -350,7 +394,8 @@ def searchFits(nameLike, where=None, eager=None):
filter = processWhere(Fit.name.like(nameLike, escape="\\"), where)
eager = processEager(eager)
with sd_lock:
fits = saveddata_session.query(Fit).options(*eager).filter(filter).all()
fits = removeInvalid(saveddata_session.query(Fit).options(*eager).filter(filter).all())
return fits
def getSquadsIDsWithFitID(fitID):
@@ -361,7 +406,7 @@ def getSquadsIDsWithFitID(fitID):
return squads
else:
raise TypeError("Need integer as argument")
def getProjectedFits(fitID):
if isinstance(fitID, int):
with sd_lock:
@@ -369,7 +414,41 @@ def getProjectedFits(fitID):
fits = saveddata_session.query(Fit).filter(filter).all()
return fits
else:
raise TypeError("Need integer as argument")
raise TypeError("Need integer as argument")
def getCrestCharacters(eager=None):
eager = processEager(eager)
with sd_lock:
characters = saveddata_session.query(CrestChar).options(*eager).all()
return characters
@cachedQuery(CrestChar, 1, "lookfor")
def getCrestCharacter(lookfor, eager=None):
if isinstance(lookfor, int):
if eager is None:
with sd_lock:
character = saveddata_session.query(CrestChar).get(lookfor)
else:
eager = processEager(eager)
with sd_lock:
character = saveddata_session.query(CrestChar).options(*eager).filter(CrestChar.ID == lookfor).first()
elif isinstance(lookfor, basestring):
eager = processEager(eager)
with sd_lock:
character = saveddata_session.query(CrestChar).options(*eager).filter(CrestChar.name == lookfor).first()
else:
raise TypeError("Need integer or string as argument")
return character
def removeInvalid(fits):
invalids = [f for f in fits if f.isInvalid]
if invalids:
map(fits.remove, invalids)
map(saveddata_session.delete, invalids)
saveddata_session.commit()
return fits
def add(stuff):
with sd_lock:

0
eos/db/saveddata/skill.py Executable file → Normal file
View File

View File

@@ -0,0 +1,35 @@
#===============================================================================
# Copyright (C) 2014 Ryan Holmes
#
# This file is part of eos.
#
# eos is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 2 of the License, or
# (at your option) any later version.
#
# eos 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 Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
from sqlalchemy import Table, Column, Integer, Float, ForeignKey, String
from sqlalchemy.orm import mapper
from eos.db import saveddata_meta
from eos.types import TargetResists
targetResists_table = Table("targetResists", saveddata_meta,
Column("ID", Integer, primary_key = True),
Column("name", String),
Column("emAmount", Float),
Column("thermalAmount", Float),
Column("kineticAmount", Float),
Column("explosiveAmount", Float),
Column("ownerID", ForeignKey("users.ID"), nullable=True))
mapper(TargetResists, targetResists_table)

0
eos/db/saveddata/user.py Executable file → Normal file
View File

0
eos/db/util.py Executable file → Normal file
View File

183
eos/effectHandlerHelpers.py Executable file → Normal file
View File

@@ -17,8 +17,12 @@
# along with eos. If not, see <http://www.gnu.org/licenses/>.
#===============================================================================
#from sqlalchemy.orm.attributes import flag_modified
import eos.db
import eos.types
import logging
logger = logging.getLogger(__name__)
class HandledList(list):
def filteredItemPreAssign(self, filter, *args, **kwargs):
@@ -101,6 +105,14 @@ class HandledList(list):
except AttributeError:
pass
def remove(self, thing):
# 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")
if thing.isInvalid: # see GH issue #324
thing.itemID = 0
list.remove(self, thing)
class HandledModuleList(HandledList):
def append(self, mod):
emptyPosition = float("Inf")
@@ -115,10 +127,14 @@ class HandledModuleList(HandledList):
del self[emptyPosition]
mod.position = emptyPosition
HandledList.insert(self, emptyPosition, mod)
if mod.isInvalid:
self.remove(mod)
return
mod.position = len(self)
HandledList.append(self, mod)
if mod.isInvalid:
self.remove(mod)
def insert(self, index, mod):
mod.position = index
@@ -143,139 +159,82 @@ class HandledModuleList(HandledList):
dummy.position = index
self[index] = dummy
def toModule(self, index, mod):
mod.position = index
self[index] = mod
def freeSlot(self, slot):
for i in range(len(self) -1, -1, -1):
mod = self[i]
if mod.getModifiedItemAttr("subSystemSlot") == slot:
del self[i]
class HandledDroneList(HandledList):
class HandledDroneCargoList(HandledList):
def find(self, item):
for d in self:
if d.item == item:
yield d
for o in self:
if o.item == item:
yield o
def findFirst(self, item):
for d in self.find(item):
return d
for o in self.find(item):
return o
def append(self, drone):
list.append(self, drone)
def append(self, thing):
HandledList.append(self, thing)
def remove(self, drone):
HandledList.remove(self, drone)
def appendItem(self, item, amount = 1):
if amount < 1: ValueError("Amount of drones to add should be >= 1")
d = self.findFirst(item)
if d is None:
d = eos.types.Drone(item)
self.append(d)
d.amount += amount
return d
def removeItem(self, item, amount):
if amount < 1: ValueError("Amount of drones to remove should be >= 1")
d = self.findFirst(item)
if d is None: return
d.amount -= amount
if d.amount <= 0:
self.remove(d)
return None
return d
class HandledCargoList(HandledList):
# shameless copy of HandledDroneList
# I have no idea what this does, but I needed it
# @todo: investigate this
def find(self, item):
for d in self:
if d.item == item:
yield d
def findFirst(self, item):
for d in self.find(item):
return d
def append(self, cargo):
list.append(self, cargo)
def remove(self, cargo):
HandledList.remove(self, cargo)
def appendItem(self, item, qty = 1):
if qty < 1: ValueError("Amount of cargo to add should be >= 1")
d = self.findFirst(item)
if d is None:
d = eos.types.Cargo(item)
self.append(d)
d.qty += qty
return d
def removeItem(self, item, qty):
if qty < 1: ValueError("Amount of cargo to remove should be >= 1")
d = self.findFirst(item)
if d is None: return
d.qty -= qty
if d.qty <= 0:
self.remove(d)
return None
return d
if thing.isInvalid:
self.remove(thing)
class HandledImplantBoosterList(HandledList):
def __init__(self):
self.__slotCache = {}
def append(self, thing):
if thing.isInvalid:
HandledList.append(self, thing)
self.remove(thing)
return
def append(self, implant):
if self.__slotCache.has_key(implant.slot):
raise ValueError("Implant/Booster slot already in use, remove the old one first or set replace = True")
self.__slotCache[implant.slot] = implant
HandledList.append(self, implant)
# if needed, remove booster that was occupying slot
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)
def remove(self, implant):
HandledList.remove(self, implant)
del self.__slotCache[implant.slot]
# While we deleted this implant, in edge case seems like not all references
# to it are removed and object still lives in session; forcibly remove it,
# or otherwise when adding the same booster twice booster's table (typeID, fitID)
# constraint will report database integrity error
# TODO: make a proper fix, probably by adjusting fit-boosters sqlalchemy relationships
eos.db.remove(implant)
def freeSlot(self, slot):
if hasattr(slot, "slot"):
slot = slot.slot
try:
implant = self.__slotCache[slot]
except KeyError:
return False
try:
self.remove(implant)
except ValueError:
return False
return True
HandledList.append(self, thing)
class HandledProjectedModList(HandledList):
def append(self, proj):
if proj.isInvalid:
# we must include it before we remove it. doing it this way ensures
# rows and relationships in database are removed as well
HandledList.append(self, proj)
self.remove(proj)
return
proj.projected = True
isSystemEffect = proj.item.group.name == "Effect Beacon"
if isSystemEffect:
# remove other system effects - only 1 per fit plz
oldEffect = next((m for m in self if m.item.group.name == "Effect Beacon"), None)
if oldEffect:
logging.info("System effect occupied with %s, replacing with %s", oldEffect.item.name, proj.item.name)
self.remove(oldEffect)
HandledList.append(self, proj)
# Remove non-projectable modules
if not proj.item.isType("projected") and not isSystemEffect:
self.remove(proj)
class HandledProjectedDroneList(HandledDroneCargoList):
def append(self, proj):
proj.projected = True
HandledList.append(self, proj)
class HandledProjectedDroneList(HandledDroneList):
def append(self, proj):
proj.projected = True
list.append(self, proj)
class HandledProjectedFitList(HandledList):
def append(self, proj):
proj.projected = True
list.append(self, proj)
# Remove invalid or non-projectable drones
if proj.isInvalid or not proj.item.isType("projected"):
self.remove(proj)
class HandledItem(object):
def preAssignItemAttr(self, *args, **kwargs):

0
eos/effects/__init__.py Executable file → Normal file
View File

View File

@@ -1,3 +1,5 @@
# accerationControlCapNeedBonusPostPercentCapacitorNeedLocationShipGroupAfterburner
#
# Used by:
# Modules named like: Dynamic Fuel Valve (8 of 8)
type = "passive"

2
eos/effects/accerationcontrolskillabmwdspeedboost.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# accerationControlSkillAb&MwdSpeedBoost
#
# Used by:
# Implant: Zor's Custom Navigation Hyper-Link
# Skill: Acceleration Control

View File

@@ -1,3 +1,5 @@
# accerationControlSpeedFBonusPostPercentSpeedFactorLocationShipGroupAfterburner
#
# Used by:
# Implants named like: Eifyr and Co. 'Rogue' Acceleration Control AC (6 of 6)
type = "passive"

View File

@@ -1,3 +1,5 @@
# accessDifficultyBonusModifierRequiringArchaelogy
#
# Used by:
# Modules named like: Emission Scope Sharpener (8 of 8)
# Implant: Poteque 'Prospector' Archaeology AC-905

View File

@@ -1,3 +1,5 @@
# accessDifficultyBonusModifierRequiringHacking
#
# Used by:
# Modules named like: Memetic Algorithm Bank (8 of 8)
# Implant: Poteque 'Prospector' Environmental Analysis EY-1005

2
eos/effects/adaptivearmorhardener.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# adaptiveArmorHardener
#
# Used by:
# Module: Reactive Armor Hardener
type = "active"

5
eos/effects/addtosignatureradius2.py Executable file → Normal file
View File

@@ -1,5 +1,8 @@
# addToSignatureRadius2
#
# Used by:
# Modules from group: Shield Extender (37 of 37)
# Modules from group: Missile Launcher Bomb (2 of 2)
# Modules from group: Shield Extender (25 of 25)
type = "passive"
def handler(fit, module, context):
fit.ship.increaseItemAttr("signatureRadius", module.getModifiedItemAttr("signatureRadiusAdd"))

View File

@@ -1,3 +1,5 @@
# advancedDroneInterfacingMaxGroupDCUSkillLevel
#
# Used by:
# Skill: Advanced Drone Interfacing
type = "passive"

View File

@@ -1,3 +1,5 @@
# afterburnerDurationBonusPostPercentDurationLocationShipModulesRequiringAfterburner
#
# Used by:
# Implants named like: Eifyr and Co. 'Rogue' Afterburner AB (6 of 6)
# Implant: Zor's Custom Navigation Link

8
eos/effects/agilitymultipliereffect.py Executable file → Normal file
View File

@@ -1,7 +1,9 @@
# agilityMultiplierEffect
#
# Used by:
# Modules from group: Inertia Stabilizer (12 of 12)
# Modules from group: Nanofiber Internal Structure (14 of 14)
# Modules from group: Reinforced Bulkhead (12 of 12)
# Modules from group: Inertial Stabilizer (7 of 7)
# Modules from group: Nanofiber Internal Structure (7 of 7)
# Modules from group: Reinforced Bulkhead (8 of 8)
type = "passive"
def handler(fit, module, context):
fit.ship.boostItemAttr("agility",

2
eos/effects/agilitymultipliereffectpassive.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# agilityMultiplierEffectPassive
#
# Used by:
# Modules named like: Polycarbon Engine Housing (8 of 8)
type = "passive"

2
eos/effects/ammofallofmultiplier.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# ammoFallofMultiplier
#
# Used by:
# Charges from group: Advanced Artillery Ammo (6 of 6)
# Charges from group: Advanced Autocannon Ammo (6 of 6)

4
eos/effects/ammoinfluencecapneed.py Executable file → Normal file
View File

@@ -1,5 +1,7 @@
# ammoInfluenceCapNeed
#
# Used by:
# Items from category: Charge (458 of 828)
# Items from category: Charge (458 of 831)
type = "passive"
def handler(fit, module, context):
# Dirty hack to work around cap charges setting cap booster

4
eos/effects/ammoinfluencerange.py Executable file → Normal file
View File

@@ -1,5 +1,7 @@
# ammoInfluenceRange
#
# Used by:
# Items from category: Charge (559 of 828)
# Items from category: Charge (559 of 831)
type = "passive"
def handler(fit, module, context):
module.multiplyItemAttr("maxRange", module.getModifiedChargeAttr("weaponRangeMultiplier"))

4
eos/effects/ammospeedmultiplier.py Executable file → Normal file
View File

@@ -1,7 +1,9 @@
# ammoSpeedMultiplier
#
# Used by:
# Charges from group: Festival Charges (8 of 8)
# Charges from group: Interdiction Probe (2 of 2)
# Charges from group: Survey Probe (3 of 3)
# Charge: Warp Disrupt Probe
type = "passive"
def handler(fit, module, context):
module.multiplyItemAttr("speed", module.getModifiedChargeAttr("speedMultiplier") or 1)

2
eos/effects/ammotrackingmultiplier.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# ammoTrackingMultiplier
#
# Used by:
# Charges from group: Advanced Artillery Ammo (6 of 6)
# Charges from group: Advanced Autocannon Ammo (6 of 6)

2
eos/effects/angelsetbonus.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# angelsetbonus
#
# Used by:
# Implants named like: grade Halo (18 of 18)
runTime = "early"

2
eos/effects/antiwarpscramblingpassive.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# antiWarpScramblingPassive
#
# Used by:
# Modules from group: Warp Core Stabilizer (8 of 8)
type = "passive"

View File

@@ -1,3 +1,5 @@
# archaeologySkillVirusBonus
#
# Used by:
# Modules named like: Emission Scope Sharpener (8 of 8)
# Implant: Poteque 'Prospector' Archaeology AC-905

2
eos/effects/armorallrepairsystemsamountbonuspassive.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# armorAllRepairSystemsAmountBonusPassive
#
# Used by:
# Implants named like: Exile Booster (4 of 4)
type = "passive"

View File

@@ -1,7 +1,9 @@
# armorDamageAmountBonusCapitalArmorRepairers
#
# Used by:
# Modules named like: Auxiliary Nano Pump (8 of 8)
type = "passive"
def handler(fit, implant, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Capital Repair Systems"),
"armorDamageAmount", implant.getModifiedItemAttr("repairBonus"),
stackingPenalties = True)
stackingPenalties=True)

View File

@@ -1,3 +1,5 @@
# armoredSquadronCommand
#
# Used by:
# Skill: Armored Warfare Specialist
runTime = "early"

2
eos/effects/armoredwarfaremindlink.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# armoredWarfareMindlink
#
# Used by:
# Implant: Armored Warfare Mindlink
# Implant: Federation Navy Warfare Mindlink

4
eos/effects/armorhpbonusadd.py Executable file → Normal file
View File

@@ -1,5 +1,7 @@
# armorHPBonusAdd
#
# Used by:
# Modules from group: Armor Reinforcer (57 of 57)
# Modules from group: Armor Reinforcer (41 of 41)
type = "passive"
def handler(fit, module, context):
fit.ship.increaseItemAttr("armorHP", module.getModifiedItemAttr("armorHPBonusAdd"))

2
eos/effects/armorhpbonusaddpassive.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# armorHPBonusAddPassive
#
# Used by:
# Subsystems from group: Defensive Systems (16 of 16)
type = "passive"

2
eos/effects/armorhpmultiply.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# armorHPMultiply
#
# Used by:
# Modules from group: Armor Coating (202 of 202)
# Modules from group: Armor Plating Energized (187 of 187)

4
eos/effects/armorreinforcermassadd.py Executable file → Normal file
View File

@@ -1,5 +1,7 @@
# armorReinforcerMassAdd
#
# Used by:
# Modules from group: Armor Reinforcer (57 of 57)
# Modules from group: Armor Reinforcer (41 of 41)
type = "passive"
def handler(fit, module, context):
fit.ship.increaseItemAttr("mass", module.getModifiedItemAttr("massAddition"))

2
eos/effects/armorrepair.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# armorRepair
#
# Used by:
# Modules from group: Armor Repair Unit (100 of 100)
runTime = "late"

2
eos/effects/armorrepairprojectormaxrangebonus.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# armorRepairProjectorMaxRangeBonus
#
# Used by:
# Ship: Augoror
# Ship: Exequror

2
eos/effects/armortankinggang.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# armorTankingGang
#
# Used by:
# Skill: Armored Warfare
type = "gang"

2
eos/effects/armortankinggang2.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# armorTankingGang2
#
# Used by:
# Implant: Armored Warfare Mindlink
# Implant: Federation Navy Warfare Mindlink

2
eos/effects/armorupgradesmasspenaltyreductionbonus.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# armorUpgradesMassPenaltyReductionBonus
#
# Used by:
# Skill: Armor Layering
type = "passive"

View File

@@ -1,3 +1,5 @@
# astrogeologyMiningAmountBonusPostPercentMiningAmountLocationShipModulesRequiringMining
#
# Used by:
# Implants named like: Inherent Implants 'Highwall' Mining MX (3 of 3)
# Implant: Michi's Excavation Augmentor

View File

@@ -1,3 +1,5 @@
# baseMaxScanDeviationModifierModuleOnline2None
#
# Used by:
# Variations of module: Scan Pinpointing Array I (2 of 2)
type = "passive"

View File

@@ -1,3 +1,5 @@
# baseMaxScanDeviationModifierRequiringAstrometrics
#
# Used by:
# Implants named like: Poteque 'Prospector' Astrometric Pinpointing AP (3 of 3)
# Skill: Astrometric Pinpointing

View File

@@ -1,3 +1,5 @@
# baseSensorStrengthModifierModule
#
# Used by:
# Variations of module: Scan Rangefinding Array I (2 of 2)
type = "passive"

View File

@@ -1,3 +1,5 @@
# baseSensorStrengthModifierRequiringAstrometrics
#
# Used by:
# Modules from group: Scan Probe Launcher (4 of 7)
# Implants named like: Poteque 'Prospector' Astrometric Rangefinding AR (3 of 3)

View File

@@ -0,0 +1,9 @@
# battlecruiserDroneSpeed
#
# Used by:
# Ship: Myrmidon
# Ship: Prophecy
type = "passive"
def handler(fit, ship, context):
fit.drones.filteredItemBoost(lambda drone: drone.item.requiresSkill("Drones"),
"maxVelocity", ship.getModifiedItemAttr("roleBonusCBC"))

View File

@@ -0,0 +1,10 @@
# battlecruiserMETRange
#
# Used by:
# Ships named like: Harbinger (2 of 2)
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Energy Turret"),
"maxRange", ship.getModifiedItemAttr("roleBonusCBC"))
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Energy Turret"),
"falloff", ship.getModifiedItemAttr("roleBonusCBC"))

View File

@@ -0,0 +1,11 @@
# battlecruiserMHTRange
#
# Used by:
# Ships named like: Brutix (2 of 2)
# Ship: Ferox
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Hybrid Turret"),
"maxRange", ship.getModifiedItemAttr("roleBonusCBC"))
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Hybrid Turret"),
"falloff", ship.getModifiedItemAttr("roleBonusCBC"))

View File

@@ -0,0 +1,9 @@
# battlecruiserMissileRange
#
# Used by:
# Ships named like: Drake (2 of 2)
# Ship: Cyclone
type = "passive"
def handler(fit, skill, context):
fit.modules.filteredChargeBoost(lambda mod: mod.charge.requiresSkill("Missile Launcher Operation"),
"maxVelocity", skill.getModifiedItemAttr("roleBonusCBC"))

View File

@@ -0,0 +1,10 @@
# battlecruiserMPTRange
#
# Used by:
# Ships named like: Hurricane (2 of 2)
type = "passive"
def handler(fit, ship, context):
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Projectile Turret"),
"maxRange", ship.getModifiedItemAttr("roleBonusCBC"))
fit.modules.filteredItemBoost(lambda mod: mod.item.requiresSkill("Medium Projectile Turret"),
"falloff", ship.getModifiedItemAttr("roleBonusCBC"))

2
eos/effects/bclargeenergyturretcapacitorneedbonus.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# bcLargeEnergyTurretCapacitorNeedBonus
#
# Used by:
# Ship: Oracle
type = "passive"

2
eos/effects/bclargeenergyturretcpuneedbonus.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# bcLargeEnergyTurretCPUNeedBonus
#
# Used by:
# Ship: Oracle
type = "passive"

2
eos/effects/bclargeenergyturretpowerneedbonus.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# bcLargeEnergyTurretPowerNeedBonus
#
# Used by:
# Ship: Oracle
type = "passive"

2
eos/effects/bclargehybridturretcapacitorneedbonus.py Executable file → Normal file
View File

@@ -1,3 +1,5 @@
# bcLargeHybridTurretCapacitorNeedBonus
#
# Used by:
# Ship: Naga
# Ship: Talos

Some files were not shown because too many files have changed in this diff Show More