fix(sonarr): support Sonarr v4 API changes

This commit is contained in:
Jagandeep Brar
2022-09-18 21:31:58 -04:00
parent da20cbb127
commit e477ecafcc
14 changed files with 72 additions and 40 deletions

View File

@@ -621,10 +621,10 @@ class SonarrAPIController {
required SonarrSeriesType seriesType,
required bool seasonFolder,
required SonarrQualityProfile qualityProfile,
required SonarrLanguageProfile languageProfile,
required SonarrRootFolder rootFolder,
required SonarrSeriesMonitorType monitorType,
required List<SonarrTag> tags,
SonarrLanguageProfile? languageProfile,
bool showSnackbar = true,
}) async {
if (context.read<SonarrState>().enabled) {

View File

@@ -139,10 +139,11 @@ extension SonarrEventTypeLunaExtension on SonarrEventType {
title: 'sonarr.Quality'.tr(),
body: history.quality?.quality?.name ?? LunaUI.TEXT_EMDASH,
),
LunaTableContent(
title: 'sonarr.Languages'.tr(),
body: history.language?.name ?? LunaUI.TEXT_EMDASH,
),
if (history.language != null)
LunaTableContent(
title: 'sonarr.Languages'.tr(),
body: history.language?.name ?? LunaUI.TEXT_EMDASH,
),
LunaTableContent(
title: 'sonarr.Client'.tr(),
body: history.data!['downloadClient'] ?? LunaUI.TEXT_EMDASH,
@@ -242,10 +243,11 @@ extension SonarrEventTypeLunaExtension on SonarrEventType {
title: 'sonarr.Quality'.tr(),
body: history.quality?.quality?.name ?? LunaUI.TEXT_EMDASH,
),
LunaTableContent(
title: 'sonarr.Languages'.tr(),
body: history.language?.name ?? LunaUI.TEXT_EMDASH,
),
if (history.language != null)
LunaTableContent(
title: 'sonarr.Languages'.tr(),
body: history.language?.name ?? LunaUI.TEXT_EMDASH,
),
LunaTableContent(
title: 'sonarr.Indexer'.tr(),
body: history.data!['indexer'],

View File

@@ -142,10 +142,13 @@ extension SonarrSeriesExtension on SonarrSeries {
series.seasonFolder = edits.useSeasonFolders;
series.path = edits.seriesPath;
series.qualityProfileId = edits.qualityProfile?.id ?? this.qualityProfileId;
series.languageProfileId =
edits.languageProfile.id ?? this.languageProfileId;
series.seriesType = edits.seriesType ?? this.seriesType;
series.tags = edits.tags?.map((t) => t.id!).toList() ?? [];
if (edits.languageProfile != null) {
series.languageProfileId =
edits.languageProfile!.id ?? this.languageProfileId;
}
return series;
}
}

View File

@@ -221,8 +221,24 @@ class SonarrState extends LunaModuleState {
notifyListeners();
}
Future<List<SonarrLanguageProfile>> _fetchLanguageProfiles() async {
try {
final profiles = await _api!.profile.getLanguageProfiles();
return profiles;
} catch (error, stack) {
LunaLogger().error(
'Failed to fetch language profiles, assuming v4',
error,
stack,
);
return const [];
}
}
void fetchLanguageProfiles() {
if (_api != null) _languageProfiles = _api!.profile.getLanguageProfiles();
if (_api != null) {
_languageProfiles = _fetchLanguageProfiles();
}
notifyListeners();
}

View File

@@ -124,7 +124,8 @@ class _State extends State<AddSeriesDetailsRoute>
const SonarrSeriesAddDetailsRootFolderTile(),
const SonarrSeriesAddDetailsMonitorTile(),
const SonarrSeriesAddDetailsQualityProfileTile(),
const SonarrSeriesAddDetailsLanguageProfileTile(),
if (languageProfiles.isNotEmpty)
const SonarrSeriesAddDetailsLanguageProfileTile(),
const SonarrSeriesAddDetailsSeriesTypeTile(),
const SonarrSeriesAddDetailsUseSeasonFoldersTile(),
const SonarrSeriesAddDetailsTagsTile(),

View File

@@ -121,7 +121,8 @@ class _State extends State<SeriesEditRoute>
const SonarrSeriesEditMonitoredTile(),
const SonarrSeriesEditSeasonFoldersTile(),
SonarrSeriesEditQualityProfileTile(profiles: qualityProfiles),
SonarrSeriesEditLanguageProfileTile(profiles: languageProfiles),
if (languageProfiles.isNotEmpty)
SonarrSeriesEditLanguageProfileTile(profiles: languageProfiles),
const SonarrSeriesEditSeriesTypeTile(),
const SonarrSeriesEditSeriesPathTile(),
const SonarrSeriesEditTagsTile(),

View File

@@ -80,14 +80,15 @@ class SonarrSeriesEditState extends ChangeNotifier {
);
}
late SonarrLanguageProfile _languageProfile;
SonarrLanguageProfile get languageProfile => _languageProfile;
set languageProfile(SonarrLanguageProfile languageProfile) {
SonarrLanguageProfile? _languageProfile;
SonarrLanguageProfile? get languageProfile => _languageProfile;
set languageProfile(SonarrLanguageProfile? languageProfile) {
_languageProfile = languageProfile;
notifyListeners();
}
void initializeLanguageProfile(List<SonarrLanguageProfile> languageProfiles) {
if (languageProfiles.isEmpty) return;
_languageProfile = languageProfiles.firstWhere(
(p) => p.id == series!.languageProfileId,
);

View File

@@ -16,7 +16,8 @@ class SonarrSeriesEditLanguageProfileTile extends StatelessWidget {
title: 'sonarr.LanguageProfile'.tr(),
body: [
TextSpan(
text: context.watch<SonarrSeriesEditState>().languageProfile.name,
text: context.watch<SonarrSeriesEditState>().languageProfile?.name ??
LunaUI.TEXT_EMDASH,
),
],
trailing: const LunaIconButton.arrow(),

View File

@@ -92,10 +92,12 @@ class _State extends State<SonarrQueueTile> {
text: widget.queueRecord.quality?.quality?.name ?? LunaUI.TEXT_EMDASH,
),
TextSpan(text: LunaUI.TEXT_BULLET.pad()),
TextSpan(
text: widget.queueRecord.language?.name ?? LunaUI.TEXT_EMDASH,
),
TextSpan(text: LunaUI.TEXT_BULLET.pad()),
if (widget.queueRecord.language != null)
TextSpan(
text: widget.queueRecord.language?.name ?? LunaUI.TEXT_EMDASH,
),
if (widget.queueRecord.language != null)
TextSpan(text: LunaUI.TEXT_BULLET.pad()),
TextSpan(
text: widget.queueRecord.lunaTimeLeft(),
),
@@ -162,10 +164,11 @@ class _State extends State<SonarrQueueTile> {
title: 'sonarr.Quality'.tr(),
body: widget.queueRecord.quality?.quality?.name ?? LunaUI.TEXT_EMDASH,
),
LunaTableContent(
title: 'sonarr.Language'.tr(),
body: widget.queueRecord.language?.name ?? LunaUI.TEXT_EMDASH,
),
if (widget.queueRecord.language != null)
LunaTableContent(
title: 'sonarr.Language'.tr(),
body: widget.queueRecord.language?.name ?? LunaUI.TEXT_EMDASH,
),
LunaTableContent(
title: 'sonarr.Client'.tr(),
body: widget.queueRecord.downloadClient ?? LunaUI.TEXT_EMDASH,

View File

@@ -80,8 +80,10 @@ class _State extends State<SonarrReleasesTile> {
if (_preferredWordScore != null)
TextSpan(text: LunaUI.TEXT_BULLET.pad()),
TextSpan(text: widget.release.lunaQuality),
TextSpan(text: LunaUI.TEXT_BULLET.pad()),
TextSpan(text: widget.release.lunaLanguage),
if (widget.release.language != null)
TextSpan(text: LunaUI.TEXT_BULLET.pad()),
if (widget.release.language != null)
TextSpan(text: widget.release.lunaLanguage),
TextSpan(text: LunaUI.TEXT_BULLET.pad()),
TextSpan(text: widget.release.lunaSize),
],
@@ -118,10 +120,11 @@ class _State extends State<SonarrReleasesTile> {
title: 'sonarr.Size'.tr(),
body: widget.release.lunaSize,
),
LunaTableContent(
title: 'sonarr.Language'.tr(),
body: widget.release.lunaLanguage,
),
if (widget.release.language != null)
LunaTableContent(
title: 'sonarr.Language'.tr(),
body: widget.release.lunaLanguage,
),
LunaTableContent(
title: 'sonarr.Quality'.tr(),
body: widget.release.lunaQuality,

View File

@@ -47,7 +47,9 @@ class SonarrEpisodeDetailsSheet extends LunaBottomModalSheet {
: LunaColours.accent,
text: episodeFile!.quality?.quality?.name ?? LunaUI.TEXT_EMDASH,
),
if (episode!.hasFile! && episodeFile != null)
if (episode!.hasFile! &&
episodeFile != null &&
episodeFile!.languageCutoffNotMet != null)
LunaHighlightedNode(
backgroundColor: episodeFile!.languageCutoffNotMet!
? LunaColours.orange