Skip to content

Commit

Permalink
WIP
Browse files Browse the repository at this point in the history
  • Loading branch information
michael-j-green committed Jan 10, 2025
1 parent 86c207e commit d07300e
Show file tree
Hide file tree
Showing 4 changed files with 281 additions and 255 deletions.
18 changes: 17 additions & 1 deletion gaseous-server/Classes/MetadataManagement.cs
Original file line number Diff line number Diff line change
Expand Up @@ -370,7 +370,23 @@ public void RefreshMetadata(bool forceRefresh = false)
try
{
Logging.Log(Logging.LogType.Information, "Metadata Refresh", "(" + StatusCounter + "/" + dt.Rows.Count + "): Refreshing metadata for platform " + dr["name"] + " (" + dr["id"] + ")");
Metadata.Platforms.GetPlatform((long)dr["id"], MetadataSources.None);

HasheousClient.Models.MetadataSources metadataSource = HasheousClient.Models.MetadataSources.None;

// fetch the platform metadata
Platform platform = Metadata.Platforms.GetPlatform((long)dr["id"], metadataSource);

// fetch the platform metadata from Hasheous
if (Config.MetadataConfiguration.SignatureSource == HasheousClient.Models.MetadataModel.SignatureSources.Hasheous)
{
Communications.PopulateHasheousPlatformData((long)dr["id"]);
}

// force platformLogo refresh
if (platform.PlatformLogo != null)
{
Metadata.PlatformLogos.GetPlatformLogo(platform.PlatformLogo, metadataSource);
}
}
catch (Exception ex)
{
Expand Down
139 changes: 75 additions & 64 deletions gaseous-server/Controllers/V1.1/GamesController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ public GamesController(
[MapToApiVersion("1.1")]
[HttpPost]
[ProducesResponseType(typeof(GameReturnPackage), StatusCodes.Status200OK)]
public async Task<IActionResult> Game_v1_1(GameSearchModel model, int pageNumber = 0, int pageSize = 0)
public async Task<IActionResult> Game_v1_1(GameSearchModel model, int pageNumber = 0, int pageSize = 0, bool returnSummary = true, bool returnGames = true)
{
var user = await _userManager.GetUserAsync(User);

Expand Down Expand Up @@ -88,7 +88,7 @@ public async Task<IActionResult> Game_v1_1(GameSearchModel model, int pageNumber
model.GameAgeRating.IncludeUnrated = false;
}

return Ok(GetGames(model, user.Id, pageNumber, pageSize));
return Ok(GetGames(model, user.Id, pageNumber, pageSize, returnSummary, returnGames));
}
else
{
Expand Down Expand Up @@ -190,7 +190,7 @@ public enum SortField
}
}

public static GameReturnPackage GetGames(GameSearchModel model, string userid, int pageNumber = 0, int pageSize = 0)
public static GameReturnPackage GetGames(GameSearchModel model, string userid, int pageNumber = 0, int pageSize = 0, bool returnSummary = true, bool returnGames = true)
{
string whereClause = "";
string havingClause = "";
Expand Down Expand Up @@ -551,89 +551,100 @@ LEFT JOIN
Relation_Game_Themes ON Game.Id = Relation_Game_Themes.GameId
LEFT JOIN
Favourites ON Game.MetadataMapId = Favourites.GameId AND Favourites.UserId = @userid " + whereClause + " " + havingClause + " " + orderByClause;
List<Games.MinimalGameItem> RetVal = new List<Games.MinimalGameItem>();

// if (returnGames == true)
// {
// sql += " LIMIT @pageOffset, @pageSize";
// whereParams.Add("pageOffset", pageSize * (pageNumber - 1));
// whereParams.Add("pageSize", pageSize);
// }

DataTable dbResponse = db.ExecuteCMD(sql, whereParams, new Database.DatabaseMemoryCacheOptions(CacheEnabled: true, ExpirationSeconds: 60));

// get count
int RecordCount = dbResponse.Rows.Count;
int? RecordCount = null;
if (returnSummary == true)
{
RecordCount = dbResponse.Rows.Count;
}

// compile data for return
int pageOffset = pageSize * (pageNumber - 1);
for (int i = pageOffset; i < dbResponse.Rows.Count; i++)
List<Games.MinimalGameItem>? RetVal = null;
if (returnGames == true)
{
if (pageNumber != 0 && pageSize != 0)
RetVal = new List<Games.MinimalGameItem>();
foreach (int i in Enumerable.Range(0, dbResponse.Rows.Count))
{
if (i >= (pageOffset + pageSize))
Models.Game retGame = Storage.BuildCacheObject<Models.Game>(new Models.Game(), dbResponse.Rows[i]);
retGame.MetadataMapId = (long)dbResponse.Rows[i]["MetadataMapId"];
retGame.MetadataSource = (HasheousClient.Models.MetadataSources)dbResponse.Rows[i]["GameIdType"];

Games.MinimalGameItem retMinGame = new Games.MinimalGameItem(retGame);
retMinGame.Index = i;
if (dbResponse.Rows[i]["RomSaveCount"] != DBNull.Value || dbResponse.Rows[i]["MediaGroupSaveCount"] != DBNull.Value)
{
break;
retMinGame.HasSavedGame = true;
}
else
{
retMinGame.HasSavedGame = false;
}
if ((int)dbResponse.Rows[i]["Favourite"] == 0)
{
retMinGame.IsFavourite = false;
}
else
{
retMinGame.IsFavourite = true;
}
}

Models.Game retGame = Storage.BuildCacheObject<Models.Game>(new Models.Game(), dbResponse.Rows[i]);
retGame.MetadataMapId = (long)dbResponse.Rows[i]["MetadataMapId"];
retGame.MetadataSource = (HasheousClient.Models.MetadataSources)dbResponse.Rows[i]["GameIdType"];

Games.MinimalGameItem retMinGame = new Games.MinimalGameItem(retGame);
retMinGame.Index = i;
if (dbResponse.Rows[i]["RomSaveCount"] != DBNull.Value || dbResponse.Rows[i]["MediaGroupSaveCount"] != DBNull.Value)
{
retMinGame.HasSavedGame = true;
RetVal.Add(retMinGame);
}
else
{
retMinGame.HasSavedGame = false;
}
if ((int)dbResponse.Rows[i]["Favourite"] == 0)
{
retMinGame.IsFavourite = false;
}
else
{
retMinGame.IsFavourite = true;
}

RetVal.Add(retMinGame);
}

// build alpha list
Dictionary<string, int> AlphaList = new Dictionary<string, int>();
if (orderByField == "NameThe" || orderByField == "Name")
Dictionary<string, int>? AlphaList = null;
if (returnSummary == true)
{
int CurrentPage = 1;
int NextPageIndex = pageSize;
AlphaList = new Dictionary<string, int>();

string alphaSearchField;
if (orderByField == "NameThe")
// build alpha list
if (orderByField == "NameThe" || orderByField == "Name")
{
alphaSearchField = "NameThe";
}
else
{
alphaSearchField = "Name";
}
int CurrentPage = 1;
int NextPageIndex = pageSize;

for (int i = 0; i < dbResponse.Rows.Count; i++)
{
if (NextPageIndex == i + 1)
string alphaSearchField;
if (orderByField == "NameThe")
{
NextPageIndex += pageSize;
CurrentPage += 1;
alphaSearchField = "NameThe";
}
else
{
alphaSearchField = "Name";
}

string firstChar = dbResponse.Rows[i][alphaSearchField].ToString().Substring(0, 1).ToUpperInvariant();
if ("ABCDEFGHIJKLMNOPQRSTUVWXYZ".Contains(firstChar))
for (int i = 0; i < dbResponse.Rows.Count; i++)
{
if (!AlphaList.ContainsKey(firstChar))
if (NextPageIndex == i + 1)
{
AlphaList.Add(firstChar, CurrentPage);
NextPageIndex += pageSize;
CurrentPage += 1;
}
}
else
{
if (!AlphaList.ContainsKey("#"))

string firstChar = dbResponse.Rows[i][alphaSearchField].ToString().Substring(0, 1).ToUpperInvariant();
if ("ABCDEFGHIJKLMNOPQRSTUVWXYZ".Contains(firstChar))
{
if (!AlphaList.ContainsKey(firstChar))
{
AlphaList.Add(firstChar, CurrentPage);
}
}
else
{
AlphaList.Add("#", 1);
if (!AlphaList.ContainsKey("#"))
{
AlphaList.Add("#", 1);
}
}
}
}
Expand Down Expand Up @@ -669,9 +680,9 @@ public GameReturnPackage(int Count, List<Models.Game> Games)
this.Games = minimalGames;
}

public int Count { get; set; }
public List<Games.MinimalGameItem> Games { get; set; } = new List<Games.MinimalGameItem>();
public Dictionary<string, int> AlphaList { get; set; }
public int? Count { get; set; }
public List<Games.MinimalGameItem>? Games { get; set; } = new List<Games.MinimalGameItem>();
public Dictionary<string, int>? AlphaList { get; set; }
}
}
}
5 changes: 0 additions & 5 deletions gaseous-server/Models/PlatformMapping.cs
Original file line number Diff line number Diff line change
Expand Up @@ -107,11 +107,6 @@ private static Platform CreateDummyPlatform(PlatformMapItem mapItem)
Storage.NewCacheValue(HasheousClient.Models.MetadataSources.None, platform);
}

if (Config.MetadataConfiguration.SignatureSource == HasheousClient.Models.MetadataModel.SignatureSources.Hasheous)
{
Communications.PopulateHasheousPlatformData(mapItem.IGDBId);
}

if (Storage.GetCacheStatus(HasheousClient.Models.MetadataSources.IGDB, "Platform", mapItem.IGDBId) == Storage.CacheStatus.NotPresent)
{
Storage.NewCacheValue(HasheousClient.Models.MetadataSources.IGDB, platform);
Expand Down
Loading

0 comments on commit d07300e

Please sign in to comment.