Skip to content

Workshop queries will return nothing if the CreatorApp differs from the ConsumerApp #857

Description

@MtnDewIt

Describe the bug
This is only really an issue when you perform a query for game content that uses a separate application for uploading said content. One current example is Halo: The Master Chief Collection.

When performing a workshop item query, no matter what filters are applied, the result will contain missing or no entries.

To Reproduce
Steps to reproduce the behavior:

  1. Initialize the Steam Client using MCC's app id (976730)
  2. Create a query using Ugc.Query.All or Ugc.Query.Items
  3. Get the item page using GetPageAsync()
  4. There should be no entries or missing entries depending on the search criteria

Calling Code

Here is a modified version of the QueryWithTags() unit test. Running this with the default handling inside of GetPageAsync() will result in no items.

public async Task QueryWithTags()
{
    var q = Ugc.Query.Items
                    .WithTag("halo4")
                    .WithTag("campaign")
                    .MatchAllTags();

    var result = await q.GetPageAsync( 1 );
    Assert.IsNotNull( result );
    Assert.IsTrue( result?.ResultCount > 0 );

	Console.WriteLine( $"ResultCount: {result?.ResultCount}" );
	Console.WriteLine( $"TotalCount: {result?.TotalCount}" );

    foreach ( var entry in result.Value.Entries )
    {
        Console.WriteLine($"Name: {entry.Title} [{entry.Id}]");

        Assert.IsTrue(entry.HasTag("halo4"), $"Item '{entry.Title}' is missing 'halo4' tag.");
        Assert.IsTrue(entry.HasTag("campaign"), $"Item '{entry.Title}' is missing 'campaign' tag.");
    }
}

For testing, inside of GetPageAsync(), if we simply remove the condition that sets the creatorApp to equal the consumerApp, the query will function correctly, and all items will be included in the result.

public async Task<ResultPage?> GetPageAsync( int page )
{
	if ( page <= 0 ) throw new System.Exception( "page should be > 0" );

	if ( consumerApp == 0 ) consumerApp = SteamClient.AppId;

	// If we just uncomment this line here, the query will actually function correctly
	if ( creatorApp == 0 ) creatorApp = consumerApp;
	
	// Rest of function...
}

Ideally, a proper fix would include some kind of handling to override the creatorApp in the event that we have a game that exhibits this issue.

Expected behavior
What should happen is that it should run the query, and I should get back all the items that meet the criteria defined in the query itself.

Desktop (please complete the following information):

  • OS: Windows 10 19045.6466

Additional context
For some extra context, when uploading workshop items for MCC, a separate application called Excession is used, which in turn has its own unique app id, which doesn't match MCC's, hence why this issue occurs. Excession's app id is 1695795 while MCC's is 976730.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions