61 lines
1.8 KiB
JavaScript
61 lines
1.8 KiB
JavaScript
import { DateTime } from "luxon";
|
|
import ics from "ics";
|
|
|
|
export const popularPosts = (collection) => {
|
|
const collectionData = collection.getAll()[0];
|
|
const { data } = collectionData;
|
|
const { posts, analytics } = data;
|
|
|
|
return posts
|
|
.filter((post) => {
|
|
if (analytics.find((p) => p.page.includes(post.url))) return true;
|
|
})
|
|
.sort((a, b) => {
|
|
const visitors = (page) =>
|
|
analytics.filter((p) => p.page.includes(page.url)).pop()?.visitors;
|
|
return visitors(b) - visitors(a);
|
|
});
|
|
};
|
|
|
|
export const albumReleasesCalendar = (collection) => {
|
|
const collectionData = collection.getAll()[0];
|
|
const { data } = collectionData;
|
|
const {
|
|
albumReleases: { all },
|
|
} = data;
|
|
if (!all || all.length === 0) return "";
|
|
|
|
const events = all
|
|
.map((album) => {
|
|
const date = DateTime.fromISO(album["release_date"]);
|
|
if (!date.isValid) return null;
|
|
|
|
return {
|
|
start: [date.year, date.month, date.day],
|
|
startInputType: "local",
|
|
startOutputType: "local",
|
|
title: `Release: ${album["artist"]["name"]} - ${album["title"]}`,
|
|
description: `Check out this new album release: ${album["url"]}. Read more about ${album["artist"]["name"]} at https://coryd.dev${album["artist"]["url"]}`,
|
|
url: album["url"],
|
|
uid: `${date.toFormat("yyyyMMdd")}-${album["artist"]["name"]}-${
|
|
album["title"]
|
|
}@coryd.dev`,
|
|
timestamp: DateTime.now().toUTC().toFormat("yyyyMMdd'T'HHmmss'Z'"),
|
|
};
|
|
})
|
|
.filter((event) => event !== null);
|
|
|
|
const { error, value } = ics.createEvents(events, {
|
|
calName: "Album releases calendar / coryd.dev",
|
|
});
|
|
|
|
if (error) {
|
|
console.error("Error creating events: ", error);
|
|
events.forEach((event, index) => {
|
|
console.error(`Event ${index}:`, event);
|
|
});
|
|
return "";
|
|
}
|
|
|
|
return value;
|
|
};
|