HearthSim / Hearthstone-Deck-Tracker

A deck tracker and deck manager for Hearthstone on Windows
https://hsreplay.net/downloads/
4.61k stars 1.11k forks source link

Show card images on hover doesn't work on Linux #4234

Open icetbr opened 3 years ago

icetbr commented 3 years ago

I know Linux, is not a priority, but either put is as optional (https://github.com/HearthSim/Hearthstone-Deck-Tracker/issues/4224) or fix it please.

I get the gray "Loading.." card only. Images/CardImages/_inProgress shows zero length files.

10:29:45 AM|Info|AssetDownloader.DownloadAsset >> Starting download for SCH_235.png.
10:29:45 AM|Info|AssetDownloader.DownloadFileAsync >> Waiting to cleanup SCH_235.png.
10:29:45 AM|Error|AssetDownloader.DownloadFileAsync >> Unable to download SCH_235.png: The underlying connection was closed: An unexpected error occurred on a send.
Alaharon123 commented 3 years ago

Some additional information:

After trying to load images, /drive_c/users//Application Data/HearthstoneDeckTracker/Images/CardImages contains the files Cache.xml and Cach.xml.bak, which contain the same stuff as doing the same on PC. However, there are no images in the folder, and the _inProgress folder that it contains is full of 0 byte picture files image

Alaharon123 commented 3 years ago

Here are the WINE logs for trying to load a picture so you can hopefully see what exactly isn't implemented:

0024:fixme:wtsapi:WTSRegisterSessionNotification Stub 00070060 0x00000000
0024:fixme:uiautomation:UiaReturnRawElementProvider (00070060, 0, fffffffc, 0BA34438): stub!
0198:fixme:secur32:schannel_get_cipher_algid unknown algorithm 23
0198:fixme:secur32:schannel_get_mac_algid unknown algorithm 200, cipher 23
0198:fixme:secur32:schannel_get_cipher_algid unknown algorithm 23
0198:fixme:secur32:schannel_get_mac_algid unknown algorithm 200, cipher 23
0198:fixme:crypt:CNG_VerifySignature Failed to verify signature: c000a000
0198:fixme:ntdll:RtlNtStatusToDosErrorNoTeb no mapping for c000a000
019c:fixme:secur32:schannel_get_cipher_algid unknown algorithm 23
019c:fixme:secur32:schannel_get_mac_algid unknown algorithm 200, cipher 23
019c:fixme:secur32:schannel_get_cipher_algid unknown algorithm 23
019c:fixme:secur32:schannel_get_mac_algid unknown algorithm 200, cipher 23
019c:fixme:crypt:CNG_VerifySignature Failed to verify signature: c000a000
019c:fixme:ntdll:RtlNtStatusToDosErrorNoTeb no mapping for c000a000
0024:fixme:urlmon:SecManagerImpl_MapUrlToZone not supported flags: 00000001
00c8:fixme:ole:Context_CC_ContextCallback (091DB508/091DB50C)->(0167EF00, 0418FB64, {d7174f82-36b8-4aa8-800a-e963ab2dfab9}, 2, 00000000)
00c8:fixme:ole:Context_CC_ContextCallback (091DB508/091DB50C)->(0167EF00, 0418FAE4, {d7174f82-36b8-4aa8-800a-e963ab2dfab9}, 2, 00000000)
0024:fixme:file:ReplaceFileW Ignoring flags 1
0024:fixme:wtsapi:WTSUnRegisterSessionNotification Stub 00070060
0194:fixme:thread:NtQueryInformationThread ThreadIsIoPending info class not supported yet
0198:fixme:thread:NtQueryInformationThread ThreadIsIoPending info class not supported yet
0168:fixme:thread:NtQueryInformationThread ThreadIsIoPending info class not supported yet
0168:fixme:thread:NtQueryInformationThread ThreadIsIoPending info class not supported yet

And I tried downloading the file for First Day of School from https://art.hearthstonejson.com/v1/render/latest/enUS/512x/SCH_247.png and putting it in the appropriate place and deleting the _inProgress file and it does show up in the tooltip now so the problem is definitely with the downloading rather than displaying.

Dug a little into the code and the error is clearly happening with the WebClient().DownloadFileTaskAsync method in Hearthstone Deck Tracker/Utility/Assets/AssetDownloader.cs. Note that the docs for WebClient() recommend using the the System.Net.Http.HttpClient class instead for new development, but I don't know how important that is. Googling The underlying connection was closed and An unexpected error occurred on a send. from the OP gives a bunch of possible solutions that may or may not be helpful. I hope someone can figure this out and fix this? Or at least figure out what to report to WINE lol

riQQ commented 3 years ago

To me that looks like Wine doesn't implement the crypto to download the images via TLS. I'm not sure but I would guess that WebClient vs HttpClient shouldn't make a difference for this.

icetbr commented 3 years ago

I tried winetricks crypt32, winhttp and wininet as suggested here

https://bugs.winehq.org/show_bug.cgi?id=47597

Also secur32.

No deal. Didn't try a clean prefix though.

CharString commented 3 years ago

I've hacked together a workaround that monitors which cards are downloaded and then downloads them. It "solves" both this and #4169

inverimus commented 3 years ago

I've hacked together a workaround that monitors which cards are downloaded and then downloads them. It "solves" both this and #4169

Thank you so much for this. I was trying everything I could think of to get it working and was about to write something like this myself.