Closed BanCrash closed 6 years ago
Ideas/suggestions are always welcome. If I don't immediately see the merit, then hopefully you (or whoever is submitting them) can provide arguments and perhaps convince me.
-Just get hours from steam the first time, then respect the hours of the skin. This is implemented without any option, if added there must be an option to enable or disable it.
Steam tracks the time played across devices so I think it makes sense to use Steam's statistics. Is there a specific scenario where it would be advantageous to not always us the value provided by Steam's statistics?
-Added HOURS_LAST_PLAY, ERASE_HOURS_TOTAL, FIRSTPLAYED, TIMESPLAYED, AVERAGE_PLAY_TIME, COMPLETED and PRICE. I want to implement UPDATE_HOURS_TOTAL too. The idea with all this info is to get an icon in the submenu that opens a popup that show all the info of the game (name, notes, etc) and the possibilty of editing that info (not implemented yet). On the other hand, the idea is also add other options to sort the games, for example by price (not implemented yet).
I'm really not sold on the idea of including a game's price:
A property indicating whether or not a game has been completed makes some sense and could be toggled e.g. via the existing slot submenu by adding another button to it. The status could be indicated by adding Completed to the slot highlight. A filter could also be implemented for whether or not a game has been completed.
A popup menu would probably have to be implemented as a separate skin that is loaded and fed information by the main skin. The main skin has a limited height and width for animation purposes that would cut off parts of said popup menu, which would have to be quite large to display all of that information with a reasonable font size. Notes would also have to be possible to scroll through or else long notes could end up being truncated.
-Backups folder with backups of the games.json with a timestamp when is started the skin. The games.json have been corrupted several times because I edit info directly on the noteblock, so I made this solution to avoid lost all the info.
Seems reasonable enough, but maybe the frequency at which these backups are generated should be more restricted. If the user ends up frequently loading/refreshing the skin while e.g. adjusting settings or troubleshooting an issue, then a lot of files would be generated. The number of backups should probably be limited to a certain amount (5-10?). For example in your case you would otherwise end up with around 165+ MB worth of backups after a year of daily backups.
-Add support for languages.
Are you referring to e.g. translation files that could be used to replace text in the GUI? I've used a system like that in some of my Skyrim mods and I think I could implement an equivalent for this.
One of the problems that will have to be tackled is how to handle updates and distribution. A new version of Lauhdutin might add more text that needs to be translated and I would rather not have to either a) delay a release because I have to wait for translations to be updated, or b) deal with partial translations in a release. Perhaps translation files should be in a branch of their own and be provided as additional downloads along with the default English release as the translations are finished? So the user would download the skin and, if they want it, an optional translation file.
Lua's string.format
function should solve most issues that may arise due to language differences in terms of where to place dynamic values (e.g. the number of hours played) in a sentence.
-Show the platform icon on the corner of the banner game without highlighting it (I am not sure if can be a problem with this because add platform images that have copyright...).
I've thought about implementing this many times, but always ended up not doing it because I also am not sure about possible legal ramifications. I think the default stance is that companies don't want others to use their logo/brand in any way because it might give the average person the incorrect impression that the company has something to do with the product/project/event. Any bad publicity gained by the product/project/event might reflect badly on the company as well and they do not want to have to deal with that. For example Steam's official Web API documentation tells 3rd party developers developers to use images that have text saying "This site not associated with Valve Corp." on them when using OpenID to sign in via Steam.
-Add a GUI to show all static filters, to click the filter directly. However there will be filters that still have to be used only with filter input, for example shortcuts filter.
Maybe this could be implemented by reusing the existing slots? So the games would be replaced with the various filters (e.g. Steam, GOG Galaxy, Installed, Hidden, etc. and the potential values/arguments when you click one of the items in the first list). This would mean that one could scroll through a list of filters of an arbitrary length instead of having to deal with a static menu that has to be updated to include every filter as new ones are added.
-Add filters for PlatformOverride too, to can filter for example origin:played.
This should not be terribly difficult and I think I already have a solid idea for an implementation.
Ideas/suggestions are always welcome. If I don't immediately see the merit, then hopefully you (or whoever is submitting them) can provide arguments and perhaps convince me.
Glad to read that!
Steam tracks the time played across devices so I think it makes sense to use Steam's statistics. Is there a specific scenario where it would be advantageous to not always us the value provided by Steam's statistics?
About that I talked in the issue #35 . The reason I do this is because when you use a program like ArchiSteamFarmer or IdleMaster, the games run on idle and that time are added to your playtime, but you aren't actually playing the game. So when you go to play a random game that you don't even know you have, you see that you have 2 hours of playtime already. It is just a minor issue, but I like to see the real time play to know how many hours I spend to complete a specific game.
By the way, those programs are used to gets the steam cards of all your games.
That's why I implemented ERASE_HOURS_TOTAL, that sets hours of a concrete game to 0, and want to implement UPDATE_HOURS_TOTAL, to update the hours of a concrete game only.
I'm really not sold on the idea of including a game's price:
The user already owns all of the listed games. Acquiring the price of a game would have to be implemented for each platform and would probably require scraping a lot of web pages, which could take a while. If the price is only acquired once per game in order to minimize the amount of scraping that is done, then the price is quite likely to be incorrect (e.g. the price was acquired during a sale, before an ongoing sale, or the price has been permanently decreased at a later date).
About price, I forgot to add more explanation. I add that price manually because all you said, you buy a game in a specific scenario that is almost impossible to know (external stores, possibles own discounts...). Currently I am using GaugePowered to introduce the price I pay for all of my games, the problem is that page only supports right now Steam games, that's why I implemented this feature. In my case, there isn't difference because before I introduce manually the price on GaugePowered and now in the skin, so in practice it is the same.
A property indicating whether or not a game has been completed makes some sense and could be toggled e.g. via the existing slot submenu by adding another button to it. The status could be indicated by adding Completed to the slot highlight. A filter could also be implemented for whether or not a game has been completed.
That sounds good!
A popup menu would probably have to be implemented as a separate skin that is loaded and fed information by the main skin. The main skin has a limited height and width for animation purposes that would cut off parts of said popup menu, which would have to be quite large to display all of that information with a reasonable font size. Notes would also have to be possible to scroll through or else long notes could end up being truncated.
I hadn´t thought of that, you're right. That sounds good too!
Seems reasonable enough, but maybe the frequency at which these backups are generated should be more restricted. If the user ends up frequently loading/refreshing the skin while e.g. adjusting settings or troubleshooting an issue, then a lot of files would be generated. The number of backups should probably be limited to a certain amount (5-10?). For example in your case you would otherwise end up with around 165+ MB worth of backups after a year of daily backups.
You are totally right, right now I have 42 files and 19 MB of space used in less than a month, with days that have 4 backups for a short time, so limit that are very reasonable. 10 files sounds great to me, to have enough options to choose.
Are you referring to e.g. translation files that could be used to replace text in the GUI? I've used a system like that in some of my Skyrim mods and I think I could implement an equivalent for this.
One of the problems that will have to be tackled is how to handle updates and distribution. A new version of Lauhdutin might add more text that needs to be translated and I would rather not have to either a) delay a release because I have to wait for translations to be updated, or b) deal with partial translations in a release. Perhaps translation files should be in a branch of their own and be provided as additional downloads along with the default English release as the translations are finished? So the user would download the skin and, if they want it, an optional translation file.
Lua's string.format function should solve most issues that may arise due to language differences in terms of where to place dynamic values (e.g. the number of hours played) in a sentence.
Yes, that is exactly what I talking about.
I think the more reasonable scenario is like you said distribute translations files apart, to avoid any delay or trouble to you by this matter.
I've thought about implementing this many times, but always ended up not doing it because I also am not sure about possible legal ramifications. I think the default stance is that companies don't want others to use their logo/brand in any way because it might give the average person the incorrect impression that the company has something to do with the product/project/event. Any bad publicity gained by the product/project/event might reflect badly on the company as well and they do not want to have to deal with that. For example Steam's official Web API documentation tells 3rd party developers developers to use images that have text saying "This site not associated with Valve Corp." on them when using OpenID to sign in via Steam.
In that case I think the better idea it is like you thought in the past. If there is any possibility of trouble, better avoid that I think.
I figure out a possible trick, but I don't know if it could be source of problems too. The idea I think is to implement all the stuff without including the images, so if the user want to use that feature has to download on his own the images. Like I said I am not sure if this can be problematic too, besides of increase the job the user has to do.
Maybe this could be implemented by reusing the existing slots? So the games would be replaced with the various filters (e.g. Steam, GOG Galaxy, Installed, Hidden, etc. and the potential values/arguments when you click one of the items in the first list). This would mean that one could scroll through a list of filters of an arbitrary length instead of having to deal with a static menu that has to be updated to include every filter as new ones are added.
Well, one more time your idea is much better than mine! I think that sounds great.
This should not be terribly difficult and I think I already have a solid idea for an implementation.
Glad to read that!
Well, thanks you one more time for all your time and your hard work!!!
About the filters GUI I think that can be added even shortcuts folders. The idea I have is to search on all the games to find how many different PlatformOverride are and then added it to the filters part.
Yep. That has been the plan since the beginning. I'm currently thinking of generating a table that contains all of the unique platform override values when the skin is loaded and the Python scripts have finished generating an up-to-date list of games. Those values along with all of the other filters will have to be converted into a data structure appropriate for the GUI, but that will have to wait until version 2.7.0 is done.
Ah, okay! Glad to read that. Sure, like Blizzard it's done when it's done, not before!
About this, I think on three new features:
-Erase games from the list. On the one hand, when a game have a name change (and maybe a steam id change too, I don't know this) appears the game duplicated, instead of replacing it. For example, this happens a while ago with Shovel knight, that changes his name to Shovel Knight: Treasure Trove. So the skin showed that I have Shovel Knight: Treasure Trove installed and Shovel Knight uninstalled.
On the other hand, when there is a free weekend of a game in steam, if you install it that game will appear on your steam library, and in the skin will appear too. But when the free weekend end Steam erase that game of your steam library, but in the skin it still appears.
-Support for subtags, and similar GUI of filters. About this, I think could be usefull to have support to subtags, for example to create own filters. For example:
"tags": {
"0": "The Witness",
"Genre": {
"1": "Adventure",
"2": "Puzzles"
},
"Year": {
"3": "2016"
}
},
And if there is a GUI, then in the GUI will appear three options, "The Witness", that if you pulse it will show directly the game, "Genre", that if you pulse it will show "Adventure" and "Puzzles", like subfilters, and Year that in this case only will show "2016" subfilter.
About subtags I realise that games.json isn't a standard lua table, so I am not sure if that could work...
-Erase games from the list...
Seems like a good idea. It'll probably end up as a button in the slot submenu. A confirmation menu would probably be good in case of misclicks, but I'm not sure how crucial that would be if daily backups become a thing. We'll see. I noticed that I also have two entries for Shovel Knight now that you mentioned it.
-Support for subtags...
This is another idea that I'm not immediately sold on. However, tags could be included in the GUI as a dynamic filter.
Seems like a good idea. It'll probably end up as a button in the slot submenu. A confirmation menu would probably be good in case of misclicks, but I'm not sure how crucial that would be if daily backups become a thing. We'll see. I noticed that I also have two entries for Shovel Knight now that you mentioned it.
Perfect! Whatever you choose will be fine.
This is another idea that I'm not immediately sold on. However, tags could be included in the GUI as a dynamic filter.
Well, that sounds enough good to me. Thank you again!
About the translation system, I see that you are making it within lua part. I think that could be interesting doing it within Rainmeter variables.
I make my own testings and have interesting results. For example, I create a rainmeter variable named "Test 2 Verdad" with the value "Esto és üna prèeba":
[Variables] Test 2 verdad="Esto és üna prèeba"
I substitute in getgames.py "set_skin_status("Procesing...")" for "set_skin_status("#Test 2 verdad#")" and the result is:
Then I restore the original getgames.py and in GUI.lua I substitute "C_STATUS_MESSAGE:Show('Initializing...')" for "C_STATUS_MESSAGE:Show('#Test 2 verdad#')" and the result is the same:
After that, it changes to procesing..., downloading... and the rest.
With this method, in the folder named Languages will be all .inc files for all of the translations (English.inc for default).
In Rainmeter part, write a Variable named Language with the language selected, and then:
@Include=#@#Languages/#Language#.inc
For example:
Language=English @Include=#@#Languages/#Language#.inc
Edit: This also make more easy to translate all rainmeter part (Settings mainly), replacing text for rainmeter variables.
I am working on my reimagination of the skin. First, now the user has to set Skin Width and heigth instead slot widht / height, and then the skin calculates automatically the slot size. All the colours are customizables (right now, with manually setting rgb code. I want to introduce a RGB selector). First, the entire actual skin:
I add one toolbar on the left for custom skin actions and the buttons for the actual toolbar, plus some other icons.
(Left icons are Designed by Dave Gandy from www.flaticon.com)
In the down, I want to create a similar toolbar but with platform launchers, to launch them directly from the skin (not done yet, but here will go):
In the up, I create a Status Bar, where are showed all status messages, and also appears the game name on highlighting, or is used too to search and to manually set the process override:
And in the right, there is another toolbar, in this case is used for three scenarios. When a game is highlighting, the right bar will show all the information of that game. When it isn't a game selected, will show the current playing game, or the last played game if there isn't any current game. If it is the current game, will show the current playtime (only update when you enter the skin, to avoid unnecesary updates of that time when you are not even seeing the skin) In the "now playing" case, I have to change too the text description to avoid confussions (Playtime is the total playtime adding the actual hours, and last time will be the actual play time).
Hope you like it!
Hello again. I have made changes to the skin to adapt it to my own use. I know almost all of this changes are only useful to me, but maybe one of them could be useful to someone else, so I have thought to write here the list of changes I already made or have intention to make for if you think could be one of them useful and want to add them.
If this bother you, just close this issue and sorry about that!
Implemented:
-Just get hours from steam the first time, then respect the hours of the skin. This is implemented without any option, if added there must be an option to enable or disable it.
-Added HOURS_LAST_PLAY, ERASE_HOURS_TOTAL, FIRSTPLAYED, TIMESPLAYED, AVERAGE_PLAY_TIME, COMPLETED and PRICE. I want to implement UPDATE_HOURS_TOTAL too. The idea with all this info is to get an icon in the submenu that opens a popup that show all the info of the game (name, notes, etc) and the possibilty of editing that info (not implemented yet). On the other hand, the idea is also add other options to sort the games, for example by price (not implemented yet).
-Backups folder with backups of the games.json with a timestamp when is started the skin. The games.json have been corrupted several times because I edit info directly on the noteblock, so I made this solution to avoid lost all the info.
Right now I only implemented this, I have intention to implement too if I can and have time to do so:
-Add support for languages. -Show the platform icon on the corner of the banner game without highlighting it (I am not sure if can be a problem with this because add platform images that have copyright...). -Add a GUI to show all static filters, to click the filter directly. However there will be filters that still have to be used only with filter input, for example shortcuts filter. -Add filters for PlatformOverride too, to can filter for example origin:played.
Right now this is all I think. Again sorry if this bother you.