Giter Club home page Giter Club logo

resolute's People

Contributors

gawdl3y avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

resolute's Issues

Allow configuration of the HTTP connection timeout

As title, environments with unstable connections are entirely unable to download mods with Resolute.
Due to a temporary situation, my average latency times are quite high, and Resolute seems to not like that, as I get timeout errors as the image below.

image

it is to note that regular downloads of the files via browsers, download managers and such are possible.

Latency test to nearest CF edge of my connection for reference

image

I'm aware that this is most likely not a priority, but a more robust download system would definitely be of benefit. Or at least a way to set a manual timeout value that is not as strict.

Custom update dialog

The app should have its own custom update dialog rather than using the default Tauri one.
This will allow proper display of the markdown changelogs.

Atomic mod artifact downloads

Mod artifact downloads done by the Resolute library code should be atomic (download to a temporary file then moved/renamed), thus being much less error-prone in the event of networking issues or other problems encountered. Any errors encountered while downloading an artifact should result in no further artifacts being downloaded, any already-downloaded ones deleted, and the user should be alerted to the failure.

Allow recognition of installed mods with different filenames than the manifest specifies

Looks like any file that contains dll is located and listed, notably .dll.old and .dll.disabled. These will add additional 'Unrecognized' entries.

792fc0cd71

When updating, the .dll.old file will also be picked up and show as another entry, even if the hash matches an existing hash of a known mod
589d04b019 These two entries are for the same mod, one of which is ending in '.dll.old' but they have the same hash

Text styles are inconsistent

Text styles are currently used inconsistently throughout the UI - some are unspecified, some headers are used, and the body text classes are mostly unused. Ideally, every bit of text should have a proper text style applied if it isn't already by a Vuetify component.

Log file

The application should forward all internal logging to a log file (or multiple) in one of its directories.
This will greatly increase the transparency of its operation and allow for much easier debugging of production builds in the future.

Standalone exe download

I think there should be a standalone exe download, as I like to put the resonite folder to have everything in one place

Improvements to fuzzy searching/filters

Being able to search the contents of name + tag/description/etc in the same query separated by spaces would be beneficial especially as partial matches. I'm not sure how much partial matching it currently allows as it seems to include spaces in the search

Searching for "No " should still find NoTankControls but doesn't as the mod name doesn't have a space and the description doesn't include it either.

More mod info from DLL files for mods outside of the manifest

I'd love to see the DLL version info be tried to be parsed and be shown similarly as mods from the manifest. Though I'd except the unknown mods to keep the blue question mark to indicate that they aren't actually from the manifest, and the details are just provided by the file metadata :P

I do realize this is most likely a low priority feature request, so I did play around with the idea of making a PR but for now I ran out of time ๐Ÿ˜…

fn get_assembly_version<P: AsRef<Path>>(path: &P) -> Option<semver::Version> {
	use pelite::FileMap;
	use pelite::pe32::{Pe, PeFile};

    let Some(file_map) = FileMap::open(path).ok() else { return None;};
    let Some(file) = PeFile::from_bytes(file_map.as_ref()).ok() else { return None;};
		let Some(resources) = file.resources().ok() else { return None;};
		let Some(version_info) = resources.version_info().ok() else { return None;};
		let Some(fixed_info) = version_info.fixed() else { return None;};
    Some(semver::Version {
			major: fixed_info.dwFileVersion.Major as u64,
			minor: fixed_info.dwFileVersion.Minor as u64,
			patch: fixed_info.dwFileVersion.Patch as u64,
			pre: Default::default(),
			build: semver::BuildMetadata::new(&fixed_info.dwFileVersion.Build.to_string()).unwrap_or_default(),
		})
}

The ProductName could be gotten in a similar way for the hypothetically correct GUIDs to show.

Auto-detect possible Resonite installation directory

The app should offer a way for it to auto-detect possible Resonite installation paths and should automatically run this procedure on startup when the setting is unset. The main focus for now should be locating a Steam installation and going off of that, as Resonite doesn't currently have any official standalone releases. It's also probably not worth trying to locate secondary Steam libraries.

