Tool Others F95Checker [WillyJL]

5.00 star(s) 21 Votes

WillyJL

Well-Known Member
Respected User
Mar 7, 2019
1,062
844
Hello thank you for the tool! A feature to add: categories/custom flags/tags/colors/rating. Looks too messy without it.
local star ratings are planned, tags are planned but only as a filter option
 
  • Like
Reactions: embed

GAB

Salty Montrealer
Donor
May 10, 2017
2,358
17,759
Starting to get more adapted to your app and I got more feature suggestions
  • backup features (or just add where the folder storage is located in the main post on forum)
    • Choose what cover picture to choose instead of Current or (with box checked) Old image
  • Close button Switches to background mode instead of killing the app
  • again, and I can't stress this enough, a way to add multiple link at once (personally thinking of making a power shell script to automate the key press required for the games I follow)
  • control audio volume settings from the app (or add customised noise instead of default windows noise)
  • Find out if a maxed retries per requests failed and which one (not sure if useful, never had one before)
  • have headers and control the size of each column
  • Show how many games are present in the list, how many installed and/or fully played
P.S. I like how easy it is to apply one game after another and it notifies you if you have an alert or email, thanks a lot for that :)
 

Dukez

Member
Dec 19, 2020
403
1,511
Would also like the backup thing, exporting a list that can be re-imported for peace of mind would be nice. Same with the displaying number of games (e.g you want to compare how many in program vs in your games folder quickly incase you missed something).

I'd love to see like a thumbnails way of listing the games, but I get it probably won't happen and that's fine.
 

GAB

Salty Montrealer
Donor
May 10, 2017
2,358
17,759
looks like after an incalculable amount of link added( 1645745452715.png ), the app will bug with freeze, connection error (already tried the certificate solution) and then multiple error screen for each thread like:
F95Checker_IYwuYHExjr.png dwm_arOAPKP85U.png

Not sure if I should try to refresh again or change the "max retries per request" or "max threads for refresh"
 

unroot

Member
Aug 14, 2019
106
65
...connection error (already tried the certificate solution) and then multiple error screen for each thread like:
View attachment 1672831 View attachment 1672832

Not sure if I should try to refresh again or change the "max retries per request" or "max threads for refresh"
I will quote WillyJL here from a few weeks ago:

yea well thats a common timeout error, simply your internet was working a little slow at some point...
Those two settings are best left alone.
Retries... well, if your connection is wanky at times you could rise it a bit so the checker tries more times before declaring an error (time-out, not found or such)
Max threads... works a bit unexpected. Every game in the list creates a async thread and above 100 games it auto-matches the number to list length. Ref from dev: here

So my best guess is: close the Checker, (optional: make a backup of your config), open it and try to refresh. Mostly it chokes on something minor as F95Zone doesn't exactly provides an API for tools like this. (On my machine it always declares connection errors till i have a new alert or update...)
 

WillyJL

Well-Known Member
Respected User
Mar 7, 2019
1,062
844
looks like after an incalculable amount of link added( View attachment 1672817 ), the app will bug with freeze, connection error (already tried the certificate solution) and then multiple error screen for each thread like:
View attachment 1672831 View attachment 1672832

Not sure if I should try to refresh again or change the "max retries per request" or "max threads for refresh"
I'll make everything a bit clearer:
Each game to be checked means 1 request. Then you add another one for checking alerts + dms (they both get fetched in a single request).
So in your case you have 802 games + alerts + dms = 803 requests.

How I check the games is through a special type of web request. I'll briefly explain:
The most common request is GET: you ask the website and receive headers (info) + content (the webpage).
Then you have POST (and similars): you give the website some data and receive headers + response.
Finally you have HEAD: same as GET, but you only receive headers.
This is important because the headers are generally very small compared to the content which is quite (it contains the whole code for the webpage you see in your browser). Now what I do is connect to a game thread page, which includes the title (look at the top here: f95zone.to/threads/f95checker-8-5-willyjl.44173/...) with special characters removed. When you connect to said URL but the title changed, the URL will be different too so you will be redirected (for example to f95zone.to/threads/f95checker-8-6-willyjl.44173/...). The redirection part happens in the headers so I don't need to fetch the whole webpage, only the headers. So I use HEAD requests. Basically if the headers of the HEAD request contain a redirect, I know the title changed so the game was very likely updated, while if there is no redirect the game should be the same.

