Skip to content

Commit

Permalink
v3-find-assets (#96)
Browse files Browse the repository at this point in the history
* targetframework now net8.0, packages upgraded

* Make it possible to find assets through a metaproperty query

* Get full list of assets including count

* updated gitignore to the toptotal standard, added launchSettings to help developers run the samples

* Specify original filename, support custom parameters, include more asset properties during upload, upload file as stream

* added separate sample class to test the new ways of finding assets

* searching via option id as well

* Refactored querydecoder because you cannot simply remove the dot for dictionaries, as they are used by multiple query classes

* added test method to specify meta names manually

* improved samples to demonstrate the use of meta properties in MediaQuery and in UploadQuery
  • Loading branch information
quirijnslings authored Sep 20, 2024
1 parent e472748 commit 786c8dc
Show file tree
Hide file tree
Showing 18 changed files with 832 additions and 23 deletions.
15 changes: 15 additions & 0 deletions Bynder/Sample/ApiSample.cs
Original file line number Diff line number Diff line change
Expand Up @@ -48,13 +48,28 @@ public static async Task Main(string[] args)
await MetapropertiesSample.MetapropertiesSampleAsync();
return;
}

// Run samples related to the relation between metaproperties and media items
if (args[0].Equals("MetapropertyToMediaSample")) {
Console.WriteLine("Running samples for metaproperties and related media...");
await MetaPropertyToMediaSample.MetaPropertyToMediaSampleAsync();
return;
}

// Run samples related to media
if (args[0].Equals("MediaSample")) {
Console.WriteLine("Running samples for media...");
await MediaSample.MediaSampleAsync();
return;
}

