Skip to content

Commit 41ccb68

Browse files
committed
auto-update check support and refactoring support with docs updated
1 parent ca403fc commit 41ccb68

File tree

7 files changed

+363
-110
lines changed

7 files changed

+363
-110
lines changed

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,9 @@
1+
## 0.1.2-dev.0+3
2+
3+
- Bug fix in update logic.
4+
## 0.1.1-dev.0+3
5+
6+
- Support for update check added and some refactoring. Documentation updated.
17
## 0.1.0-dev.0+2
28

39
- Fixed typo in repository name in pubspec.yaml.

README.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,19 @@ dart pub global activate asset_manager_cli
2020
## Overview
2121

2222
To auto-generate and add assets code to your pubspec.yaml, run the following command at the root of your project.
23-
```DART
23+
```
2424
2525
asset_manager add
2626
2727
```
28+
29+
To update to latest version, run the following command.
30+
```
31+
32+
asset_manager update
33+
34+
```
35+
2836
## ❕Note
2937

3038
The cli assumes the following structure for your assets folder.

bin/asset_manager.dart

Lines changed: 17 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,23 @@
11
import 'dart:io';
22

33
import 'package:args/args.dart';
4+
import 'package:asset_manager_cli/asset_manager_cli.dart';
45
import 'package:mason_logger/mason_logger.dart';
56

67
void main(List<String> arguments) async {
7-
final parser = ArgParser()..addCommand("add");
8+
final parser = ArgParser()
9+
..addCommand("add")
10+
..addCommand("update");
11+
812
final logger = Logger();
13+
914
final ArgResults argResults;
1015

1116
try {
1217
argResults = parser.parse(arguments);
1318
} catch (e) {
1419
logger.err(e.toString());
20+
await checkForUpdate();
1521
exit(1);
1622
}
1723

@@ -23,113 +29,19 @@ Usage: asset_manager <command> [arguments]
2329
2430
2531
Available commands:
26-
add Generates and adds assets code into pubspec.yaml
27-
32+
$commandsWithInfoString
2833
''');
2934
exit(0);
3035
}
31-
final bool isBuild = argResults.command?.name == "add";
32-
33-
if (!isBuild) {
34-
final unknownCommand = argResults.arguments[0];
35-
logger.err(
36-
"Command not found $unknownCommand\nDid you mean one of these commands?\nadd");
37-
38-
exit(1);
39-
}
40-
41-
final progress = logger.progress("Generating assets code");
42-
try {
43-
final assetDir = Directory('assets');
44-
final fontsDir = Directory('assets/fonts');
45-
final pubspecFile = File('pubspec.yaml');
46-
47-
final subdirectories = assetDir.listSync();
48-
49-
final openedFile = pubspecFile.readAsLinesSync();
50-
final addAfterLine =
51-
openedFile.indexWhere(((element) => element == "flutter:"));
52-
53-
openedFile.insert(addAfterLine + 1, "\n assets:");
54-
55-
List<String> assetsString = [];
56-
// add assets code except fonts
57-
for (var i = 0; i < subdirectories.length; i++) {
58-
final subdirectory = subdirectories[i];
59-
if (subdirectory is Directory) {
60-
if (!subdirectory.path.contains("fonts")) {
61-
assetsString.add(" - ${subdirectory.path}/");
62-
63-
assetsString.addAll(addToAssets(subdirectory));
64-
}
65-
}
66-
}
67-
68-
openedFile.insertAll(addAfterLine + 2, assetsString);
69-
70-
// add fonts code
71-
72-
openedFile.insert(addAfterLine + 2 + assetsString.length, "\n fonts:");
73-
74-
final fonts = fontsDir.listSync();
75-
List<String> fontsString = [];
76-
77-
for (var font in fonts) {
78-
if (font is Directory) {
79-
final fontFamily = font.path.split('/').last;
80-
fontsString.add(" - family: $fontFamily");
81-
fontsString.add(" fonts:");
82-
final fontFiles = Directory(font.path).listSync();
83-
for (var fontFile in fontFiles) {
84-
if (fontFile is File) {
85-
final fontFileExtension =
86-
fontFile.path.split('/').last.split(".").last;
87-
if (fontFileExtension == "ttf") {
88-
final fontFilePath = fontFile.path;
89-
final fontProperties =
90-
fontFilePath.split('/').last.split('.').first.split('-');
91-
final fontFileWeight = fontProperties.last;
92-
final fontFileStyle = fontProperties[1].toLowerCase();
93-
fontsString.add(
94-
" - asset: $fontFilePath",
95-
);
96-
fontsString.add(
97-
" weight: $fontFileWeight",
98-
);
99-
if (fontFileStyle != "regular") {
100-
fontsString.add(
101-
" style: $fontFileStyle",
102-
);
103-
}
104-
}
105-
}
106-
}
107-
}
108-
}
109-
110-
openedFile.insertAll(addAfterLine + 3 + assetsString.length, fontsString);
111-
pubspecFile.writeAsString(openedFile.join("\n"));
112-
progress.complete("Assets added to pubspec.yaml");
113-
} catch (e) {
114-
progress.fail("Error: $e");
115-
exit(1);
116-
}
117-
}
11836

119-
List<String> addToAssets(Directory directory) {
120-
List<String> assetString = [];
121-
122-
final subDirectories = directory.listSync();
123-
124-
for (var subDir in subDirectories) {
125-
if (subDir is Directory) {
126-
final subDirPath = subDir.path;
127-
if (!subDirPath.contains('fonts')) {
128-
assetString.add(" - $subDirPath/");
129-
}
130-
assetString.addAll(addToAssets(subDir));
131-
}
37+
switch (argResults.command?.name) {
38+
case "add":
39+
addAssetsCode(logger);
40+
break;
41+
case "update":
42+
updateCLI();
43+
break;
44+
default:
45+
commandNotFound(commandsWithInfoString, argResults, logger);
13246
}
133-
134-
return assetString;
13547
}

lib/asset_manager_cli.dart

Lines changed: 140 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,141 @@
1-
int calculate() {
2-
return 6 * 7;
1+
import 'dart:io';
2+
3+
import 'package:args/args.dart';
4+
import 'package:asset_manager_cli/src/version.dart';
5+
import 'package:mason_logger/mason_logger.dart';
6+
import 'package:pub_updater/pub_updater.dart';
7+
8+
final pubUpdater = PubUpdater();
9+
10+
Future<void> checkForUpdate() async {
11+
// Create an instance of PubUpdater
12+
13+
// Check whether or not packageVersion is the latest version of asset_manager_cli
14+
final isUpToDate = await pubUpdater.isUpToDate(
15+
packageName: 'asset_manager_cli',
16+
currentVersion: packageVersion,
17+
);
18+
19+
// Trigger an upgrade to the latest version if asset_manager_cli is not up to date
20+
if (!isUpToDate) {
21+
await pubUpdater.update(packageName: 'asset_manager_cli');
22+
}
23+
}
24+
25+
void commandNotFound(
26+
String commands, ArgResults argResults, Logger logger) async {
27+
final unknownCommand = argResults.arguments[0];
28+
logger.err(
29+
"Command not found $unknownCommand\nDid you mean one of these commands?\n$commands");
30+
await checkForUpdate();
31+
exit(1);
32+
}
33+
34+
String commandsWithInfoString = '''
35+
add Generates and adds assets code into pubspec.yaml
36+
update Updates asset_manager_cli to the latest version
37+
''';
38+
39+
void addAssetsCode(Logger logger) async {
40+
final progress = logger.progress("Generating assets code");
41+
try {
42+
final assetDir = Directory('assets');
43+
final fontsDir = Directory('assets/fonts');
44+
final pubspecFile = File('pubspec.yaml');
45+
46+
final subdirectories = assetDir.listSync();
47+
48+
final openedFile = pubspecFile.readAsLinesSync();
49+
final addAfterLine =
50+
openedFile.indexWhere(((element) => element == "flutter:"));
51+
52+
openedFile.insert(addAfterLine + 1, "\n assets:");
53+
54+
List<String> assetsString = [];
55+
// add assets code except fonts
56+
for (var i = 0; i < subdirectories.length; i++) {
57+
final subdirectory = subdirectories[i];
58+
if (subdirectory is Directory) {
59+
if (!subdirectory.path.contains("fonts")) {
60+
assetsString.add(" - ${subdirectory.path}/");
61+
62+
assetsString.addAll(generateDirAssetsCode(subdirectory));
63+
}
64+
}
65+
}
66+
67+
openedFile.insertAll(addAfterLine + 2, assetsString);
68+
69+
// add fonts code
70+
71+
openedFile.insert(addAfterLine + 2 + assetsString.length, "\n fonts:");
72+
73+
final fonts = fontsDir.listSync();
74+
List<String> fontsString = [];
75+
76+
for (var font in fonts) {
77+
if (font is Directory) {
78+
final fontFamily = font.path.split('/').last;
79+
fontsString.add(" - family: $fontFamily");
80+
fontsString.add(" fonts:");
81+
final fontFiles = Directory(font.path).listSync();
82+
for (var fontFile in fontFiles) {
83+
if (fontFile is File) {
84+
final fontFileExtension =
85+
fontFile.path.split('/').last.split(".").last;
86+
if (fontFileExtension == "ttf") {
87+
final fontFilePath = fontFile.path;
88+
final fontProperties =
89+
fontFilePath.split('/').last.split('.').first.split('-');
90+
final fontFileWeight = fontProperties.last;
91+
final fontFileStyle = fontProperties[1].toLowerCase();
92+
fontsString.add(
93+
" - asset: $fontFilePath",
94+
);
95+
fontsString.add(
96+
" weight: $fontFileWeight",
97+
);
98+
if (fontFileStyle != "regular") {
99+
fontsString.add(
100+
" style: $fontFileStyle",
101+
);
102+
}
103+
}
104+
}
105+
}
106+
}
107+
}
108+
109+
openedFile.insertAll(addAfterLine + 3 + assetsString.length, fontsString);
110+
pubspecFile.writeAsString(openedFile.join("\n"));
111+
progress.complete("Assets added to pubspec.yaml");
112+
await checkForUpdate();
113+
exit(0);
114+
} catch (e) {
115+
progress.fail("Error: $e");
116+
await checkForUpdate();
117+
exit(1);
118+
}
119+
}
120+
121+
List<String> generateDirAssetsCode(Directory directory) {
122+
List<String> assetString = [];
123+
124+
final subDirectories = directory.listSync();
125+
126+
for (var subDir in subDirectories) {
127+
if (subDir is Directory) {
128+
final subDirPath = subDir.path;
129+
if (!subDirPath.contains('fonts')) {
130+
assetString.add(" - $subDirPath/");
131+
}
132+
assetString.addAll(generateDirAssetsCode(subDir));
133+
}
134+
}
135+
136+
return assetString;
137+
}
138+
139+
Future<void> updateCLI() async {
140+
await pubUpdater.update(packageName: "asset_manager_cli");
3141
}

lib/src/version.dart

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)