Исправление: том ./mods:/lampac/mods в compose и копии 10 модулей с enable:true; конфиг без SkipModules

This commit is contained in:
2026-10-02 12:11:49 +03:00
parent 8dcbc6bc52
commit 7b8e28b3bf
151 changed files with 68625 additions and 44 deletions
@@ -0,0 +1,77 @@
using System.Text.Json;
namespace Music;
// Общие хелперы импортёров плейлистов (SoundCloud / Spotify / Apple Music).
//
// Контракт импорта: результат либо ПОЛНЫЙ, либо available=false с message —
// частично скачанный список сохранять нельзя (sync перезаписывает payload
// целиком, усечёнка молча потеряла бы треки пользователя). Единственное
// допустимое усечение — явный кап MaxImportTracks с truncated=true.
public static class MusicPlaylistImportHelpers
{
public static MusicUserPlaylistImportResult ImportUnavailable(string message)
=> new()
{
available = false,
message = message,
tracks = new List<MusicTrack>()
};
// дедуп по id с перенумерацией track_number по итоговому порядку
public static List<MusicTrack> DeduplicateTracks(IEnumerable<MusicTrack> tracks)
{
var result = new List<MusicTrack>();
var seen = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
foreach (var track in tracks ?? Enumerable.Empty<MusicTrack>())
{
if (track == null || string.IsNullOrWhiteSpace(track.id) || !seen.Add(track.id))
continue;
track.track_number = result.Count + 1;
result.Add(track);
}
return result;
}
public static JsonElement? GetProperty(JsonElement element, params string[] path)
{
var current = element;
foreach (var name in path)
{
if (current.ValueKind != JsonValueKind.Object || !current.TryGetProperty(name, out var next) || next.ValueKind == JsonValueKind.Null)
return null;
current = next;
}
return current;
}
public static JsonElement? GetProperty(JsonElement? element, params string[] path)
=> element == null ? null : GetProperty(element.Value, path);
public static string GetString(JsonElement element, string propertyName)
{
if (element.ValueKind != JsonValueKind.Object || !element.TryGetProperty(propertyName, out var property))
return null;
return property.ValueKind == JsonValueKind.String ? property.GetString() : null;
}
public static int? GetInt(JsonElement element, string propertyName)
{
if (element.ValueKind != JsonValueKind.Object || !element.TryGetProperty(propertyName, out var property))
return null;
if (property.ValueKind == JsonValueKind.Number && property.TryGetInt32(out int value))
return value;
if (property.ValueKind == JsonValueKind.String && int.TryParse(property.GetString(), out int parsed))
return parsed;
return null;
}
}