Now HEAD requests and very light, so up until a certain point they can be sent all together. This is what the threads do:
Each thread runs at the same time and makes a request to all the URLs it is assigned, one after the other. If there is the same amount, or more, of threads compared to requests, then each thread makes a single request, so they all happen at the same time. If there are more requests than threads, then each thread will make its first request then make a second one after, and so on until all are finished.
This means that if your PC / internet connection can handle all the threads, it will go very fast, but if it cannot it will get stuck (like it did for you). I put the option to change the amount of threads because it's a very delicate balance that you need to find for yourself: too many threads will get them stuck, too few threads means that it takes longer since it could do more at the same time. But 800 threads is A LOT, that is your issue. Yes the current way thread count works is kinda stupid, idk what I was thinking... but for your case I suggest trying like 80 threads? This way your PC and connection should be able to handle 80 connections at the same time, and each thread will make 10 total requests (one after the other). (maybe make it 81 threads, so it can also get the last 3 requests within those 10 request cycles)

On the other hand the max retries is a very different concept. Each request that a thread makes might fail and return an error. If this happens it will be tried again, until the max number of retries is reached, at which point you get a message box for it.

In your situation it's kind of a disaster: you are trying to make 800 connections at the same time, which is nearly impossible, and because of that it gets stuck and they all fail because of timeout (they were stuck and took too long). Since they failed (timeout) they will all try again, and as before, try all try again at the same time.
I say keep 80 threads and 3 retries. Something like that should be fine.
 
Last edited:

GAB

Salty Montrealer
Donor
May 10, 2017
2,358
17,759
In your situation it's kind of a disaster
Damn right it's a disaster :LUL: ! It gave me a BSOD and didn't save work (nothing dramatic tho, I lost near nothing in the end)

Thanks for the very informative description and I'll try to open the checker today and apply your recommendation, see how it goes and give feedback on it.

update: it worked great and had a screen sized of games updated
 
Last edited:
  • Like
Reactions: WillyJL

CCrusader

Member
Nov 29, 2020
298
700
Got some kind of new error messages, never seen them before. It had the same error on like 8 other games but they all looked the same so I just only took 2 screenshots.
 

unroot

Member
Aug 14, 2019
106
65
Got some kind of new error messages, never seen them before. It had the same error on like 8 other games but they all looked the same so I just only took 2 screenshots.
Again i can only quote the dev here:
yea well thats a common timeout error, simply your internet was working a little slow at some point...
As the dev has shared, that error can happen too if your list of games is huge as the checker will try to make many requests.
 

Padre Katyusha

I can't be called a woman cause I'm not hot enough
Uploader
Jun 4, 2019
839
5,083
Could you add a option to increase interface? The GUI looks too small.
 

ninja_wunder

New Member
Oct 25, 2017
6
2
Getting this when trying to update or add any new entry.
View attachment 1700390
I am getting similar errors on linux. I cannot login or add any games on a fresh install of 8.5 downloaded from Github Releases. This is also present in the latest github commit 34c9dede26806b7157a092c1e4ea2920aef1b73b

Python:
Traceback (most recent call last):
  File "/home/me/Games/F95Zone/F95Checker/modules/api.py", line 108, in login
    globals.token = token_soup.select_one('input[name="_xfToken"]').get('value')
AttributeError: 'NoneType' object has no attribute 'get'
 
Last edited:

Dukez

Member
Dec 19, 2020
403
1,511
you know a nice feature might be having check boxes for like using a walkthrough mod, IC patch, etc
 

unroot

Member
Aug 14, 2019
106
65
It seems those _xfToken errors happens as the module soup tries to extract data from the cookie during login (all through the Checker, not your browser)
I don't know for sure how you trick the tool to do the login procedure again but you could always add the cookie data manually as explained here (win version, linux path for the .json should be ~/.f95checker/f95checker.json).
 

ninja_wunder

New Member
Oct 25, 2017
6
2
It seems those _xfToken errors happens as the module soup tries to extract data from the cookie during login (all through the Checker, not your browser)
I don't know for sure how you trick the tool to do the login procedure again but you could always add the cookie data manually as explained here (win version, linux path for the .json should be ~/.f95checker/f95checker.json).
Thanks, I was able to add the xf_csrf and xf_user cookie values from Firefox's dev tools after clearing cookies and logging in to F95Zone directed, but the same error still occurs. Just for fun, I also tried adding xf_session to the list of cookies, but that didn't work, either.

Python:
Something went wrong...

Traceback (most recent call last):
  File "/home/andrew/Games/F95Zone/F95Checker/modules/api.py", line 108, in login
    globals.token = token_soup.select_one('input[name="_xfToken"]').get('value')
