rzetko / galaxy-integration-ffxiv Goto Github PK
View Code? Open in Web Editor NEWFinal Fantasy XIV integration for GOG Galaxy 2
License: MIT License
Final Fantasy XIV integration for GOG Galaxy 2
License: MIT License
Hey,
currently attempting to uninstall the game using the plugins uninstall_game method through Galaxy uninstall game button will fail.
2019-10-14 16:23:17,734 - root - INFO - Handling notification: method=uninstall_game, params={'game_id': 'final_fantasy_xiv_shadowbringers'}
2019-10-14 16:23:17,843 - root - ERROR - Task exception was never retrieved
future: <Task finished coro=<FinalFantasyXIVPlugin.uninstall_game() done, defined at C:\Users\User\AppData\Local\GOG.com\Galaxy\plugins\installed\galaxy-integration-ffxiv-1.1.1 (1)\plugin.py:148> exception=TypeError("'NoneType' object is not iterable")>
Traceback (most recent call last):
File "C:\Users\User\AppData\Local\GOG.com\Galaxy\plugins\installed\galaxy-integration-ffxiv-1.1.1 (1)\plugin.py", line 149, in uninstall_game
self._game_instances[0].delete_game()
File "C:\Users\User\AppData\Local\GOG.com\Galaxy\plugins\installed\galaxy-integration-ffxiv-1.1.1 (1)\ffxiv_localgame.py", line 22, in delete_game
subprocess.Popen(ffxiv_tools.get_uninstall_exe(), creationflags=0x00000008, cwd = self._dir, shell=True)
File "D:\obj\Windows-Release\37win32_Release\msi_python\zip_win32\subprocess.py", line 775, in __init__
File "D:\obj\Windows-Release\37win32_Release\msi_python\zip_win32\subprocess.py", line 1119, in _execute_child
File "D:\obj\Windows-Release\37win32_Release\msi_python\zip_win32\subprocess.py", line 523, in list2cmdline
TypeError: 'NoneType' object is not iterable
2019-10-14 16:23:18,539 - root - DEBUG - Received 55 bytes of data
2019-10-14 16:23:18,540 - root - INFO - Handling request: id=96, method=ping, params={}
I see that there is a difference between what the get_uninstall_exe() method looks for in registry and what i have in mine
Hope this helps
This may be an issue on Galaxy itself and not specifically this integration, but Galaxy is asking me to install FFXIV and when I click the "Install" button, the installer asks me if I want to uninstall my game. I have it installed as a portable program (it's in my user folder, C:\Users\me\Games), not through Steam or Program Files.
Hey, it would be cool to add real achievement support. See this similar topic for details: Mixaill/galaxy-integration-gw2#4 (comment)
This might be a bit of a special use case, but I bought FFXIV through Steam and yet launch it outside of Steam (don't want to have the Steam client running in the background constantly).
Trying to integrate that into GOG Galaxy, and also having this integration installed, this results in FF XIV being detected twice:
What I'd basically want is a way to manually add my Steam-installed FF XIV through this integration so that it is launched with the -issteam
-flag to prevent the Steam client from booted alongside it.
Would that be possible?
Hello,
If a user downloads final fantasy installer but didn't finish downloading the game itself then plugin will recognize it as installed (a registry entry is created i guess) but it will throw an exception on owned games because the folder structure is not as expected
2019-11-25 12:46:43,343 - root - INFO - Handling request: id=8, method=import_local_games, params={}
2019-11-25 12:46:43,381 - root - DEBUG - Sending data: {"jsonrpc": "2.0", "id": "8", "result": {"local_games": [{"game_id": "final_fantasy_xiv_shadowbringers", "local_game_state": 1}]}}
2019-11-25 12:46:43,381 - root - DEBUG - Received 68 bytes of data
2019-11-25 12:46:43,381 - root - INFO - Handling request: id=9, method=import_owned_games, params={}
2019-11-25 12:46:43,443 - root - ERROR - Unexpected exception raised in plugin handler
Traceback (most recent call last):
File "C:\Users\User\AppData\Local\GOG.com\Galaxy\plugins\installed\ff\modules\galaxy\api\jsonrpc.py", line 187, in handle
result = await callback(*bound_args.args, **bound_args.kwargs)
File "C:\Users\User\AppData\Local\GOG.com\Galaxy\plugins\installed\ff\modules\galaxy\api\plugin.py", line 152, in method
result = await handler(*args, **kwargs)
File "C:\Users\User\AppData\Local\GOG.com\Galaxy\plugins\installed\ff\plugin.py", line 115, in get_owned_games
dlclist = [ item for item in os.listdir(dlc_folder) if os.path.isdir(os.path.join(dlc_folder, item)) ]
FileNotFoundError: [WinError 3] The system cannot find the path specified: 'd:\\Program Files (x86)\\SquareEnix\\FINAL FANTASY XIV - A Realm Reborn\\game\\sqpack\\'
2019-11-25 12:46:43,445 - root - DEBUG - Sending data: {"jsonrpc": "2.0", "id": "9", "error": {"code": 0, "message": "Unknown error", "data": "[WinError 3] The system cannot find the path specified: 'd:\\\\Program Files (x86)\\\\SquareEnix\\\\FINAL FANTASY XIV - A Realm Reborn\\\\game\\\\sqpack\\\\'"}}
2019-11-25 12:46:43,446 - root - DEBUG - Received 65 bytes of data
2019-11-25 12:46:43,446 - root - INFO - Handling request: id=10, method=import_friends, params={}
Tbh i think that owned game status should not be based on local files and in the case of a plugin for a single game its fine to simply report it as owned from the get go (without dlcs - from what i see galaxy doesnt react to dlc information in any way right now).
If you can't find the dlc ownership through endpoint then its completely reasonable to do self.add_game() for the same id and title with additional dlc information once you find them locally (since its an additional info).
Lastly it would be best to check if path exists whenever you do such operations.
Hey,
we're planning on creating a fork/autoupdate system with selected plugins. This would allow us to create a list of curated and reviewed plugins which could be of use to GOG Galaxy people.
Of course you will be credited as the creator and developer of the plugin in the fork readme and possibly other places.
Before we do that we need to ask you to create a fog_release branch which would contain only your plugin code, manifest.json and a requirements.txt file (without 3rdparty directories). For Github releases, we will include whole directory where manifest.json is placed and build dependencies directly there. This is for easier code verification. Code for repo synchronization can be found here: https://github.com/FriendsOfGalaxy/galaxy-integrations-updater
So in your case the branch could have an example structure of:
html/your-html-files.html
your-python-files.py
manifest.json
requirements.txt
README.md
LICENSE
just without the modules directory
This is partially a concession for free trial players, since they don't have access to Lodestone.
I personally got around this using XIVAPI, a third party API, to search for my character and got the ID from that, though it's not particularly user-friendly if you're not familiar with APIs.
The specific endpoint to use would be /character/search
.
Why does this integration use art from the original FFXIV instead of the newer art from the Shadowbringers page on Square's site?
It seems weird to use art from past versions of an MMO, using the newest art just makes more sense to me. Square Enix's store page has a format not too different from the actual game pages in GOG Galaxy.
Thanks for getting this integration for GOG, much appreciated.
Would be nice to get the Meteor symbol added in as a source icon if possible? Currently the only game I have appearing with a blank source.
Hopefully not too hard to integrate!
Hey,
if i connect the plugin without having FFXIV previously installed and then install it through 'Install' in Galaxy Client then the plugin won't send information to Galaxy that the game status changed to Installed until the next client restart.
Similar thing happens if the game was uninstalled while plugin was running. The state won't be updated until user restarts the client.
I think it would be best to check the game installation status from time to time and report it using self.update_local_game_status() method.
Hope this helps.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.