Skip to content

Commit

Permalink
Added more marketplaces
Browse files Browse the repository at this point in the history
  • Loading branch information
MarvinKlein1508 committed Mar 26, 2024
1 parent 840109f commit 077bb8a
Show file tree
Hide file tree
Showing 7 changed files with 201 additions and 117 deletions.
4 changes: 2 additions & 2 deletions CSGencodes.Core/CSGencodes.Core.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@
</ItemGroup>

<ItemGroup>
<PackageReference Include="Google.Protobuf" Version="3.25.2" />
<PackageReference Include="Grpc.Tools" Version="2.61.0">
<PackageReference Include="Google.Protobuf" Version="3.26.0" />
<PackageReference Include="Grpc.Tools" Version="2.62.0">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
Expand Down
170 changes: 170 additions & 0 deletions CSGencodes.Core/Services/MarketplaceService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
using CSGencodes.Core.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Web;

namespace CSGencodes.Core.Services
{
public class MarketplaceService
{
/// <summary>
/// Generates a Steam Community Market URL which searchs for all skins with the selected stickers.
/// </summary>
/// <returns></returns>
public string GetSteamMarketUrl(List<AppliedSticker> appliedStickers)
{
if (appliedStickers.Count == 0)
{
return string.Empty;
}

StringBuilder sb = new();
sb.Append("https://steamcommunity.com/market/search?q=");

string query = HttpUtility.UrlEncode($"\"{string.Join(",", appliedStickers.Select(x => x.name))}\"");

sb.Append(query);
sb.Append("&descriptions=1&category_730_ItemSet%5B%5D=any&category_730_Weapon%5B%5D=any&category_730_Quality%5B%5D=#p1_price_asc");

string url = sb.ToString();

return url;
}
public string GetSkinbidUrl(List<AppliedSticker> appliedStickers)
{
if (appliedStickers.Count == 0)
{
return string.Empty;
}

StringBuilder sb = new();
sb.Append("https://skinbid.com/listings?Stickers=false,");

string query = $"{string.Join(",", appliedStickers.Select(x => x.gen_id))}";

sb.Append(query);

string url = sb.ToString();

return url;
}
public string? GetBuff163Url(List<AppliedSticker> appliedStickers)
{
// Example: https://buff.163.com/market/csgo#tab=selling&page_num=1&extra_tag_ids=16226,16226,16226,16226
List<int> searchIds = [];
if (appliedStickers.Count != 0)
{
foreach (var sticker in appliedStickers)
{
if (sticker.BuffStickerId is not null)
{
searchIds.Add((int)sticker.BuffStickerId);
}
}
}

if (searchIds.Count == 0)
{
return null;
}

return $"https://buff.163.com/market/csgo#tab=selling&page_num=1&extra_tag_ids={String.Join(",", searchIds)}";
}
public string GetSkinportUrl(List<AppliedSticker> appliedStickers)
{
if (appliedStickers.Count == 0)
{
return string.Empty;
}

StringBuilder sb = new();
sb.Append("https://skinport.com/market?sticker=");

string query = $"{string.Join("%2C", appliedStickers.Select(x => x.name.Replace(" ", "+")))}";

sb.Append(query);

sb.Append("&r=erdbeerchen02");


string url = sb.ToString();

return url;
}


public string GetCsfloatDatabaseUrl(Weapon? selectedWeapon, List<AppliedSticker> appliedStickers)
{
// Example: https://csfloat.com/db?defIndex=7&paintIndex=282&min=0.1&max=0.7&stickers=%5B%7B%22i%22:%225015%22%7D,%7B%22i%22:%225015%22%7D,%7B%22i%22:%225015%22%7D,%7B%22i%22:%225015%22%7D%5D
StringBuilder sb = new();
sb.Append("https://csfloat.com/db?");

List<string> parameters = new();

if (selectedWeapon is not null)
{
parameters.Add($"defIndex={selectedWeapon.weapon_id}");
parameters.Add($"paintIndex={selectedWeapon.gen_id}");
}

if (appliedStickers.Count != 0)
{
// Example: [{"i":"5015"},{"i":"5015"},{"i":"5015"},{"i":"5015"}]
var stickers = appliedStickers.Take(4);
List<string> sticker_values = new();
foreach (var sticker in stickers)
{
sticker_values.Add($"{{\"i\":\"{sticker.gen_id}\"}}");
}


parameters.Add($"stickers=[{string.Join(",", sticker_values)}]");
}


if (parameters.Count == 0)
{
return string.Empty;
}

sb.Append(string.Join("&", parameters));

return sb.ToString();
}

public string GetCsfloatUrl(List<AppliedSticker> appliedStickers)
{
StringBuilder sb = new();
sb.Append("https://csfloat.com/search?");

List<string> parameters = new();

if (appliedStickers.Count != 0)
{
// Example: [{"i":"5015"},{"i":"5015"},{"i":"5015"},{"i":"5015"}]
var stickers = appliedStickers.Take(4);
List<string> sticker_values = new();
foreach (var sticker in stickers)
{
sticker_values.Add($"{{\"i\":\"{sticker.gen_id}\"}}");
}


parameters.Add($"stickers=[{string.Join(",", sticker_values)}]");
}


if (parameters.Count == 0)
{
return string.Empty;
}

sb.Append(string.Join("&", parameters));

return sb.ToString();
}
}
}
6 changes: 3 additions & 3 deletions CSGencodes/CSGencodes.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Blazor.Bootstrap" Version="1.11.1" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="8.0.1" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="8.0.1" PrivateAssets="all" />
<PackageReference Include="Blazor.Bootstrap" Version="2.1.0" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="8.0.3" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="8.0.3" PrivateAssets="all" />
<PackageReference Include="Microsoft.Extensions.Http" Version="8.0.0" />
<PackageReference Include="PublishSPAforGitHubPages.Build" Version="2.1.1" />
</ItemGroup>
Expand Down
1 change: 1 addition & 0 deletions CSGencodes/Client/Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ public static async Task Main(string[] args)
builder.Services.AddScoped<WeaponService>();
builder.Services.AddScoped<StickerService>();
builder.Services.AddScoped<InspectLinkService>();
builder.Services.AddScoped<MarketplaceService>();
builder.Services.AddBlazorBootstrap();

