Posted April 19, 2021
high rated
Hello, I hope everyone's fine and healthy.
After being a "desktop" programmer for many years (mostly C++), I recently dived into web development (as a hobby - who knows...?).
So, I learned a lot about NodeJS (and JavaScript in general) and thought that I should put my new knowledge into practice by creating something useful. And I ended up creating a downloader for my GOG games :)
Now, I know there are already some excellent tools (e.g. gogrepo) already used by the community. My intention was not to replace them, but as I said I wanted to practice and see how far I can go.
The result is a NodeJS application, with a GUI. It is currently very basic (e.g. only handles games, not extras or movies) but of course can be extended to support more stuff in the future. There, you get a view of your library in tiles, with a basic pagination and search functionality. By clicking on a game tile you can view all available installers for it, grouped by OS and language, and start downloading all the files of an installer with a single click (kind of what I missed about the official old GOG downloader). I also implemented a simple download queue, where installers are pushed and handled with a max of 4 concurrent active downloads. There is also a pause/resume functionality which (I think) works as well. The next task is to implement the functionality to discover updates, so given a local directory the app will scan the folder structure and compare files to the corresponding ones retrieved from the GOG server.
Of course, there are lots of features missing (e.g. download extras, perform validation via md5, etc.) which will be added. Also, the current GUI is rather simple as I don't want to focus on presentation before implementing at least some important features.
Now, the only "limitation" is that all pages are rendered statically on the server (i.e. the application itself) which means that the downloads page will not be refreshed automatically - it needs to be refreshed manually (still you can see 'live' output from the server on the console). But this is not an issue for now, as I just wanted to have a visual representation of things to be able to see how it's going. When I implement more features, as a second major step I intend to turn the server application into a RESTful API and implement the views as a separate client application (which will of course be able to refresh itself dynamically). This will also allow other people to implement their own views as well.
To run this application, one would need to only install NodeJS of course (it is fairly light, ~70MB on my installation), but it is actually the only requirement. After that, an initial setup is needed for the app (NOT a system-wide setup, it is just a download of needed node modules in the app directory, currently ~15MB). This setup is an execution of a simple command and is needed only once. Then, you're good to go. Run the app, open your favorite browser and visit your new downloader server!
So, I would like your opinions. And sorry for the long post!
After being a "desktop" programmer for many years (mostly C++), I recently dived into web development (as a hobby - who knows...?).
So, I learned a lot about NodeJS (and JavaScript in general) and thought that I should put my new knowledge into practice by creating something useful. And I ended up creating a downloader for my GOG games :)
Now, I know there are already some excellent tools (e.g. gogrepo) already used by the community. My intention was not to replace them, but as I said I wanted to practice and see how far I can go.
The result is a NodeJS application, with a GUI. It is currently very basic (e.g. only handles games, not extras or movies) but of course can be extended to support more stuff in the future. There, you get a view of your library in tiles, with a basic pagination and search functionality. By clicking on a game tile you can view all available installers for it, grouped by OS and language, and start downloading all the files of an installer with a single click (kind of what I missed about the official old GOG downloader). I also implemented a simple download queue, where installers are pushed and handled with a max of 4 concurrent active downloads. There is also a pause/resume functionality which (I think) works as well. The next task is to implement the functionality to discover updates, so given a local directory the app will scan the folder structure and compare files to the corresponding ones retrieved from the GOG server.
Of course, there are lots of features missing (e.g. download extras, perform validation via md5, etc.) which will be added. Also, the current GUI is rather simple as I don't want to focus on presentation before implementing at least some important features.
Now, the only "limitation" is that all pages are rendered statically on the server (i.e. the application itself) which means that the downloads page will not be refreshed automatically - it needs to be refreshed manually (still you can see 'live' output from the server on the console). But this is not an issue for now, as I just wanted to have a visual representation of things to be able to see how it's going. When I implement more features, as a second major step I intend to turn the server application into a RESTful API and implement the views as a separate client application (which will of course be able to refresh itself dynamically). This will also allow other people to implement their own views as well.
To run this application, one would need to only install NodeJS of course (it is fairly light, ~70MB on my installation), but it is actually the only requirement. After that, an initial setup is needed for the app (NOT a system-wide setup, it is just a download of needed node modules in the app directory, currently ~15MB). This setup is an execution of a simple command and is needed only once. Then, you're good to go. Run the app, open your favorite browser and visit your new downloader server!
So, I would like your opinions. And sorry for the long post!