You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
2.7 KiB
91 lines
2.7 KiB
import 'dart:io';
|
|
|
|
import 'package:logger/logger.dart';
|
|
|
|
import 'android_module_creator.dart';
|
|
import 'github_api.dart';
|
|
import 'precondition_checker.dart';
|
|
|
|
import 'android_cleanup.dart' as cleanup;
|
|
|
|
const String scriptName = 'android_setup';
|
|
const String moduleName = 'spotify-app-remote';
|
|
|
|
final logger = Logger(filter: ScriptLogFilter(), printer: SimplePrinter());
|
|
Level loglevel = Level.info;
|
|
|
|
Future<void> main(List<String> args) async {
|
|
if (args.contains('--help')) {
|
|
logger.i('''
|
|
Usage: $scriptName [options]
|
|
Options:
|
|
--help: show this help message
|
|
--verbose: show all logs
|
|
--cleanup: runs the cleanup script before executing the setup script to remove all previously created changes
|
|
--sdk-version: the version of the Spotify Android SDK, default is the latest release on GitHub (eg. --sdk-version=0.8.0)
|
|
''');
|
|
return;
|
|
}
|
|
|
|
if (args.contains('--verbose')) {
|
|
loglevel = Level.trace;
|
|
logger.t('verbose logging enabled');
|
|
}
|
|
|
|
if (args.contains('--cleanup')) {
|
|
logger.t('running cleanup script');
|
|
await cleanup.main(args);
|
|
}
|
|
|
|
if (!PreconditionChecker.setupConditionsMet()) {
|
|
logger.e('$scriptName can not be executed, '
|
|
'please make sure to meet all requirements and try again.');
|
|
} else {
|
|
logger.i('running $scriptName script');
|
|
String? sdkVersion = args.cast<String?>().firstWhere(
|
|
(element) => element?.startsWith('--sdk-version=') ?? false,
|
|
orElse: () => null);
|
|
_runSetup(sdkVersion: sdkVersion);
|
|
}
|
|
}
|
|
|
|
/// Runs the setup process.
|
|
void _runSetup({String? sdkVersion}) async {
|
|
Uri url;
|
|
String name;
|
|
try {
|
|
if (sdkVersion == null) {
|
|
(name, url) =
|
|
await GitHubApi.fetchLatestAppRemoteReleaseAssetDownloadUrl();
|
|
} else {
|
|
(name, url) =
|
|
await GitHubApi.fetchVersionedAppRemoteReleaseAssetDownloadUrl(
|
|
sdkVersion);
|
|
}
|
|
} catch (e) {
|
|
logger.e('Failed to fetch the Spotify Android SDK asset, terminating.');
|
|
return;
|
|
}
|
|
|
|
// create the new module directory
|
|
final destination = File('android/$moduleName/$name')
|
|
..createSync(recursive: true);
|
|
logger.t('created new file ${destination.path}');
|
|
|
|
// download the aar file to the new destination module
|
|
final client = HttpClient();
|
|
final request = await client.getUrl(url);
|
|
final response = await request.close();
|
|
await response.pipe(destination.openWrite());
|
|
client.close();
|
|
logger.t('downloaded $name to ${destination.path}');
|
|
|
|
// create the new module
|
|
await AndroidModuleCreator(moduleName, name).createModuleDirectory();
|
|
}
|
|
|
|
/// Log filter to show all logs when running the script in release mode.
|
|
class ScriptLogFilter extends LogFilter {
|
|
@override
|
|
bool shouldLog(LogEvent event) => event.level.index >= loglevel.index;
|
|
}
|
|
|