await builder.Build().RunAsync();
Expand Down
9 changes: 9 additions & 0 deletions CSGencodes/Pages/Changelog.razor
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,15 @@
<div class="changelog">
<h3 class="text-white">Changelog</h3>
<ul>
<li>
2024-03-26
<ul>
<li>Added search on Skinbid</li>
<li>Added search on csfloat market</li>
<li>Added dedicated button for csfloat database</li>
<li>Updated URLs from csgofloat to csfloat</li>
</ul>
</li>
<li>
2024-03-22
<ul>
Expand Down
19 changes: 13 additions & 6 deletions CSGencodes/Pages/Index.razor
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
@inject WeaponService weaponService
@inject StickerService stickerService
@inject InspectLinkService inspectService
@inject MarketplaceService marketplaceService

<PageTitle>CS2 Gencode Generator</PageTitle>

Expand Down Expand Up @@ -104,18 +105,24 @@
<button type="button" class="btn btn-danger w-50" @onclick="RemoveLastSticker">Remove last sticker</button>
<button type="button" class="btn btn-danger w-50" @onclick="() => SelectedStickers.Clear()">Remove all stickers</button>
</div>
<a href="@marketplaceService.GetCsfloatDatabaseUrl(SelectedWeapon, SelectedStickers)" target="_blank" class="btn btn-primary d-block mb-1">csfloat database</a>

<h3 class="text-white">Search marketplace</h3>
<a href="@GetSteamMarketUrl()" target="_blank" class="btn btn-primary d-block mb-1">Steam market</a>
<a href="@GetCsgofloatUrl()" target="_blank" class="btn btn-primary d-block mb-1">csfloat</a>
@if (!string.IsNullOrEmpty(GetBuff163Url()))
<a href="@marketplaceService.GetSteamMarketUrl(SelectedStickers)" target="_blank" class="btn btn-primary d-block mb-1">Steam market</a>
<a href="@marketplaceService.GetCsfloatUrl(SelectedStickers)" target="_blank" class="btn btn-primary d-block mb-1">csfloat</a>
@if (!string.IsNullOrEmpty(marketplaceService.GetBuff163Url(SelectedStickers)))
{
<a href="@GetBuff163Url()" target="_blank" class="btn btn-primary d-block mb-1">Buff163</a>
<a href="@marketplaceService.GetBuff163Url(SelectedStickers)" target="_blank" class="btn btn-primary d-block mb-1">Buff163</a>
}

@if (!string.IsNullOrEmpty(GetSkinportUrl()))
@if (!string.IsNullOrEmpty(marketplaceService.GetSkinportUrl(SelectedStickers)))
{
<a href="@GetSkinportUrl()" target="_blank" class="btn btn-primary d-block mb-1">Skinport</a>
<a href="@marketplaceService.GetSkinportUrl(SelectedStickers)" target="_blank" class="btn btn-primary d-block mb-1">Skinport</a>
}