AttributeError: 'NoneType' object has no attribute 'get'
Perhaps the program is looking for a nonexistent cookie, _xfToken? I did not see that cookie in Firefox at all.
 
Last edited:

WillyJL

Well-Known Member
Respected User
Mar 7, 2019
1,062
844
Could you add a option to increase interface? The GUI looks too small.
will add to planned features
Getting this when trying to update or add any new entry.
View attachment 1700390
I am getting similar errors on linux. I cannot login or add any games on a fresh install of 8.5 downloaded from Github Releases. This is also present in the latest github commit 34c9dede26806b7157a092c1e4ea2920aef1b73b

Python:
Traceback (most recent call last):
  File "/home/me/Games/F95Zone/F95Checker/modules/api.py", line 108, in login
    globals.token = token_soup.select_one('input[name="_xfToken"]').get('value')
AttributeError: 'NoneType' object has no attribute 'get'
It seems those _xfToken errors happens as the module soup tries to extract data from the cookie during login (all through the Checker, not your browser)
I don't know for sure how you trick the tool to do the login procedure again but you could always add the cookie data manually as explained here (win version, linux path for the .json should be ~/.f95checker/f95checker.json).
Thanks, I was able to add the xf_csrf and xf_user cookie values from Firefox's dev tools after clearing cookies and logging in to F95Zone directed, but the same error still occurs. Just for fun, I also tried adding xf_session to the list of cookies, but that didn't work, either.

Python:
Something went wrong...

Traceback (most recent call last):
  File "/home/andrew/Games/F95Zone/F95Checker/modules/api.py", line 108, in login
    globals.token = token_soup.select_one('input[name="_xfToken"]').get('value')
AttributeError: 'NoneType' object has no attribute 'get'
Perhaps the program is looking for a nonexistent cookie, _xfToken? I did not see that cookie in Firefox at all.
yea so f95zone is a forum like site, and likealmost any other forum like website they are based on xenforo. im not too sure what it means, but all i know is that the xfToken (meaning of course xenforo token) is needed for loading certain pages properly. i think it has something to do with the session. almost like the session info is calculated based on your user data and token combined, so to be logged in you need all three and not having even one of these can cause issues with login. again all this might not be exact, this is speculation and also i havent touched that code in quite a while so it might not even remember correctly.

anyway, this xfToken is included in any webpage you request from f95zone, somewhere in the html head section. so what i do with the tool is the first time you connect you instead request the homepage just to obtain the token, and then go on with the other requests as normal since you now have the token.

if the token is missing from the html, then if will not be able to get the value and so it throws that error. there could be many reasons as to why the token is not there, but generally speaking its because your connection never actually made it to f95zone. from past experience i can tell you it is most likely cloudflare bitching around, maybe cos it thinks your ip is suspicious or something else. i suggest trying with a vpn or on another network. could also be a firewall issue afaik

EDIT: actually i have started experiencing this issue myself too. and if you open f95zone in a regular browser you can see that before getting to the page you are briefly on a DDoS-Guard page, similar to the previous cloudflare issue. however i dont know if / how i can fix this yet, and the severity of the issue...
 
Last edited:

ninja_wunder

New Member
Oct 25, 2017
6
2
yea so f95zone is a forum like site, and likealmost any other forum like website they are based on xenforo. im not too sure what it means, but all i know is that the xfToken (meaning of course xenforo token) is needed for loading certain pages properly. i think it has something to do with the session. almost like the session info is calculated based on your user data and token combined, so to be logged in you need all three and not having even one of these can cause issues with login. again all this might not be exact, this is speculation and also i havent touched that code in quite a while so it might not even remember correctly.

anyway, this xfToken is included in any webpage you request from f95zone, somewhere in the html head section. so what i do with the tool is the first time you connect you instead request the homepage just to obtain the token, and then go on with the other requests as normal since you now have the token.

if the token is missing from the html, then if will not be able to get the value and so it throws that error. there could be many reasons as to why the token is not there, but generally speaking its because your connection never actually made it to f95zone. from past experience i can tell you it is most likely cloudflare bitching around, maybe cos it thinks your ip is suspicious or something else. i suggest trying with a vpn or on another network. could also be a firewall issue afaik

EDIT: actually i have started experiencing this issue myself too. and if you open f95zone in a regular browser you can see that before getting to the page you are briefly on a DDoS-Guard page, similar to the previous cloudflare issue. however i dont know if / how i can fix this yet, and the severity of the issue...

Confirmed. Seems like the forum's new DDOS-GUARD is to blame. :(