Known details:

  • Windows:
    • Usually %programfiles(x86)%\Steam
    • Can be detected from the registry (HKCU\Software\Valve\Steam\SteamPath)
  • Linux
    • Traditional: ~/.steam/steam/
    • Flatpak:
      • Usually ~/.var/app/com.valvesoftware.Steam/.local/share/Steam
      • Can be detected via flatpak info --show-location com.valvesoftware.Steam and ascending two directories from the returned path

Once a Steam installation is located, the game's installation folder can be extra confirmed by checking for and reading Resonite's ACF (should be $STEAM/steamapps/common/appmanifest_2519830.acf), though this is likely unnecessary.
It's probably safe to assume that the path is always going to be $STEAM/steamapps/common/Resonite.

Mod details UI

The app should have some kind of UI to present additional mod details, such as the author(s), source location, icon, etc.

Mod uninstallation

Users should be able to uninstall a mod after they have installed it.

Blocked by #12

Notifications system

The app should have a method to display notifications temporarily on-screen before they then go into a separate notifications list.
Any existing message boxes should be updated to use this system:

  • Mod installed
  • Mod failed to install

Show app version number

The app's current version number should be displayed somewhere so that it can be easily checked.

Installing a mod doesn't guarantee the latest version is used

Currently, when installing a mod, the first version entry from the manifest is used. These version entries may not be guaranteed to be sorted in descending order, which means installing a mod may end up using an old version.
The newest version should always be installed by default. This can be achieved by sorting the versions (either before handing them to the UI or done within the UI layer) upon loading them.

Provide download links in readme

Currently some users, especially those less versed in github or other types of programs/executables are experiencing confusion when trying to find the download for the program. Ideally a simplified list of 2-3 options on the readme to link for each platform download with additional builds in the release tab as normal. Then people can be presented a small few options instead of 17 things they could download. (Current total count of assets)

Somewhat related to #58

Mod disabling & reenabling

Once a mod is installed, the user should be able to toggle whether it is enabled or disabled without fully uninstalling it.

Blocked by #12

Localization/internationalization

The app should support multiple languages, especially given the diverse community that Resonite serves as home to.

Error messages from external crates on the backend are out-of-scope, as that would be nearly impossible to achieve with any consistency.

Error messages from Resolute's own code in the backend are doable since nearly all errors are already their own type and thus can be sent to the frontend via error codes rather than raw strings.

Make tags searchable/filterable

Currently, the tags on a mod are not searched against when filtering the mod list. Ideally, these should be taken into account whenever filtering.

Console/log viewer in the UI

The app should have a page to view all internal logging output of the current execution in a convenient way within the UI.
This is friendlier to the average user than a log file, but also generally more convenient to quickly check what happened behind the scenes for an action.

Console log in users local timezone

0cf6658e57
It is currently 8:10pm on 4/16 but looking at this log it is a bit odd to know the time these occurred as they are all set as UTC 0 instead of being shown in my timezone.

Just a small enhancement to consider.

Setting for app theme & system theme detection

Currently, the app is hard-coded to dark mode.
Users of the app should have a choice between dark mode, light mode, and following their system theme, with following the system theme being the default.

Automatic dependency installation

When installing a mod, if the version has any dependencies, Resolute should offer to install those automatically alongside the original mod being installed.

Installed mods page

With installed mod state tracking implemented, the UI should have a dedicated Installed mods page that only displays mods that are currently installed. It should still retrieve the latest manifest info for it in order to display the correct latest version information.

Out-of-the-box (OOB) setup introduction flow

On first launch (and maybe upon demand with a button hidden away somewhere), an introduction and setup guide experience should be presented to the user. This should walk the user through:

  • Installing RML
  • Installing Harmony
  • Setting the Steam launch parameter (-LoadAssembly Libraries/ResoniteModLoader.dll)

Additional UI feedback/indication for long-running actions

The UI should display loading indicators and have relevant success/failure notifications for the following:

  • Clicking an install button (needs loading indicator)
  • Clicking the refresh button (needs loading indicator and failure notification)
  • Manifest loading on startup (needs failure indication)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.