First commit

This commit is contained in:
2025-10-15 00:07:35 -05:00
commit 5e354c05be
69 changed files with 4598 additions and 0 deletions

View File

@@ -0,0 +1,127 @@
class TYTD.Music
{
public getUserAgent() $"TYTDMusic/{this.getUserAgent.File.Version.Major}.{this.getUserAgent.File.Version.Minor}.{this.getUserAgent.File.Version.Patch} ( tesses@tesses.net )";
public TYTD;
public Music(tytd)
{
this.TYTD = tytd;
TYTD.Storage.CreateDirectory(/"Album Arts");
}
public GetArtists(query)
{
var req = {
RequestHeaders = [
{
Key = "User-Agent",
Value = this.UserAgent
}
]
};
var resp = Net.Http.MakeRequest($"https://musicbrainz.org/ws/2/artist?query={Net.Http.UrlEncode(query)}&fmt=json",req);
if(resp.StatusCode >= 200 && resp.StatusCode <= 299)
{
var jo = Json.Decode(resp.ReadAsString());
var items = [];
each(var item : jo.artists)
{
items.Add({
id = item.id,
type = item.type,
name = item.name
});
}
return items;
}
return null;
}
public GetArtistsAlbums(artist_id)
{
var req = {
RequestHeaders = [
{
Key = "User-Agent",
Value = this.UserAgent
}
]
};
var resp = Net.Http.MakeRequest($"https://musicbrainz.org/ws/2/artist/{Net.Http.UrlPathEncode(artist_id)}?inc=artist-credits+releases&fmt=json",req);
if(resp.StatusCode >= 200 && resp.StatusCode <= 299)
{
var jo = Json.Decode(resp.ReadAsString());
var items = [];
each(var item : jo.releases)
{
items.Add({
id = item.id,
packaging = item.packaging,
title = item.title,
date = item.date
});
}
return {items,name=jo.name};
}
return null;
}
public GetAlbumArts(album_id)
{
var req = {
RequestHeaders = [
{
Key = "User-Agent",
Value = UserAgent
}
],
FollowRedirects=true
};
var url = $"https://coverartarchive.org/release/{Net.Http.UrlPathEncode(album_id)}";
var resp = Net.Http.MakeRequest(url,req);
if(resp.StatusCode >= 200 && resp.StatusCode <= 299)
{
return Json.Decode(resp.ReadAsString());
}
return null;
}
public GetAlbumArt(album_id, res)
{
var path = /"Album Arts"/$"{album_id}-{res}.jpg";
if(TYTD.Storage.FileExists(path)) return FS.ReadAllBytes(TYTD.Storage,path);
var arts = GetAlbumArts(album_id);
if(arts == null) return null;
each(var img : arts.images)
{
if(img.front)
{
var url = res == "full" ? img.image : img.thumbnails.[res];
var req = {
RequestHeaders = [
{
Key = "User-Agent",
Value = UserAgent
}
],
FollowRedirects=true
};
var resp = Net.Http.MakeRequest(url.Replace("http://","https://"),req);
if(resp.StatusCode >= 200 && resp.StatusCode <= 299)
{
var strm = TYTD.Storage.OpenFile(path,"wb");
resp.CopyToStream(strm);
strm.Close();
return FS.ReadAllBytes(TYTD.Storage,path);
}
}
}
return null;
}
}