Source configuration settings changes

- "Source config" refers to source-specific, app-agnostic settings
- Don't use saved config for overridden sources
- For overridden sources, use app-specific source config
- Allow sources to show notes on add-app page (#720)
This commit is contained in:
Imran Remtulla
2023-07-29 22:06:42 -04:00
parent a8bfb03f58
commit 76f8cd4102
19 changed files with 131 additions and 29 deletions

View File

@@ -16,7 +16,7 @@ class GitHub extends AppSource {
host = 'github.com';
appIdInferIsOptional = true;
additionalSourceSpecificSettingFormItems = [
sourceConfigSettingFormItems = [
GeneratedFormTextField('github-creds',
label: tr('githubPATLabel'),
password: true,
@@ -107,7 +107,7 @@ class GitHub extends AppSource {
for (var path in possibleBuildGradleLocations) {
try {
var res = await sourceRequest(
'${await convertStandardUrlToAPIUrl(standardUrl)}/contents/$path');
'${await convertStandardUrlToAPIUrl(standardUrl, additionalSettings)}/contents/$path');
if (res.statusCode == 200) {
try {
var body = jsonDecode(res.body);
@@ -155,19 +155,30 @@ class GitHub extends AppSource {
return url.substring(0, match.end);
}
Future<String> getCredentialPrefixIfAny() async {
Future<String> getCredentialPrefixIfAny(
Map<String, dynamic> additionalSettings) async {
SettingsProvider settingsProvider = SettingsProvider();
await settingsProvider.initializeSettings();
String? creds = settingsProvider
.getSettingString(additionalSourceSpecificSettingFormItems[0].key);
var sourceConfig =
await getSourceConfigValues(additionalSettings, settingsProvider);
String? creds = sourceConfig['github-creds'];
return creds != null && creds.isNotEmpty ? '$creds@' : '';
}
Future<String> getAPIHost() async =>
'https://${await getCredentialPrefixIfAny()}api.$host';
@override
Future<String?> getSourceNote() async {
if (!hostChanged && (await getCredentialPrefixIfAny({})).isEmpty) {
return '${tr('githubSourceNote')} ${hostChanged ? tr('addInfoBelow') : tr('addInfoInSettings')}';
}
return null;
}
Future<String> convertStandardUrlToAPIUrl(String standardUrl) async =>
'${await getAPIHost()}/repos${standardUrl.substring('https://$host'.length)}';
Future<String> getAPIHost(Map<String, dynamic> additionalSettings) async =>
'https://${await getCredentialPrefixIfAny(additionalSettings)}api.$host';
Future<String> convertStandardUrlToAPIUrl(
String standardUrl, Map<String, dynamic> additionalSettings) async =>
'${await getAPIHost(additionalSettings)}/repos${standardUrl.substring('https://$host'.length)}';
@override
String? changeLogPageFromStandardUrl(String standardUrl) =>
@@ -311,7 +322,7 @@ class GitHub extends AppSource {
) async {
return await getLatestAPKDetailsCommon2(standardUrl, additionalSettings,
(bool useTagUrl) async {
return '${await convertStandardUrlToAPIUrl(standardUrl)}/${useTagUrl ? 'tags' : 'releases'}?per_page=100';
return '${await convertStandardUrlToAPIUrl(standardUrl, additionalSettings)}/${useTagUrl ? 'tags' : 'releases'}?per_page=100';
}, (Response res) {
rateLimitErrorCheck(res);
});
@@ -360,7 +371,7 @@ class GitHub extends AppSource {
{Map<String, dynamic> querySettings = const {}}) async {
return searchCommon(
query,
'${await getAPIHost()}/search/repositories?q=${Uri.encodeQueryComponent(query)}&per_page=100',
'${await getAPIHost({})}/search/repositories?q=${Uri.encodeQueryComponent(query)}&per_page=100',
'items', onHttpErrorCode: (Response res) {
rateLimitErrorCheck(res);
}, querySettings: querySettings);