@if (!string.IsNullOrEmpty(marketplaceService.GetSkinbidUrl(SelectedStickers)))
{
<a href="@marketplaceService.GetSkinbidUrl(SelectedStickers)" target="_blank" class="btn btn-primary d-block mb-1">Skinbid</a>
}
}
</div>
Expand Down
109 changes: 3 additions & 106 deletions CSGencodes/Pages/Index.razor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -97,90 +97,11 @@ private void OnStickerClicked(Sticker sticker)
}
}

/// <summary>
/// Generates a Steam Community Market URL which searchs for all skins with the selected stickers.
/// </summary>
/// <returns></returns>
private string GetSteamMarketUrl()
{
if (SelectedStickers.Count == 0)
{
return string.Empty;
}

StringBuilder sb = new();
sb.Append("https://steamcommunity.com/market/search?q=");

string query = HttpUtility.UrlEncode($"\"{string.Join(",", SelectedStickers.Select(x => x.name))}\"");

sb.Append(query);
sb.Append("&descriptions=1&category_730_ItemSet%5B%5D=any&category_730_Weapon%5B%5D=any&category_730_Quality%5B%5D=#p1_price_asc");

string url = sb.ToString();

return url;
}

private string GetSkinportUrl()
{
if (SelectedStickers.Count == 0)
{
return string.Empty;
}

StringBuilder sb = new();
sb.Append("https://skinport.com/market?sticker=");

string query = $"{string.Join("%2C", SelectedStickers.Select(x => x.name.Replace(" ", "+")))}";

sb.Append(query);

sb.Append("&r=erdbeerchen02");


string url = sb.ToString();

return url;
}

private string GetCsgofloatUrl()
{
// Example: https://csgofloat.com/db?defIndex=7&paintIndex=282&min=0.1&max=0.7&stickers=%5B%7B%22i%22:%225015%22%7D,%7B%22i%22:%225015%22%7D,%7B%22i%22:%225015%22%7D,%7B%22i%22:%225015%22%7D%5D
StringBuilder sb = new();
sb.Append("https://csgofloat.com/db?");

List<string> parameters = new();

if (SelectedWeapon is not null)
{
parameters.Add($"defIndex={SelectedWeapon.weapon_id}");
parameters.Add($"paintIndex={SelectedWeapon.gen_id}");
}


if (SelectedStickers.Count != 0)
{
// Example: [{"i":"5015"},{"i":"5015"},{"i":"5015"},{"i":"5015"}]
var stickers = SelectedStickers.Take(4);
List<string> sticker_values = new();
foreach (var sticker in stickers)
{
sticker_values.Add($"{{\"i\":\"{sticker.gen_id}\"}}");
}


parameters.Add($"stickers=[{string.Join(",", sticker_values)}]");
}



if (parameters.Count == 0)
{
return string.Empty;
}

sb.Append(string.Join("&", parameters));

return sb.ToString();
}


private void RemoveLastSticker()
{
Expand All @@ -193,28 +114,7 @@ private void SortSelectedStickers()
SelectedStickers.Sort((x, y) => x.PosId.CompareTo(y.PosId));
}

private string? GetBuff163Url()
{
// Example: https://buff.163.com/market/csgo#tab=selling&page_num=1&extra_tag_ids=16226,16226,16226,16226
List<int> searchIds = [];
if (SelectedStickers.Count != 0)
{
foreach (var sticker in SelectedStickers)
{
if (sticker.BuffStickerId is not null)
{
searchIds.Add((int)sticker.BuffStickerId);
}
}
}

if (searchIds.Count == 0)
{
return null;
}

return $"https://buff.163.com/market/csgo#tab=selling&page_num=1&extra_tag_ids={String.Join(",", searchIds)}";
}

private async Task OnStickerWearingChange(ChangeEventArgs e, AppliedSticker sticker)

Check warning on line 119 in CSGencodes/Pages/Index.razor.cs

View workflow job for this annotation

GitHub Actions / build

This async method lacks 'await' operators and will run synchronously. Consider using the 'await' operator to await non-blocking API calls, or 'await Task.Run(...)' to do CPU-bound work on a background thread.
{
Expand All @@ -223,8 +123,5 @@ private async Task OnStickerWearingChange(ChangeEventArgs e, AppliedSticker stic
sticker.Scratched = newValue;
}

private async Task OnStickerRotationChange(ChangeEventArgs e, AppliedSticker sticker)
{
}
}
}

0 comments on commit 077bb8a

Please sign in to comment.