mirror of
https://github.com/KRTirtho/spotube.git
synced 2025-09-12 23:45:18 +00:00
fix: use plugin author and name as slug
This commit is contained in:
parent
66cae6c7ac
commit
c0d50d441e
@ -1,4 +1,3 @@
|
|||||||
import 'package:flutter/foundation.dart';
|
|
||||||
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
import 'package:hooks_riverpod/hooks_riverpod.dart';
|
||||||
import 'package:shadcn_flutter/shadcn_flutter.dart';
|
import 'package:shadcn_flutter/shadcn_flutter.dart';
|
||||||
import 'package:shadcn_flutter/shadcn_flutter_extension.dart';
|
import 'package:shadcn_flutter/shadcn_flutter_extension.dart';
|
||||||
|
@ -26,7 +26,8 @@ class MetadataPluginRepositoryItem extends HookConsumerWidget {
|
|||||||
|
|
||||||
return Card(
|
return Card(
|
||||||
child: Basic(
|
child: Basic(
|
||||||
title: Text(pluginRepo.name),
|
title: Text(
|
||||||
|
"${pluginRepo.owner == "KRTirtho" ? "" : "${pluginRepo.owner}/"}${pluginRepo.name}"),
|
||||||
subtitle: Column(
|
subtitle: Column(
|
||||||
mainAxisSize: MainAxisSize.min,
|
mainAxisSize: MainAxisSize.min,
|
||||||
crossAxisAlignment: CrossAxisAlignment.start,
|
crossAxisAlignment: CrossAxisAlignment.start,
|
||||||
|
@ -89,42 +89,60 @@ class MetadataPluginNotifier extends AsyncNotifier<MetadataPluginState> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Future<MetadataPluginState> toStatePlugins(
|
Future<MetadataPluginState> toStatePlugins(
|
||||||
List<MetadataPluginsTableData> plugins) async {
|
List<MetadataPluginsTableData> plugins,
|
||||||
|
) async {
|
||||||
int defaultPlugin = -1;
|
int defaultPlugin = -1;
|
||||||
final pluginConfigs = plugins.mapIndexed(
|
final pluginConfigs = <PluginConfiguration>[];
|
||||||
(index, plugin) {
|
|
||||||
if (plugin.selected) {
|
for (int i = 0; i < plugins.length; i++) {
|
||||||
defaultPlugin = index;
|
final plugin = plugins[i];
|
||||||
}
|
|
||||||
|
final pluginConfig = PluginConfiguration(
|
||||||
|
type: PluginType.metadata,
|
||||||
|
name: plugin.name,
|
||||||
|
author: plugin.author,
|
||||||
|
description: plugin.description,
|
||||||
|
version: plugin.version,
|
||||||
|
entryPoint: plugin.entryPoint,
|
||||||
|
pluginApiVersion: plugin.pluginApiVersion,
|
||||||
|
repository: plugin.repository,
|
||||||
|
apis: plugin.apis
|
||||||
|
.map(
|
||||||
|
(e) => PluginApis.values.firstWhereOrNull(
|
||||||
|
(api) => api.name == e,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
.nonNulls
|
||||||
|
.toList(),
|
||||||
|
abilities: plugin.abilities
|
||||||
|
.map(
|
||||||
|
(e) => PluginAbilities.values.firstWhereOrNull(
|
||||||
|
(ability) => ability.name == e,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
.nonNulls
|
||||||
|
.toList(),
|
||||||
|
);
|
||||||
|
|
||||||
|
final pluginExtractionDir = await _getPluginExtractionDir(pluginConfig);
|
||||||
|
final pluginJsonFile =
|
||||||
|
File(join(pluginExtractionDir.path, "plugin.json"));
|
||||||
|
final pluginBinaryFile =
|
||||||
|
File(join(pluginExtractionDir.path, "plugin.out"));
|
||||||
|
|
||||||
|
if (!await pluginExtractionDir.exists() ||
|
||||||
|
!await pluginJsonFile.exists() ||
|
||||||
|
!await pluginBinaryFile.exists()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
pluginConfigs.add(pluginConfig);
|
||||||
|
|
||||||
|
if (plugin.selected) {
|
||||||
|
defaultPlugin = pluginConfigs.length - 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return PluginConfiguration(
|
|
||||||
type: PluginType.metadata,
|
|
||||||
name: plugin.name,
|
|
||||||
author: plugin.author,
|
|
||||||
description: plugin.description,
|
|
||||||
version: plugin.version,
|
|
||||||
entryPoint: plugin.entryPoint,
|
|
||||||
pluginApiVersion: plugin.pluginApiVersion,
|
|
||||||
repository: plugin.repository,
|
|
||||||
apis: plugin.apis
|
|
||||||
.map(
|
|
||||||
(e) => PluginApis.values.firstWhereOrNull(
|
|
||||||
(api) => api.name == e,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
.nonNulls
|
|
||||||
.toList(),
|
|
||||||
abilities: plugin.abilities
|
|
||||||
.map(
|
|
||||||
(e) => PluginAbilities.values.firstWhereOrNull(
|
|
||||||
(ability) => ability.name == e,
|
|
||||||
),
|
|
||||||
)
|
|
||||||
.nonNulls
|
|
||||||
.toList(),
|
|
||||||
);
|
|
||||||
},
|
|
||||||
).toList();
|
|
||||||
return MetadataPluginState(
|
return MetadataPluginState(
|
||||||
plugins: pluginConfigs,
|
plugins: pluginConfigs,
|
||||||
defaultPlugin: defaultPlugin,
|
defaultPlugin: defaultPlugin,
|
||||||
@ -207,7 +225,7 @@ class MetadataPluginNotifier extends AsyncNotifier<MetadataPluginState> {
|
|||||||
final pluginDir = await _getPluginRootDir();
|
final pluginDir = await _getPluginRootDir();
|
||||||
final pluginExtractionDirPath = join(
|
final pluginExtractionDirPath = join(
|
||||||
pluginDir.path,
|
pluginDir.path,
|
||||||
"${ServiceUtils.sanitizeFilename(plugin.name)}-${plugin.version}",
|
"${ServiceUtils.sanitizeFilename(plugin.author)}-${ServiceUtils.sanitizeFilename(plugin.name)}-${plugin.version}",
|
||||||
);
|
);
|
||||||
return Directory(pluginExtractionDirPath);
|
return Directory(pluginExtractionDirPath);
|
||||||
}
|
}
|
||||||
@ -314,7 +332,8 @@ class MetadataPluginNotifier extends AsyncNotifier<MetadataPluginState> {
|
|||||||
|
|
||||||
final pluginRes = await (database.metadataPluginsTable.select()
|
final pluginRes = await (database.metadataPluginsTable.select()
|
||||||
..where(
|
..where(
|
||||||
(tbl) => tbl.name.equals(plugin.name),
|
(tbl) =>
|
||||||
|
tbl.name.equals(plugin.name) & tbl.author.equals(plugin.author),
|
||||||
)
|
)
|
||||||
..limit(1))
|
..limit(1))
|
||||||
.get();
|
.get();
|
||||||
@ -344,8 +363,8 @@ class MetadataPluginNotifier extends AsyncNotifier<MetadataPluginState> {
|
|||||||
if (pluginExtractionDir.existsSync()) {
|
if (pluginExtractionDir.existsSync()) {
|
||||||
await pluginExtractionDir.delete(recursive: true);
|
await pluginExtractionDir.delete(recursive: true);
|
||||||
}
|
}
|
||||||
await database.metadataPluginsTable
|
await database.metadataPluginsTable.deleteWhere((tbl) =>
|
||||||
.deleteWhere((tbl) => tbl.name.equals(plugin.name));
|
tbl.name.equals(plugin.name) & tbl.author.equals(plugin.author));
|
||||||
}
|
}
|
||||||
|
|
||||||
Future<void> updatePlugin(
|
Future<void> updatePlugin(
|
||||||
@ -356,7 +375,8 @@ class MetadataPluginNotifier extends AsyncNotifier<MetadataPluginState> {
|
|||||||
final pluginUpdatedConfig =
|
final pluginUpdatedConfig =
|
||||||
await downloadAndCachePlugin(update.downloadUrl);
|
await downloadAndCachePlugin(update.downloadUrl);
|
||||||
|
|
||||||
if (pluginUpdatedConfig.name != plugin.name) {
|
if (pluginUpdatedConfig.name != plugin.name &&
|
||||||
|
pluginUpdatedConfig.author != plugin.author) {
|
||||||
throw MetadataPluginException.invalidPluginConfiguration();
|
throw MetadataPluginException.invalidPluginConfiguration();
|
||||||
}
|
}
|
||||||
_assertPluginApiCompatibility(pluginUpdatedConfig);
|
_assertPluginApiCompatibility(pluginUpdatedConfig);
|
||||||
@ -375,7 +395,8 @@ class MetadataPluginNotifier extends AsyncNotifier<MetadataPluginState> {
|
|||||||
.write(const MetadataPluginsTableCompanion(selected: Value(false)));
|
.write(const MetadataPluginsTableCompanion(selected: Value(false)));
|
||||||
|
|
||||||
await (database.metadataPluginsTable.update()
|
await (database.metadataPluginsTable.update()
|
||||||
..where((tbl) => tbl.name.equals(plugin.name)))
|
..where((tbl) =>
|
||||||
|
tbl.name.equals(plugin.name) & tbl.author.equals(plugin.author)))
|
||||||
.write(
|
.write(
|
||||||
const MetadataPluginsTableCompanion(selected: Value(true)),
|
const MetadataPluginsTableCompanion(selected: Value(true)),
|
||||||
);
|
);
|
||||||
|
Loading…
Reference in New Issue
Block a user