RPTools / maptool

Virtual Tabletop for playing roleplaying games with remote players or face to face.
http://rptools.net
GNU Affero General Public License v3.0
790 stars 258 forks source link

[Bug]: Drag / Drop often produces red X instead of proper image on Linux #3701

Closed matejdro closed 2 years ago

matejdro commented 2 years ago

Describe the Bug

Drag-droping images from Dolphin file manager (linux) often causes images to not properly render (they just display red X).

Restarting Maptool will fix the issue (both existing images will not display the X anymore and new images will work again), but it will soon break again. After this happens, it seems like every drag-drop is affected until restart.

Opening same folder in Library and drag-dropping same images from there works fine.

This started happening after upgrade to 1.12. pre-1.12 did not experience this issue.

To Reproduce

  1. Open Dolphin file manager
  2. Open Maptool (side by side)
  3. Drag drop any image form Dolphin to Maptool

Expected Behaviour

Images should render normally, instead of red X

Screenshots

image

MapTool Info

1.12.2, upgrade from pre-1.12 version

Desktop

Arch Linux (installed via maptool-bin AUR package) with Dolphin file manager 22.08.1 (on X11)

Additional Context

Here are logs of me drag-dropping three images into Maptool. First image works fine, second image causes breakage (as you can see, third image is also broken after that). There is nothing particular about these three images (after restart, all those three will work, but some other image might break it):

