Исправление: том ./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,62 @@
namespace Music;
public sealed class MusicAudioTransientException : Exception
{
public string ProviderId { get; }
public MusicAudioTransientException(string providerId, string operation, Exception innerException)
: base($"{providerId} {operation} temporarily failed.", innerException)
{
ProviderId = providerId;
}
}
public interface IMusicMetadataProvider
{
string Id { get; }
string Name { get; }
bool Enabled { get; }
Task<MusicSearchResult> SearchAsync(string query, bool expanded = false, CancellationToken cancellationToken = default);
Task<MusicArtist> GetArtistAsync(string id, CancellationToken cancellationToken = default);
Task<MusicAlbum> GetAlbumAsync(string id, CancellationToken cancellationToken = default);
Task<MusicTrack> GetTrackAsync(string id, CancellationToken cancellationToken = default);
}
public interface IMusicDiscoveryProvider
{
string Id { get; }
string Name { get; }
bool Enabled { get; }
Task<List<MusicBrowseSection>> GetHomeSectionsAsync(int limit, CancellationToken cancellationToken = default);
Task<MusicBrowseSection> GetSectionAsync(string sectionId, int limit, CancellationToken cancellationToken = default);
}
public interface IMusicAudioProvider
{
string Id { get; }
string Name { get; }
bool Enabled { get; }
bool RequiresAuth { get; }
bool CacheMissingMatches { get; }
Task<IReadOnlyList<MusicAudioMatch>> MatchTrackAsync(MusicTrack track, string playbackMode = null, string profileId = null, CancellationToken cancellationToken = default);
Task<IReadOnlyList<MusicAudioMatch>> SearchMatchesByQueryAsync(string query, CancellationToken cancellationToken = default);
Task<IReadOnlyList<MusicPlaybackSource>> GetStreamsAsync(MusicAudioMatch match, string playbackMode = null, string profileId = null, CancellationToken cancellationToken = default);
Task<MusicPlaybackSource> TryGetPreferredStreamAsync(MusicAudioMatch match, string playbackMode = null, string profileId = null, CancellationToken cancellationToken = default);
bool IsRelevantMatch(MusicTrack track, MusicAudioMatch match);
bool ShouldValidatePinnedMatch(MusicTrack track, MusicAudioMatch match);
IReadOnlyList<string> GetFallbackProviderIds(MusicTrack track);
}
public interface IMusicAuthProvider
{
string Id { get; }
string Name { get; }
bool Enabled { get; }
Task<MusicAuthState> GetStateAsync(string profileId = null, CancellationToken cancellationToken = default);
Task<bool> SaveAsync(string payload, string profileId = null, CancellationToken cancellationToken = default);
Task LogoutAsync(string profileId = null, CancellationToken cancellationToken = default);
}