// Run samples related to finding media
if (args[0].Equals("FindMediaSample"))
{
Console.WriteLine("Running samples for find media...");
await FindMediaSample.MediaSampleAsync();
return;
}
// Run samples related to modifying media
if (args[0].Equals("ModifyMediaSample"))
{
Expand Down
220 changes: 220 additions & 0 deletions Bynder/Sample/FindMediaSample.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,220 @@
// Copyright (c) Bynder. All rights reserved.
// Licensed under the MIT License. See LICENSE file in the project root for full license information.

using System;
using Bynder.Sdk.Service;
using Bynder.Sample.Utils;
using Bynder.Sdk.Settings;
using System.Threading.Tasks;
using System.Linq;
using Bynder.Sdk.Query.Asset;
using Bynder.Sdk.Model;
using System.Collections.Generic;

namespace Bynder.Sample
{
public class FindMediaSample
{
private IBynderClient _bynderClient;

public static async Task MediaSampleAsync()
{
var configuration = Configuration.FromJson("Config.json");
var apiSample = new FindMediaSample(configuration);
await apiSample.AuthenticateWithOAuth2Async(
useClientCredentials: configuration.RedirectUri == null
);
await apiSample.RunFindMediaSampleAsync();
}

private FindMediaSample(Configuration configuration)
{
_bynderClient = ClientFactory.Create(configuration);
}

private async Task RunFindMediaSampleAsync()
{
var metaProperties = await _bynderClient.GetAssetService().GetMetapropertiesAsync();
bool c = true;
while (c)
{
await PerformSearch(metaProperties);
Console.WriteLine("Do you want to perform another search? (y/N)");
var inp = Console.ReadLine();
c = inp.ToLower().StartsWith("y");
}
}

private async Task SearchCustom()
{
Console.WriteLine("Enter metaproperty name: ");
var mpName = Console.ReadLine();
Console.WriteLine("Enter option name: ");
var optionName = Console.ReadLine();
Console.WriteLine($"Searching via the meta property named {mpName} and option named {optionName}");
var assets = await _bynderClient.GetAssetService().GetMediaListAsync(new MediaQuery()
{
MetaProperties = new Dictionary<string, IList<string>>
{
{
mpName, [ optionName ]
}
}
});

Console.WriteLine($"Found {assets.Count()} assets");
Console.WriteLine("Do you want to search again? (y/N)");
var again = Console.ReadLine();
if (again.ToLower().StartsWith("y"))
{
await SearchCustom();
}
}

private async Task PerformSearch(IDictionary<string, Metaproperty> metaProperties)
{
await SearchCustom();


Console.WriteLine("You have the following meta properties in your Bynder environment: ");
var mpKeys = metaProperties.Keys.OrderBy(k => k);
var counter = 1;
foreach (var metaProperty in metaProperties.OrderBy(mp => mp.Key))
{
var extraInfo = metaProperty.Value.Options?.Any() ?? false ? $"[with {metaProperty.Value.Options.Count()} options]" : "[without options]";
Console.WriteLine($"{counter++}) {metaProperty.Key} {extraInfo}");
}
Console.WriteLine("Type the number of the meta property to perform a search with: ");
var mpNrInput = Console.ReadLine();
if (!int.TryParse(mpNrInput, out int mpNr))
{
mpNr = 1;
}
var selectedMetaPropertyKey = mpKeys.Skip(mpNr - 1).FirstOrDefault();
var selectedMetaProperty = metaProperties[selectedMetaPropertyKey];
if (selectedMetaProperty == null)
{
Console.WriteLine("No meta property found, stopping execution");

return;
}

string searchString = null;
if (selectedMetaProperty.Options?.Any() ?? false)
{
counter = 1;
var sortedOptions = selectedMetaProperty.Options.OrderBy(o => o.Label);
foreach (var option in sortedOptions)
{
Console.WriteLine($"{counter++}) {option.Label}");
}
Console.WriteLine("Type the number of the option to search for: ");
mpNrInput = Console.ReadLine();
if (!int.TryParse(mpNrInput, out mpNr))
{
mpNr = 1;
}
var selectedOption = sortedOptions.Skip(mpNr - 1).FirstOrDefault();
searchString = selectedOption.Name;

Console.WriteLine($"Searching via the meta property named {selectedMetaProperty.Name} and option named {searchString}");
var assets = await _bynderClient.GetAssetService().GetMediaListAsync(new MediaQuery()
{
MetaProperties = new Dictionary<string, IList<string>>
{
{
selectedMetaProperty.Name, [ searchString ]
}
}
});

if (assets?.Any() ?? false)
{
Console.WriteLine($"Found {assets.Count} assets, showing first 5");
counter = 1;
foreach (var asset in assets)
{
Console.WriteLine($"{counter++}) {asset.Name}");
if (counter == 6)
{
break;
}
}
}
else
{
Console.WriteLine("No assets found by metaproperty name / option name");
}

Console.WriteLine($"Searching via the meta property option ID {selectedOption.Id}");
assets = await _bynderClient.GetAssetService().GetMediaListAsync(new MediaQuery()
{
PropertyOptionId = [selectedOption.Id]
});

if (assets?.Any() ?? false)
{
Console.WriteLine($"Found {assets.Count} assets, showing first 5");
counter = 1;
foreach (var asset in assets)
{
Console.WriteLine($"{counter++}) {asset.Name}");
if (counter == 6)
{
break;
}
}
}
else
{
Console.WriteLine("No assets found by metaproperty option id");
}

}
else
{
Console.WriteLine("String to search for: ");
searchString = Console.ReadLine();
}
Console.WriteLine("Searching by keyword");
var assetsByKeyword = await _bynderClient.GetAssetService().GetMediaListAsync(new MediaQuery()
{
Keyword = searchString
}
);
if (assetsByKeyword?.Any() ?? false)
{
Console.WriteLine($"Found {assetsByKeyword.Count} assets, showing first 5");
counter = 1;
foreach (var asset in assetsByKeyword)
{
Console.WriteLine($"{counter++}) {asset.Name}");
if (counter == 6)
{
break;
}
}
}
else
{
Console.WriteLine("No assets found by keyword");
}
}

private async Task AuthenticateWithOAuth2Async(bool useClientCredentials)
{
if (useClientCredentials)
{
await _bynderClient.GetOAuthService().GetAccessTokenAsync();
}
else
{
Browser.Launch(_bynderClient.GetOAuthService().GetAuthorisationUrl("state example"));
Console.WriteLine("Insert the code: ");
var code = Console.ReadLine();
await _bynderClient.GetOAuthService().GetAccessTokenAsync(code);
}
}

}
}
14 changes: 13 additions & 1 deletion Bynder/Sample/MediaSample.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ private MediaSample(Configuration configuration) {

private async Task RunMediaSampleAsync()
{

// Get a list of media with limit 10
Console.WriteLine("Listing media with limit of 10: ");
var mediaList = await _bynderClient.GetAssetService().GetMediaListAsync(new MediaQuery{Limit=10});
Expand All @@ -40,6 +41,10 @@ private async Task RunMediaSampleAsync()
Console.WriteLine($"Media Name: {media.Name}");
}

// Get ths same list as a full result
var mediaFullResult = await _bynderClient.GetAssetService().GetMediaFullResultAsync(new MediaQuery { Limit = 10 });
Console.WriteLine($"Retrieving full result based on same query, total number of matching assets is {mediaFullResult.Total.Count}");

// Get the media info
Console.WriteLine("Enter the media ID to get the media info for: ");
var mediaIdForInfo = Console.ReadLine();
Expand All @@ -50,7 +55,14 @@ private async Task RunMediaSampleAsync()
Console.WriteLine($"ID: {mediaInfo.Id}");
Console.WriteLine($"Name: {mediaInfo.Name}");
Console.WriteLine($"Brand Id: {mediaInfo.BrandId}");
Console.WriteLine($"Asset type: {string.Join(',', mediaInfo.PropertyAssetType)}");
if (mediaInfo.PropertyAssetType == null)
{
Console.WriteLine($"No asset type");
}
else
{
Console.WriteLine($"Asset type: {string.Join(',', mediaInfo.PropertyAssetType)}");
}
if (mediaInfo.PropertyOptionsDictionary != null)
{
foreach (var propertyKey in mediaInfo.PropertyOptionsDictionary.Keys)
Expand Down
Loading

0 comments on commit 786c8dc

Please sign in to comment.