A related-ish project Yet Another Manager rolled it's own library and is looking to bypass this as well. A contributor to their repo found which seems promising. Maybe something to investigate?

Another possible solution would be to bundle the b binaries for (a bypass proxy) which supports Clioudflare and DDOS-GUARD as of v2.2.0. I am testing FlareSolverr in a VM and will report back.

Thanks for all of your work to make F95Checker an amazing app! :)
 
Aug 5, 2017
141
152
Weird bug, for some reason i'm getting a few games with the wrong game_id:

normally it's just the thread number, but some are "to/threads/#####", which means the image isn't found.

Just editing the .json file to remove the to/threads/ part fixes it.

E: also if you use a random page to add the game it's not stripped out of the thread url, so you end up with threads/blurb.####/page-123

E2: it's a trivial fix for both of them. I don't have a github account that i'm willing to link to my f95 name with but I'll give you the diff here
Code:
diff --git a/modules/callbacks.py b/modules/callbacks.py
index 36731da..00327cb 100644
--- a/modules/callbacks.py
+++ b/modules/callbacks.py
@@ -79,7 +79,15 @@ async def add_game(*kw):
             globals.gui.add_input.setFocus()
             return

+    # if we are given a link to a page deeper in the thread trim it off
+    trim = link.rfind('/page-')
+    if trim != -1:
+        link = link[:trim+1]
     game_id = link[link.rfind('.')+1:link.rfind('/')]
+    # if the URL is in the form f95zone.to/threads/#####/
+    # we will get the wrong game_id, so clean it up.  No need to test,
+    # if the text isn't found nothing will change.
+    game_id = game_id.replace('to/threads/','')

     # Config
     if game_id in globals.config["games"]:
 
Last edited:

Noctie666

Newbie
Dec 5, 2021
61
101
I'll make everything a bit clearer:
Each game to be checked means 1 request. Then you add another one for checking alerts + dms (they both get fetched in a single request).
So in your case you have 802 games + alerts + dms = 803 requests.

How I check the games is through a special type of web request. I'll briefly explain:
The most common request is GET: you ask the website and receive headers (info) + content (the webpage).
Then you have POST (and similars): you give the website some data and receive headers + response.
Finally you have HEAD: same as GET, but you only receive headers.
This is important because the headers are generally very small compared to the content which is quite (it contains the whole code for the webpage you see in your browser). Now what I do is connect to a game thread page, which includes the title (look at the top here: f95zone.to/threads/f95checker-8-5-willyjl.44173/...) with special characters removed. When you connect to said URL but the title changed, the URL will be different too so you will be redirected (for example to f95zone.to/threads/f95checker-8-6-willyjl.44173/...). The redirection part happens in the headers so I don't need to fetch the whole webpage, only the headers. So I use HEAD requests. Basically if the headers of the HEAD request contain a redirect, I know the title changed so the game was very likely updated, while if there is no redirect the game should be the same.

Now HEAD requests and very light, so up until a certain point they can be sent all together. This is what the threads do:
Each thread runs at the same time and makes a request to all the URLs it is assigned, one after the other. If there is the same amount, or more, of threads compared to requests, then each thread makes a single request, so they all happen at the same time. If there are more requests than threads, then each thread will make its first request then make a second one after, and so on until all are finished.
This means that if your PC / internet connection can handle all the threads, it will go very fast, but if it cannot it will get stuck (like it did for you). I put the option to change the amount of threads because it's a very delicate balance that you need to find for yourself: too many threads will get them stuck, too few threads means that it takes longer since it could do more at the same time. But 800 threads is A LOT, that is your issue. Yes the current way thread count works is kinda stupid, idk what I was thinking... but for your case I suggest trying like 80 threads? This way your PC and connection should be able to handle 80 connections at the same time, and each thread will make 10 total requests (one after the other). (maybe make it 81 threads, so it can also get the last 3 requests within those 10 request cycles)

On the other hand the max retries is a very different concept. Each request that a thread makes might fail and return an error. If this happens it will be tried again, until the max number of retries is reached, at which point you get a message box for it.

In your situation it's kind of a disaster: you are trying to make 800 connections at the same time, which is nearly impossible, and because of that it gets stuck and they all fail because of timeout (they were stuck and took too long). Since they failed (timeout) they will all try again, and as before, try all try again at the same time.
I say keep 80 threads and 3 retries. Something like that should be fine.
I have around 400 games and I'm also having trouble with the app being very slow and getting random errors. If I set threads to 80 will it still check every game ?
 
5.00 star(s) 21 Votes