16:44:02.676 (TransferableHelper.java:579) [AWT-EventQueue-0] INFO  - Possible: java.awt.datatransfer.DataFlavor[mimetype=text/uri-list;representationclass=java.lang.String] (file:///home/matej/SeaDrive/current/DND/Tools/Map%20Packs/Mapping-Pack/Interior/Doors/cellardoor_gt.png
)
16:44:02.704 (TransferableHelper.java:579) [AWT-EventQueue-0] INFO  - Possible: java.awt.datatransfer.DataFlavor[mimetype=application/x-java-serialized-object;representationclass=java.lang.String] (file:///home/matej/SeaDrive/current/DND/Tools/Map Packs/Mapping-Pack/Interior/Doors/cellardoor_gt.png)
16:44:02.707 (TransferableHelper.java:579) [AWT-EventQueue-0] INFO  - Possible: java.awt.datatransfer.DataFlavor[mimetype=text/plain;representationclass=java.lang.String] (file:///home/matej/SeaDrive/current/DND/Tools/Map Packs/Mapping-Pack/Interior/Doors/cellardoor_gt.png)
16:44:02.740 (TransferableHelper.java:230) [AWT-EventQueue-0] INFO  - Selected: java.awt.datatransfer.DataFlavor[mimetype=text/uri-list;representationclass=java.lang.String]
16:44:02.758 (ServerMessageHandler.java:61) [SocketClientConnection.ReceiveThread] INFO  - 127.0.0.1-0 :got: PUT_ASSET_MSG
16:44:02.797 (ServerMessageHandler.java:61) [SocketClientConnection.ReceiveThread] INFO  - 127.0.0.1-0 :got: PUT_ASSET_MSG
16:44:02.800 (ServerMessageHandler.java:61) [SocketClientConnection.ReceiveThread] INFO  - 127.0.0.1-0 :got: PUT_TOKEN_MSG
16:44:02.804 (ClientMessageHandler.java:86) [SocketClientConnection.ReceiveThread] INFO  - Anonymous User: p got: UPDATE_TOKEN_PROPERTY_MSG
16:44:09.101 (ServerMessageHandler.java:61) [SocketClientConnection.ReceiveThread] INFO  - 127.0.0.1-0 :got: PUT_TOKEN_MSG
16:44:11.190 (ServerMessageHandler.java:61) [SocketClientConnection.ReceiveThread] INFO  - 127.0.0.1-0 :got: SET_ZONE_VISIBILITY_MSG
16:44:11.191 (ClientMessageHandler.java:86) [SocketClientConnection.ReceiveThread] INFO  - Anonymous User: p got: SET_ZONE_VISIBILITY_MSG
16:44:13.434 (ServerMessageHandler.java:61) [SocketClientConnection.ReceiveThread] INFO  - 127.0.0.1-0 :got: UPDATE_TOKEN_PROPERTY_MSG
16:44:13.966 (ServerMessageHandler.java:61) [SocketClientConnection.ReceiveThread] INFO  - 127.0.0.1-0 :got: START_TOKEN_MOVE_MSG
16:44:14.068 (ServerMessageHandler.java:61) [SocketClientConnection.ReceiveThread] INFO  - 127.0.0.1-0 :got: UPDATE_TOKEN_MOVE_MSG
16:44:14.168 (ServerMessageHandler.java:61) [SocketClientConnection.ReceiveThread] INFO  - 127.0.0.1-0 :got: UPDATE_TOKEN_MOVE_MSG
16:44:14.768 (ServerMessageHandler.java:61) [SocketClientConnection.ReceiveThread] INFO  - 127.0.0.1-0 :got: UPDATE_TOKEN_MOVE_MSG
16:44:15.369 (ServerMessageHandler.java:61) [SocketClientConnection.ReceiveThread] INFO  - 127.0.0.1-0 :got: UPDATE_TOKEN_MOVE_MSG
16:44:15.669 (ServerMessageHandler.java:61) [SocketClientConnection.ReceiveThread] INFO  - 127.0.0.1-0 :got: UPDATE_TOKEN_MOVE_MSG
16:44:16.069 (ServerMessageHandler.java:61) [SocketClientConnection.ReceiveThread] INFO  - 127.0.0.1-0 :got: UPDATE_TOKEN_MOVE_MSG
16:44:16.169 (ServerMessageHandler.java:61) [SocketClientConnection.ReceiveThread] INFO  - 127.0.0.1-0 :got: UPDATE_TOKEN_MOVE_MSG
16:44:16.365 (ServerMessageHandler.java:61) [SocketClientConnection.ReceiveThread] INFO  - 127.0.0.1-0 :got: STOP_TOKEN_MOVE_MSG
16:44:16.366 (ServerMessageHandler.java:61) [SocketClientConnection.ReceiveThread] INFO  - 127.0.0.1-0 :got: PUT_TOKEN_MSG
16:44:26.829 (TransferableHelper.java:579) [AWT-EventQueue-0] INFO  - Possible: java.awt.datatransfer.DataFlavor[mimetype=text/uri-list;representationclass=java.lang.String] (file:///home/matej/SeaDrive/current/DND/Tools/Map%20Packs/Mapping-Pack/Interior/Doors/door_curledhandle__light_gt.png
)
16:44:26.864 (TransferableHelper.java:579) [AWT-EventQueue-0] INFO  - Possible: java.awt.datatransfer.DataFlavor[mimetype=application/x-java-serialized-object;representationclass=java.lang.String] (file:///home/matej/SeaDrive/current/DND/Tools/Map Packs/Mapping-Pack/Interior/Doors/door_curledhandle__light_gt.png)
16:44:26.867 (TransferableHelper.java:579) [AWT-EventQueue-0] INFO  - Possible: java.awt.datatransfer.DataFlavor[mimetype=text/plain;representationclass=java.lang.String] (file:///home/matej/SeaDrive/current/DND/Tools/Map Packs/Mapping-Pack/Interior/Doors/door_curledhandle__light_gt.png)
16:44:26.898 (TransferableHelper.java:230) [AWT-EventQueue-0] INFO  - Selected: java.awt.datatransfer.DataFlavor[mimetype=text/uri-list;representationclass=java.lang.String]
16:44:26.927 (ServerMessageHandler.java:61) [SocketClientConnection.ReceiveThread] INFO  - 127.0.0.1-0 :got: PUT_ASSET_MSG
16:44:26.931 (ImageManager.java:428) [pool-7-thread-1] ERROR - BackgroundImageLoader.run(door_curledhandle__light_gt,png, 9accc4bfe43342d52f17b144d135c340): image not resolved
java.io.IOException: Could not load image door_curledhandle__light_gt
        at net.rptools.lib.image.ImageUtil.bytesToImage(ImageUtil.java:317) ~[MapTool.jar:1.12.1]
        at net.rptools.maptool.util.ImageManager$BackgroundImageLoader.run(ImageManager.java:424) [MapTool.jar:1.12.1]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:?]
        at java.lang.Thread.run(Unknown Source) [?:?]
16:44:26.934 (ServerMessageHandler.java:61) [SocketClientConnection.ReceiveThread] INFO  - 127.0.0.1-0 :got: PUT_ASSET_MSG
16:44:26.935 (ServerMessageHandler.java:61) [SocketClientConnection.ReceiveThread] INFO  - 127.0.0.1-0 :got: PUT_TOKEN_MSG
16:44:26.935 (ClientMessageHandler.java:86) [SocketClientConnection.ReceiveThread] INFO  - Anonymous User: p got: UPDATE_TOKEN_PROPERTY_MSG
16:44:30.402 (TransferableHelper.java:579) [AWT-EventQueue-0] INFO  - Possible: java.awt.datatransfer.DataFlavor[mimetype=text/uri-list;representationclass=java.lang.String] (file:///home/matej/SeaDrive/current/DND/Tools/Map%20Packs/Mapping-Pack/Interior/Doors/door_curledhandle__window_brass__red_gt.png
)
16:44:30.431 (TransferableHelper.java:579) [AWT-EventQueue-0] INFO  - Possible: java.awt.datatransfer.DataFlavor[mimetype=application/x-java-serialized-object;representationclass=java.lang.String] (file:///home/matej/SeaDrive/current/DND/Tools/Map Packs/Mapping-Pack/Interior/Doors/door_curledhandle__window_brass__red_gt.png)
16:44:30.433 (TransferableHelper.java:579) [AWT-EventQueue-0] INFO  - Possible: java.awt.datatransfer.DataFlavor[mimetype=text/plain;representationclass=java.lang.String] (file:///home/matej/SeaDrive/current/DND/Tools/Map Packs/Mapping-Pack/Interior/Doors/door_curledhandle__window_brass__red_gt.png)
16:44:30.467 (TransferableHelper.java:230) [AWT-EventQueue-0] INFO  - Selected: java.awt.datatransfer.DataFlavor[mimetype=text/uri-list;representationclass=java.lang.String]
16:44:30.493 (ServerMessageHandler.java:61) [SocketClientConnection.ReceiveThread] INFO  - 127.0.0.1-0 :got: PUT_ASSET_MSG
16:44:30.497 (ImageManager.java:428) [pool-7-thread-1] ERROR - BackgroundImageLoader.run(door_curledhandle__window_brass__red_gt,png, c291ecd5ff5b950c3661347f83fbbbe9): image not resolved
java.io.IOException: Could not load image door_curledhandle__window_brass__red_gt
        at net.rptools.lib.image.ImageUtil.bytesToImage(ImageUtil.java:317) ~[MapTool.jar:1.12.1]
        at net.rptools.maptool.util.ImageManager$BackgroundImageLoader.run(ImageManager.java:424) [MapTool.jar:1.12.1]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) [?:?]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) [?:?]
        at java.lang.Thread.run(Unknown Source) [?:?]
16:44:30.535 (ServerMessageHandler.java:61) [SocketClientConnection.ReceiveThread] INFO  - 127.0.0.1-0 :got: PUT_ASSET_MSG
16:44:30.535 (ServerMessageHandler.java:61) [SocketClientConnection.ReceiveThread] INFO  - 127.0.0.1-0 :got: PUT_TOKEN_MSG
16:44:30.536 (ClientMessageHandler.java:86) [SocketClientConnection.ReceiveThread] INFO  - Anonymous User: p got: UPDATE_TOKEN_PROPERTY_MSG
Phergus commented 2 years ago

@thelsing were you able to reproduce the problem prior to implementing the fix?

With two 1.12.1 clients, on two different PCs across my lan, I was only able to get the red Xs for tokens dropped by the player client. Any image I dropped on the server side whether a map, object or token all showed up on the player client.

With your fix, not seeing any red Xs for new images dropped onto the player client.

thelsing commented 2 years ago

Yes. I used different Vendor settings in gradle to reproduce this on the same Laptop. Otherwise both instances of MT will use the same cache.

matejdro commented 2 years ago

Just for clarification: this issue is on local Maptool instance, not on the remote server. From what I can see, fix only affects the server?

thelsing commented 2 years ago

Even local instances have local server running in background.