forked from NG-SD-Plugins/PowerTools
Fix loading of main menu community profiles
This commit is contained in:
parent
a2e9de941b
commit
182c30b4ee
5 changed files with 24 additions and 21 deletions
|
@ -11,7 +11,7 @@ pub async fn save_setting_handler(
|
||||||
content_type: web::Header<header::ContentType>,
|
content_type: web::Header<header::ContentType>,
|
||||||
cli: web::Data<&'static Cli>,
|
cli: web::Data<&'static Cli>,
|
||||||
) -> std::io::Result<impl Responder> {
|
) -> std::io::Result<impl Responder> {
|
||||||
println!("Content-Type: {}", content_type.to_string());
|
//println!("Content-Type: {}", content_type.to_string());
|
||||||
let bytes = match data.to_bytes_limited(PAYLOAD_LIMIT).await {
|
let bytes = match data.to_bytes_limited(PAYLOAD_LIMIT).await {
|
||||||
Ok(Ok(x)) => x,
|
Ok(Ok(x)) => x,
|
||||||
Ok(Err(e)) => return Err(std::io::Error::new(std::io::ErrorKind::InvalidData, format!("wut: {}", e))),
|
Ok(Err(e)) => return Err(std::io::Error::new(std::io::ErrorKind::InvalidData, format!("wut: {}", e))),
|
||||||
|
|
|
@ -5,10 +5,8 @@ use std::sync::{Arc, Mutex};
|
||||||
use usdpl_back::core::serdes::Primitive;
|
use usdpl_back::core::serdes::Primitive;
|
||||||
use usdpl_back::AsyncCallable;
|
use usdpl_back::AsyncCallable;
|
||||||
|
|
||||||
use chrono::{offset::Utc, DateTime};
|
|
||||||
use serde::{Deserialize, Serialize};
|
|
||||||
|
|
||||||
use super::handler::{ApiMessage, GeneralMessage};
|
use super::handler::{ApiMessage, GeneralMessage};
|
||||||
|
use crate::utility::CachedData;
|
||||||
|
|
||||||
#[cfg(feature = "online")]
|
#[cfg(feature = "online")]
|
||||||
const BASE_URL_FALLBACK: &'static str = "https://powertools.ngni.us";
|
const BASE_URL_FALLBACK: &'static str = "https://powertools.ngni.us";
|
||||||
|
@ -18,12 +16,6 @@ static BASE_URL: RwLock<Option<String>> = RwLock::new(None);
|
||||||
const MAX_CACHE_DURATION: std::time::Duration =
|
const MAX_CACHE_DURATION: std::time::Duration =
|
||||||
std::time::Duration::from_secs(60 * 60 * 24 * 7 /* 7 days */);
|
std::time::Duration::from_secs(60 * 60 * 24 * 7 /* 7 days */);
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Clone, Debug)]
|
|
||||||
struct CachedData<T> {
|
|
||||||
data: T,
|
|
||||||
updated: DateTime<Utc>,
|
|
||||||
}
|
|
||||||
|
|
||||||
type StoreCache =
|
type StoreCache =
|
||||||
std::collections::HashMap<u32, CachedData<Vec<community_settings_core::v1::Metadata>>>;
|
std::collections::HashMap<u32, CachedData<Vec<community_settings_core::v1::Metadata>>>;
|
||||||
|
|
||||||
|
@ -112,14 +104,14 @@ fn save_cache(_cache: &StoreCache) {}
|
||||||
fn get_maybe_cached(steam_app_id: u32) -> Vec<community_settings_core::v1::Metadata> {
|
fn get_maybe_cached(steam_app_id: u32) -> Vec<community_settings_core::v1::Metadata> {
|
||||||
let mut cache = load_cache();
|
let mut cache = load_cache();
|
||||||
let data = if let Some(cached_result) = cache.get(&steam_app_id) {
|
let data = if let Some(cached_result) = cache.get(&steam_app_id) {
|
||||||
if cached_result.updated < (Utc::now() - MAX_CACHE_DURATION) {
|
if cached_result.needs_update(MAX_CACHE_DURATION) {
|
||||||
// cache needs update
|
// cache needs update
|
||||||
if let Ok(result) = search_by_app_id_online(steam_app_id) {
|
if let Ok(result) = search_by_app_id_online(steam_app_id) {
|
||||||
cache.insert(
|
cache.insert(
|
||||||
steam_app_id,
|
steam_app_id,
|
||||||
CachedData {
|
CachedData {
|
||||||
data: result.clone(),
|
data: result.clone(),
|
||||||
updated: Utc::now(),
|
updated: chrono::offset::Utc::now(),
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
save_cache(&cache);
|
save_cache(&cache);
|
||||||
|
@ -138,7 +130,7 @@ fn get_maybe_cached(steam_app_id: u32) -> Vec<community_settings_core::v1::Metad
|
||||||
steam_app_id,
|
steam_app_id,
|
||||||
CachedData {
|
CachedData {
|
||||||
data: result.clone(),
|
data: result.clone(),
|
||||||
updated: Utc::now(),
|
updated: chrono::offset::Utc::now(),
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
save_cache(&cache);
|
save_cache(&cache);
|
||||||
|
@ -207,8 +199,8 @@ pub fn search_by_app_id() -> impl AsyncCallable {
|
||||||
};
|
};
|
||||||
super::async_utils::AsyncIsh {
|
super::async_utils::AsyncIsh {
|
||||||
trans_setter: |params| {
|
trans_setter: |params| {
|
||||||
if let Some(Primitive::F64(app_id)) = params.get(0) {
|
if let Some(Primitive::String(s)) = params.get(0) {
|
||||||
Ok(*app_id as u32)
|
s.parse::<u32>().map_err(|e| format!("search_by_app_id invalid parameter 0: {}", e))
|
||||||
} else {
|
} else {
|
||||||
Err("search_by_app_id missing/invalid parameter 0".to_owned())
|
Err("search_by_app_id missing/invalid parameter 0".to_owned())
|
||||||
}
|
}
|
||||||
|
@ -329,6 +321,8 @@ fn settings_to_web_config(
|
||||||
username: String,
|
username: String,
|
||||||
settings: crate::persist::SettingsJson,
|
settings: crate::persist::SettingsJson,
|
||||||
) -> community_settings_core::v1::Metadata {
|
) -> community_settings_core::v1::Metadata {
|
||||||
|
#[cfg(any(not(debug_assertions), not(feature = "dev_stuff")))]
|
||||||
|
let app_id = if app_id == 0 { 1 } else { app_id };
|
||||||
community_settings_core::v1::Metadata {
|
community_settings_core::v1::Metadata {
|
||||||
name: settings.name,
|
name: settings.name,
|
||||||
steam_app_id: app_id,
|
steam_app_id: app_id,
|
||||||
|
|
|
@ -376,8 +376,8 @@ export type StoreMetadata = {
|
||||||
//config: any,
|
//config: any,
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function searchStoreByAppId(id: number): Promise<StoreMetadata[]> {
|
export async function searchStoreByAppId(id: string): Promise<StoreMetadata[]> {
|
||||||
console.log("WEB_search_by_app");
|
//console.log("WEB_search_by_app");
|
||||||
return (await call_backend("WEB_search_by_app", [id]))[0];
|
return (await call_backend("WEB_search_by_app", [id]))[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -395,11 +395,11 @@ export async function storeUpload(steam_id: string, steam_username: string): Pro
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getAllSettingVariants(): Promise<VariantInfo[]> {
|
export async function getAllSettingVariants(): Promise<VariantInfo[]> {
|
||||||
console.log("GENERAL_get_all_variants");
|
//console.log("GENERAL_get_all_variants");
|
||||||
return (await call_backend("GENERAL_get_all_variants", []));
|
return (await call_backend("GENERAL_get_all_variants", []));
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function getCurrentSettingVariant(): Promise<VariantInfo> {
|
export async function getCurrentSettingVariant(): Promise<VariantInfo> {
|
||||||
console.log("GENERAL_get_current_variant");
|
//console.log("GENERAL_get_current_variant");
|
||||||
return (await call_backend("GENERAL_get_current_variant", []))[0];
|
return (await call_backend("GENERAL_get_current_variant", []))[0];
|
||||||
}
|
}
|
||||||
|
|
|
@ -44,4 +44,6 @@ export const PERIODICAL_BACKEND_PERIOD = 5000; // milliseconds
|
||||||
export const AUTOMATIC_REAPPLY_WAIT = 2000; // milliseconds
|
export const AUTOMATIC_REAPPLY_WAIT = 2000; // milliseconds
|
||||||
|
|
||||||
export const STORE_RESULTS_URI = "/plugins/PowerTools/settings_store";
|
export const STORE_RESULTS_URI = "/plugins/PowerTools/settings_store";
|
||||||
|
export const STORE_MAIN_APP_ID = "1";
|
||||||
|
export const STORE_MAIN_APP_ID_DEV = "0";
|
||||||
|
|
||||||
|
|
|
@ -67,6 +67,7 @@ import {
|
||||||
|
|
||||||
STORE_RESULTS,
|
STORE_RESULTS,
|
||||||
STORE_RESULTS_URI,
|
STORE_RESULTS_URI,
|
||||||
|
STORE_MAIN_APP_ID,
|
||||||
|
|
||||||
PERIODICAL_BACKEND_PERIOD,
|
PERIODICAL_BACKEND_PERIOD,
|
||||||
AUTOMATIC_REAPPLY_WAIT,
|
AUTOMATIC_REAPPLY_WAIT,
|
||||||
|
@ -130,7 +131,7 @@ const reload = function() {
|
||||||
});
|
});
|
||||||
|
|
||||||
if (!get_value(STORE_RESULTS)) {
|
if (!get_value(STORE_RESULTS)) {
|
||||||
backend.resolve(backend.searchStoreByAppId(0), (results) => set_value(STORE_RESULTS, results));
|
backend.resolve(backend.searchStoreByAppId(STORE_MAIN_APP_ID), (results) => set_value(STORE_RESULTS, results));
|
||||||
}
|
}
|
||||||
|
|
||||||
backend.resolve(backend.getBatteryCurrent(), (rate: number) => { set_value(CURRENT_BATT, rate) });
|
backend.resolve(backend.getBatteryCurrent(), (rate: number) => { set_value(CURRENT_BATT, rate) });
|
||||||
|
@ -216,13 +217,19 @@ const registerCallbacks = function(autoclear: boolean) {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
backend.resolve(
|
||||||
|
backend.searchStoreByAppId(STORE_MAIN_APP_ID),
|
||||||
|
(results: backend.StoreMetadata[]) => {
|
||||||
|
set_value(STORE_RESULTS, results);
|
||||||
|
}
|
||||||
|
);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
startHook = SteamClient.Apps.RegisterForGameActionStart((actionType, id) => {
|
startHook = SteamClient.Apps.RegisterForGameActionStart((actionType, id) => {
|
||||||
//@ts-ignore
|
//@ts-ignore
|
||||||
let gameInfo: any = appStore.GetAppOverviewByGameID(id);
|
let gameInfo: any = appStore.GetAppOverviewByGameID(id);
|
||||||
let appId = gameInfo.appid.toString();
|
let appId: string = gameInfo.appid.toString();
|
||||||
|
|
||||||
backend.log(backend.LogLevel.Info, "RegisterForGameActionStart callback(" + actionType + ", " + id + ")");
|
backend.log(backend.LogLevel.Info, "RegisterForGameActionStart callback(" + actionType + ", " + id + ")");
|
||||||
backend.resolve(
|
backend.resolve(
|
||||||
|
|
Loading…
Reference in a new issue