diff --git a/Selector.Web/Hubs/PastHub.cs b/Selector.Web/Hubs/PastHub.cs index 5055090..4144680 100644 --- a/Selector.Web/Hubs/PastHub.cs +++ b/Selector.Web/Hubs/PastHub.cs @@ -107,6 +107,14 @@ namespace Selector.Web.Hubs Name = x.Key, Value = x.Item2 }).ToArray(), + + ResampledSeries = listenQuery + .Resample(pastOptions.Value.ResampleWindow) + //.ResampleByMonth() + .CumulativeSum() + .ToArray(), + + TotalCount = listenQuery.Length }); } } diff --git a/Selector.Web/Pages/Past.cshtml b/Selector.Web/Pages/Past.cshtml index 4ecc242..8d865a2 100644 --- a/Selector.Web/Pages/Past.cshtml +++ b/Selector.Web/Pages/Past.cshtml @@ -24,10 +24,18 @@ + + + +
- - - + + +
diff --git a/Selector.Web/Past/ChartResult.cs b/Selector.Web/Past/RankResult.cs similarity index 73% rename from Selector.Web/Past/ChartResult.cs rename to Selector.Web/Past/RankResult.cs index b3fd206..984dd5c 100644 --- a/Selector.Web/Past/ChartResult.cs +++ b/Selector.Web/Past/RankResult.cs @@ -8,5 +8,9 @@ public class RankResult public IEnumerable TrackEntries { get; set; } public IEnumerable AlbumEntries { get; set; } public IEnumerable ArtistEntries { get; set; } + + public IEnumerable ResampledSeries { get; set; } + + public int TotalCount { get; set; } } diff --git a/Selector.Web/scripts/HubInterfaces.ts b/Selector.Web/scripts/HubInterfaces.ts index 9d1102b..58a551e 100644 --- a/Selector.Web/scripts/HubInterfaces.ts +++ b/Selector.Web/scripts/HubInterfaces.ts @@ -41,6 +41,8 @@ export interface RankResult { trackEntries: RankEntry[]; albumEntries: RankEntry[]; artistEntries: RankEntry[]; + totalCount: number; + resampledSeries: CountSample[]; } export interface RankEntry { diff --git a/Selector.Web/scripts/Now/PlayCountGraph.ts b/Selector.Web/scripts/Now/PlayCountGraph.ts index aa7182c..128b210 100644 --- a/Selector.Web/scripts/Now/PlayCountGraph.ts +++ b/Selector.Web/scripts/Now/PlayCountGraph.ts @@ -31,7 +31,7 @@ export let PlayCountChartCard: Vue.Component = {

{{ title }}

- +
`, mounted() { @@ -56,8 +56,8 @@ export let PlayCountChartCard: Vue.Component = { }, xAxis: { type: 'time', - min: this.earliest_date, - max: this.latest_date + // min: this.earliest_date, + // max: this.latest_date } } } diff --git a/Selector.Web/scripts/Past/CountCard.ts b/Selector.Web/scripts/Past/CountCard.ts new file mode 100644 index 0000000..b39657e --- /dev/null +++ b/Selector.Web/scripts/Past/CountCard.ts @@ -0,0 +1,14 @@ +import * as Vue from "vue"; + +export let CountCard: Vue.Component = { + props: ['count'], + computed: { + + }, + template: + ` +
+

{{ count }}

+
+ ` +} \ No newline at end of file diff --git a/Selector.Web/scripts/past.ts b/Selector.Web/scripts/past.ts index 635f347..f8b2505 100644 --- a/Selector.Web/scripts/past.ts +++ b/Selector.Web/scripts/past.ts @@ -3,6 +3,9 @@ import * as signalR from "@microsoft/signalr"; import * as Vue from "vue"; import { RankResult, RankEntry, PastParams } from "./HubInterfaces"; import { RankCard } from "./Past/RankCard"; +import { CountCard } from "./Past/CountCard"; +import { PlayCountChartCard } from "./Now/PlayCountGraph"; +import { LastFmLogoLink } from "./Now/LastFm"; const connection = new signalR.HubConnectionBuilder() .withUrl("/pasthub") @@ -27,6 +30,10 @@ const app = Vue.createApp({ trackEntries: [], albumEntries: [], artistEntries: [], + + resampledSeries: [], + + totalCount: 0 } }, created() { @@ -37,29 +44,30 @@ const app = Vue.createApp({ this.trackEntries = result.trackEntries; this.albumEntries = result.albumEntries; this.artistEntries = result.artistEntries; + this.resampledSeries = result.resampledSeries; + this.totalCount = result.totalCount; }); }, methods: { submit() { - console.log({ - "track": this.track, - "album": this.album, - "artist": this.artist, - "from": this.from, - "to": this.to, - }); - - connection.invoke("OnSubmitted", { + let context = { track: this.track, album: this.album, artist: this.artist, from: this.from, to: this.to, - } as PastParams); + } as PastParams; + + console.log(context); + + connection.invoke("OnSubmitted", context); } } }); +app.component("play-count-chart-card", PlayCountChartCard); app.component("rank-card", RankCard); +app.component("lastfm-logo", LastFmLogoLink); +app.component("count-card", CountCard); const vm = app.mount('#pastapp'); \ No newline at end of file diff --git a/Selector/Options.cs b/Selector/Options.cs index 7e00573..2f1c930 100644 --- a/Selector/Options.cs +++ b/Selector/Options.cs @@ -23,7 +23,7 @@ namespace Selector { public const string Key = "Past"; - + public TimeSpan ResampleWindow { get; set; } = TimeSpan.FromDays(7); } }