@@ -729,6 +729,43 @@ function ImportTabClass:ImportPassiveTreeAndJewels(json, charData)
729729 main :SetWindowTitleSubtext (string.format (" %s (%s, %s, %s)" , self .build .buildName , charData .name , charData .class , charData .league ))
730730end
731731
732+ local SOCKET_GROUP_REIMPORT_KEY_SEPARATOR = " \31 "
733+
734+ local function getSocketGroupReimportKey (socketGroup )
735+ -- Use a rarely-used separator to avoid accidental collisions when concatenating fields.
736+ local gemNameParts = { }
737+ for _ , gem in ipairs (socketGroup .gemList ) do
738+ t_insert (gemNameParts , (gem .nameSpec or " " ):lower ())
739+ end
740+ return table.concat ({
741+ socketGroup .slot or " " ,
742+ socketGroup .source or " " ,
743+ tostring (# socketGroup .gemList ),
744+ table.concat (gemNameParts , SOCKET_GROUP_REIMPORT_KEY_SEPARATOR ),
745+ }, SOCKET_GROUP_REIMPORT_KEY_SEPARATOR )
746+ end
747+
748+ local function snapshotSocketGroupReimportState (socketGroup , isMainGroup )
749+ return {
750+ enabled = socketGroup .enabled ,
751+ includeInFullDPS = socketGroup .includeInFullDPS ,
752+ groupCount = socketGroup .groupCount ,
753+ label = socketGroup .label ,
754+ mainActiveSkill = socketGroup .mainActiveSkill ,
755+ mainActiveSkillCalcs = socketGroup .mainActiveSkillCalcs ,
756+ isMainGroup = isMainGroup ,
757+ }
758+ end
759+
760+ local function applySocketGroupReimportState (socketGroup , state )
761+ socketGroup .enabled = state .enabled
762+ socketGroup .includeInFullDPS = state .includeInFullDPS
763+ socketGroup .groupCount = state .groupCount
764+ socketGroup .label = state .label
765+ socketGroup .mainActiveSkill = state .mainActiveSkill
766+ socketGroup .mainActiveSkillCalcs = state .mainActiveSkillCalcs
767+ end
768+
732769function ImportTabClass :ImportItemsAndSkills (json )
733770 -- local out = io.open("get-items.json", "w")
734771 -- out:write(json)
@@ -748,15 +785,22 @@ function ImportTabClass:ImportItemsAndSkills(json)
748785
749786 local mainSkillEmpty = # self .build .skillsTab .socketGroupList == 0
750787 local skillOrder
788+ local preservedSocketGroupStateByKey
751789 if self .controls .charImportItemsClearSkills .state then
752790 skillOrder = { }
791+ preservedSocketGroupStateByKey = { }
753792 for _ , socketGroup in ipairs (self .build .skillsTab .socketGroupList ) do
754793 for _ , gem in ipairs (socketGroup .gemList ) do
755794 if gem .grantedEffect and not gem .grantedEffect .support then
756795 t_insert (skillOrder , gem .grantedEffect .name )
757796 end
758797 end
759798 end
799+ for index , socketGroup in ipairs (self .build .skillsTab .socketGroupList ) do
800+ local key = getSocketGroupReimportKey (socketGroup )
801+ preservedSocketGroupStateByKey [key ] = preservedSocketGroupStateByKey [key ] or { }
802+ t_insert (preservedSocketGroupStateByKey [key ], snapshotSocketGroupReimportState (socketGroup , index == self .build .mainSocketGroup ))
803+ end
760804 wipeTable (self .build .skillsTab .socketGroupList )
761805 end
762806 self .charImportStatus = colorCodes .POSITIVE .. " Items and skills successfully imported."
@@ -801,6 +845,22 @@ function ImportTabClass:ImportItemsAndSkills(json)
801845 end
802846 end )
803847 end
848+ if preservedSocketGroupStateByKey then
849+ local restoredMainSocketGroup
850+ for index , socketGroup in ipairs (self .build .skillsTab .socketGroupList ) do
851+ local stateList = preservedSocketGroupStateByKey [getSocketGroupReimportKey (socketGroup )]
852+ if stateList and stateList [1 ] then
853+ local state = t_remove (stateList , 1 )
854+ applySocketGroupReimportState (socketGroup , state )
855+ if state .isMainGroup then
856+ restoredMainSocketGroup = index
857+ end
858+ end
859+ end
860+ if restoredMainSocketGroup then
861+ self .build .mainSocketGroup = restoredMainSocketGroup
862+ end
863+ end
804864 if mainSkillEmpty then
805865 self .build .mainSocketGroup = self :GuessMainSocketGroup ()
806866 end
0 commit comments