From 4eab01a8562d6d8cb6df4101613a730a8a42212d Mon Sep 17 00:00:00 2001 From: focabr Date: Fri, 17 Feb 2023 02:45:23 -0300 Subject: [PATCH 1/5] Parse button Stack All location Inventory Window --- .../source/src/EveOnline/ParseUserInterface.elm | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/implement/alternate-ui/source/src/EveOnline/ParseUserInterface.elm b/implement/alternate-ui/source/src/EveOnline/ParseUserInterface.elm index 25227fc..76bfdc3 100644 --- a/implement/alternate-ui/source/src/EveOnline/ParseUserInterface.elm +++ b/implement/alternate-ui/source/src/EveOnline/ParseUserInterface.elm @@ -404,6 +404,7 @@ type alias InventoryWindow = , selectedContainerCapacityGauge : Maybe (Result String InventoryWindowCapacityGauge) , selectedContainerInventory : Maybe Inventory , buttonToSwitchToListView : Maybe UITreeNodeWithDisplayRegion + , buttonToStackAll : Maybe UITreeNodeWithDisplayRegion } @@ -2125,6 +2126,17 @@ parseInventoryWindow windowUiNode = && ((uiNode.uiNode |> getTexturePathFromDictEntries |> Maybe.withDefault "") |> String.endsWith "38_16_190.png") ) |> List.head + + buttonToStackAll = + rightContainerNode + |> Maybe.map listDescendantsWithDisplayRegion + |> Maybe.withDefault [] + |> List.filter + (\uiNode -> + (uiNode.uiNode.pythonObjectTypeName |> String.contains "ButtonIcon") + && (uiNode.uiNode |> getHintTextFromDictEntries |> Maybe.map (String.contains "Stack All") |> Maybe.withDefault False) + ) + |> List.head in { uiNode = windowUiNode , leftTreeEntries = leftTreeEntries @@ -2132,6 +2144,7 @@ parseInventoryWindow windowUiNode = , selectedContainerCapacityGauge = selectedContainerCapacityGauge , selectedContainerInventory = selectedContainerInventory , buttonToSwitchToListView = buttonToSwitchToListView + , buttonToStackAll = buttonToStackAll } From 5199e49d890455649a127f99c525af8ad0e38f7a Mon Sep 17 00:00:00 2001 From: focabr Date: Tue, 28 Feb 2023 10:36:27 -0300 Subject: [PATCH 2/5] Add parser for quick message, this message can contain how much time is left for the cluster to shut down. + Adapt to the structure of the UI elements found in the sample session-2023-02-27T09-59-39-event-4966-eve-online-memory-reading.json --- .../src/EveOnline/ParseUserInterface.elm | 59 +++++++++++++++++-- 1 file changed, 53 insertions(+), 6 deletions(-) diff --git a/implement/alternate-ui/source/src/EveOnline/ParseUserInterface.elm b/implement/alternate-ui/source/src/EveOnline/ParseUserInterface.elm index fdaa333..179a0e5 100644 --- a/implement/alternate-ui/source/src/EveOnline/ParseUserInterface.elm +++ b/implement/alternate-ui/source/src/EveOnline/ParseUserInterface.elm @@ -51,7 +51,7 @@ type alias ParsedUserInterface = , heatStatusTooltip : Maybe HeatStatusTooltip , neocom : Maybe Neocom , messageBoxes : List MessageBox - , layerAbovemain : Maybe UITreeNodeWithDisplayRegion + , layerAbovemain : Maybe LayerAbovemain , keyActivationWindow : Maybe KeyActivationWindow } @@ -544,6 +544,18 @@ type alias StandaloneBookmarkWindow = } +type alias LayerAbovemain = + { uiNode : UITreeNodeWithDisplayRegion + , quickMessage : Maybe QuickMessage + } + + +type alias QuickMessage = + { uiNode : UITreeNodeWithDisplayRegion + , text : String + } + + type alias KeyActivationWindow = { uiNode : UITreeNodeWithDisplayRegion , activateButton : Maybe UITreeNodeWithDisplayRegion @@ -3001,12 +3013,47 @@ parseScrollControls scrollControlsNode = } -parseLayerAbovemainFromUITreeRoot : UITreeNodeWithDisplayRegion -> Maybe UITreeNodeWithDisplayRegion +parseLayerAbovemainFromUITreeRoot : UITreeNodeWithDisplayRegion -> Maybe LayerAbovemain parseLayerAbovemainFromUITreeRoot uiTreeRoot = - uiTreeRoot - |> listDescendantsWithDisplayRegion - |> List.filter (.uiNode >> getNameFromDictEntries >> (==) (Just "l_abovemain")) - |> List.head + case + uiTreeRoot + |> listDescendantsWithDisplayRegion + |> List.filter (.uiNode >> getNameFromDictEntries >> (==) (Just "l_abovemain")) + |> List.head + of + Nothing -> + Nothing + + Just layerAboveMainUINode -> + Just + { uiNode = layerAboveMainUINode + , quickMessage = parseQuickMessage layerAboveMainUINode + } + + +parseQuickMessage : UITreeNodeWithDisplayRegion -> Maybe QuickMessage +parseQuickMessage layerAboveMainUINode = + case + layerAboveMainUINode + |> listDescendantsWithDisplayRegion + |> List.filter (.uiNode >> .pythonObjectTypeName >> (==) "QuickMessage") + |> List.head + of + Nothing -> + Nothing + + Just quickMessageUINode -> + let + text = + quickMessageUINode.uiNode + |> getAllContainedDisplayTexts + |> List.head + |> Maybe.withDefault "" + in + Just + { uiNode = quickMessageUINode + , text = text + } getSubstringBetweenXmlTagsAfterMarker : String -> String -> Maybe String From bda02055c3f228ab5ffa0a2e0616d920a3f96a74 Mon Sep 17 00:00:00 2001 From: focabr Date: Tue, 28 Feb 2023 16:00:32 -0300 Subject: [PATCH 3/5] Adapt to inspect too --- .../Frontend/InspectParsedUserInterface.elm | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/implement/alternate-ui/source/src/Frontend/InspectParsedUserInterface.elm b/implement/alternate-ui/source/src/Frontend/InspectParsedUserInterface.elm index 3453b82..dc40f2c 100644 --- a/implement/alternate-ui/source/src/Frontend/InspectParsedUserInterface.elm +++ b/implement/alternate-ui/source/src/Frontend/InspectParsedUserInterface.elm @@ -266,7 +266,7 @@ renderTreeNodeFromParsedUserInterface maybeInputRoute uiNodesWithDisplayRegion p |> fieldFromMaybeInstance { fieldName = "layerAbovemain" , fieldValueSummary = always "..." - , fieldValueChildren = treeViewNodeFromUINode viewConfig >> List.singleton + , fieldValueChildren = treeNodeChildrenFromLayerAbovemain viewConfig } , parsedUserInterface.keyActivationWindow |> fieldFromMaybeInstance @@ -1499,6 +1499,34 @@ treeNodeChildrenFromMessageBox viewConfig messageBox = ] +treeNodeChildrenFromLayerAbovemain : + ViewConfig event + -> EveOnline.ParseUserInterface.LayerAbovemain + -> List (TreeViewNode event ParsedUITreeViewPathNode) +treeNodeChildrenFromLayerAbovemain viewConfig layerAbovemain = + treeNodeChildrenFromRecordWithUINode + viewConfig + layerAbovemain.uiNode + [ layerAbovemain.quickMessage + |> fieldFromMaybeInstance + { fieldName = "quickMessage" + , fieldValueSummary = always "..." + , fieldValueChildren = treeNodeChildrenFromQuickMessage viewConfig + } + ] + + +treeNodeChildrenFromQuickMessage : + ViewConfig event + -> EveOnline.ParseUserInterface.QuickMessage + -> List (TreeViewNode event ParsedUITreeViewPathNode) +treeNodeChildrenFromQuickMessage viewConfig layerAboveMainUINode = + treeNodeChildrenFromRecordWithUINode + viewConfig + layerAboveMainUINode.uiNode + [ layerAboveMainUINode.text |> fieldFromString "text" ] + + treeNodeChildrenFromKeyActivationWindow : ViewConfig event -> EveOnline.ParseUserInterface.KeyActivationWindow From 672e405362bb8756238d6e0ee07691a2bd3ad3c6 Mon Sep 17 00:00:00 2001 From: focabr Date: Fri, 3 Mar 2023 01:53:27 -0300 Subject: [PATCH 4/5] Adapt examples for EVE Online to changes in the game client. Adapt to the structure of the UI elements (DronesWindow) found in the sample 'session-2023-03-03T04-09-36-event-(72,110,122)-eve-online-memory-reading.json'. --- .../source/src/EveOnline/ParseUserInterface.elm | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/implement/alternate-ui/source/src/EveOnline/ParseUserInterface.elm b/implement/alternate-ui/source/src/EveOnline/ParseUserInterface.elm index 179a0e5..cd6c68c 100644 --- a/implement/alternate-ui/source/src/EveOnline/ParseUserInterface.elm +++ b/implement/alternate-ui/source/src/EveOnline/ParseUserInterface.elm @@ -1572,17 +1572,7 @@ parseDronesWindowFromUITreeRoot uiTreeRoot = droneEntries = windowNode |> listDescendantsWithDisplayRegion - |> List.filter - (.uiNode - >> .pythonObjectTypeName - >> (\pythonTypeName -> - {- - 2023-01-02 Observed: 'DroneInBayEntry' - -} - String.startsWith "Drone" pythonTypeName - && String.endsWith "Entry" pythonTypeName - ) - ) + |> List.filter (.uiNode >> .pythonObjectTypeName >> String.contains "DroneSubGroup") |> List.map parseDronesWindowDroneEntry droneGroups = From 09a598ee064fee55d8218ded88f10b73696e1d93 Mon Sep 17 00:00:00 2001 From: focabr Date: Fri, 3 Mar 2023 18:50:16 -0300 Subject: [PATCH 5/5] After this last adjustment it is correctly bringing the drones and groups, but the hierarchy is still incorrect, the topmostGroupEntry should be "Drones in Space". --- .../src/EveOnline/ParseUserInterface.elm | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/implement/alternate-ui/source/src/EveOnline/ParseUserInterface.elm b/implement/alternate-ui/source/src/EveOnline/ParseUserInterface.elm index cd6c68c..7df761d 100644 --- a/implement/alternate-ui/source/src/EveOnline/ParseUserInterface.elm +++ b/implement/alternate-ui/source/src/EveOnline/ParseUserInterface.elm @@ -1569,10 +1569,26 @@ parseDronesWindowFromUITreeRoot uiTreeRoot = |> List.filter (.uiNode >> .pythonObjectTypeName >> String.contains "DroneGroupHeader") |> List.filterMap parseDronesWindowDroneGroupHeader - droneEntries = + droneSubGroupHeaders = windowNode |> listDescendantsWithDisplayRegion |> List.filter (.uiNode >> .pythonObjectTypeName >> String.contains "DroneSubGroup") + |> List.filterMap parseDronesWindowDroneGroupHeader + + droneEntries = + windowNode + |> listDescendantsWithDisplayRegion + |> List.filter + (.uiNode + >> .pythonObjectTypeName + >> (\pythonTypeName -> + {- + 2023-01-02 Observed: 'DroneInBayEntry' + -} + String.startsWith "Drone" pythonTypeName + && String.endsWith "Entry" pythonTypeName + ) + ) |> List.map parseDronesWindowDroneEntry droneGroups = @@ -1580,6 +1596,9 @@ parseDronesWindowFromUITreeRoot uiTreeRoot = , droneGroupHeaders |> List.map (\header -> { header = header, children = [] }) |> List.map DronesWindowEntryGroup + , droneSubGroupHeaders + |> List.map (\header -> { header = header, children = [] }) + |> List.map DronesWindowEntryGroup ] |> List.concat |> dronesGroupTreesFromFlatListOfEntries