Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions backend/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion backend/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ members = ["proc-macros", "core", "tauri-app"]
resolver = "2"

[workspace.package]
version = "0.15.1"
version = "0.15.2"
authors = ["Raicuparta"]
license = "GPL-3.0-or-later"
repository = "https://github.com/Raicuparta/rai-pal"
Expand Down
89 changes: 51 additions & 38 deletions backend/tauri-app/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -497,41 +497,48 @@ async fn refresh_games(handle: AppHandle, provider_id: ProviderId) -> Result {

let provider = provider::get_provider(provider_id)?;

let remote_games = state.remote_games.read_state()?.clone();

let mut fresh_games = game::Map::default();

provider
.get_games(|mut game: Game| {
// Assign the remote game here as we find the new game.
// This is for when the remote games are fetched *before* games are found locally.
game.remote_game = remote_games
.get(&game.id.provider_id)
.and_then(|provider_remote_games| provider_remote_games.get(&game.external_id))
.or_else(|| {
remote_games
.get(&ProviderId::Manual)
match state.remote_games.read() {
Ok(remote_games) => {
// Assign the remote game here as we find the new game.
// This is for when the remote games are fetched *before* games are found locally.
game.remote_game = remote_games
.get(&game.id.provider_id)
.and_then(|provider_remote_games| {
game.title.normalized.first().and_then(|normalized_title| {
provider_remote_games.get(normalized_title)
})
provider_remote_games.get(&game.external_id)
})
.or_else(|| {
remote_games.get(&ProviderId::Manual).and_then(
|provider_remote_games| {
game.title.normalized.first().and_then(|normalized_title| {
provider_remote_games.get(normalized_title)
})
},
)
})
})
.cloned();

handle
.app_state()
.games
.get(&provider_id)
.unwrap()
.write()
.unwrap()
.insert(game.id.game_id.clone(), game.clone());

handle.emit_safe(events::FoundGame(game.id.clone()));
handle.emit_safe(events::GamesChanged());

fresh_games.insert(game.id.game_id.clone(), game);
.cloned();
}
Err(err) => {
log::error!("Failed to read remote games state: {err}");
}
}

if let Some(provider_games) = handle.app_state().games.get(&provider_id) {
match provider_games.write() {
Ok(mut provider_games_write) => {
provider_games_write.insert(game.id.game_id.clone(), game.clone());
handle.emit_safe(events::FoundGame(game.id.clone()));
handle.emit_safe(events::GamesChanged());
fresh_games.insert(game.id.game_id.clone(), game);
}
Err(err) => {
log::error!("Failed to write games state: {err}");
}
}
}
})
.await
.unwrap_or_else(|err| {
Expand Down Expand Up @@ -569,10 +576,8 @@ async fn add_game(path: PathBuf, handle: AppHandle) -> Result {

state
.games
.get(&ProviderId::Manual)
.unwrap()
.write()
.unwrap()
.try_get(&ProviderId::Manual)?
.write_state()?
.insert(game.id.game_id.clone(), game.clone());

handle.emit_safe(events::FoundGame(game.id.clone()));
Expand Down Expand Up @@ -647,11 +652,19 @@ async fn get_game_ids(

let mut total_count: usize = 0;

let games_iter = state.games.values().flat_map(|provider_games_lock| {
let provider_games = provider_games_lock.read().unwrap();
total_count += provider_games.len();
provider_games.clone().into_values()
});
let games_iter = state
.games
.values()
.flat_map(|provider_games_lock| match provider_games_lock.read() {
Ok(provider_games) => {
total_count += provider_games.len();
provider_games.clone().into_values()
}
Err(err) => {
log::error!("Failed to read provider games state: {err}");
Default::default()
}
});

let games: Vec<_> = if let Some(query) = data_query.as_ref() {
let mut games: Vec<_> = games_iter.filter(|game| query.matches(game)).collect();
Expand Down