Files
Simplaudio/Scripts/Data.cs
T
2025-09-02 14:41:39 +02:00

112 lines
2.7 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using Godot;
using ATL.AudioData;
using ATL;
using System.Net.Http;
public class Song{
public String Name;
public bool LoadedMetadata;
public String Artist;
public String Album;
public float Length;
public String Comment;
public String URL;
public String Directory;
public void LoadMetadata(){
var TLfile = TagLib.File.Create(Directory);
Track theTrack = new Track(Directory);
if (theTrack.AdditionalFields.ContainsKey("comment")){
URL = theTrack.AdditionalFields["comment"];
}
Album ??= theTrack.Album;
Artist ??= theTrack.Artist;
Name = String.IsNullOrEmpty(TLfile.Tag.Title) ? Name : theTrack.Title;
Length = theTrack.Duration;
Comment = theTrack.Comment;
}
public Image LoadImage(){
var TLfile = TagLib.File.Create(Directory);
if (TLfile.Tag.Pictures.Count() == 0){
return null;
}
String type = TLfile.Tag.Pictures[0].MimeType;
byte[] pictureData = TLfile.Tag.Pictures[0].Data.Data;
Image image = new Image();
Error error = Error.Failed;
switch (type)
{
case "image/jpeg":
error = image.LoadJpgFromBuffer(pictureData);
break;
case "image/png":
error = image.LoadPngFromBuffer(pictureData);
break;
case "image/webp":
error = image.LoadWebpFromBuffer(pictureData);
break;
}
GD.Print(image);
return image;
}
}
public class DirectoryLoader{
Task LoadTask;
IEnumerable<Song> LoadedSongs;
public IEnumerable<Song> LoadDirectory(String Path){
GD.Print("Finished");
return ParseDirectory(Path);
//if (file.EndsWith(".mp3"))
}
private IEnumerable<Song> ParseDirectory(String Path){
System.Collections.Generic.IEnumerable<string> Files = Directory.EnumerateFiles(Path);
IEnumerable<Song> Songs = [];
foreach (String file in Files){
if (!(file.EndsWith(".mp3") || file.EndsWith(".ogg") || file.EndsWith(".wav"))){
continue;
}
Song song = new()
{
Directory = file,
};
String[] parts = file.Split("/");
String LastPart = parts[^1 ];
song.Name = LastPart;
Songs = Songs.Append(song);
}
return Songs;
}
}
class URLImageGetter{
public static String GetImageURL(String source){
String cleansource = source;
String ImageURL = "";
if (cleansource.StartsWith("https://")){
cleansource = cleansource.Remove(0,7);
}
GD.Print(cleansource);
if (source.StartsWith("www.youtube.com")){
ImageURL = "https://i.ytimg.com/vi/";
ImageURL += cleansource.Split("?")[1].Split("?")[0].Replace("v=","");
ImageURL += "/hqdefault.jpg";
}
GD.Print("converted ", source, " to ", ImageURL);
return ImageURL;
}
}