flr 3.0.0 → 3.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/Gemfile.lock +1 -1
- data/lib/flr.rb +2 -2
- data/lib/flr/command.rb +229 -93
- data/lib/flr/util/asset_util.rb +198 -0
- data/lib/flr/util/file_util.rb +15 -2
- data/lib/flr/version.rb +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0b4e690c98b54e5cb00ed7136585e7d86d47b14a499fff89b8c607faf750cfb7
|
4
|
+
data.tar.gz: 5a7335ddb9a37e4d94aee57ce86d291ea971d9ead763663f91c355210b07e0a2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 14dd754b4e3277fc773128058f8a167501c519e056aeb18e8e7f4ae0b1eb351d88da61b0482509ef2fbe3bd378d24cbaf09f39b52d8ae8f1412b92deb25e819a
|
7
|
+
data.tar.gz: 9ba05b656a9ed2c2e1c95004f1f4a0ce2e2fa1b43a0650164c3de5415f886376cb0a8bd3a3cfbda66ec5b7eccb97a960fb0fa958ee0194f06a12d71d4d683c66
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
## 3.1.0
|
2
|
+
|
3
|
+
- Support for processing(init/generate/monitor) multi projects(the main project and its sub projects in one workspace)
|
4
|
+
|
5
|
+
- Support for auto merging old asset specifications when specifying new assets
|
6
|
+
|
7
|
+
> This is can help you to auto keep the manually added asset specifications.
|
8
|
+
|
1
9
|
## 3.0.0
|
2
10
|
|
3
11
|
- Support for processing non-implied resource file
|
data/Gemfile.lock
CHANGED
data/lib/flr.rb
CHANGED
@@ -42,7 +42,7 @@ More details see https://github.com/Fly-Mix/flr-cli
|
|
42
42
|
|
43
43
|
LONGDESC
|
44
44
|
def init
|
45
|
-
Command.
|
45
|
+
Command.init_all
|
46
46
|
end
|
47
47
|
|
48
48
|
desc "run [--auto]", "Scan assets, specify scanned assets in pubspec.yaml, generate \"r.g.dart\""
|
@@ -62,7 +62,7 @@ More details see https://github.com/Fly-Mix/flr-cli
|
|
62
62
|
LONGDESC
|
63
63
|
option :auto, :type => :boolean
|
64
64
|
def run_command
|
65
|
-
options[:auto] ? Command.start_monitor : Command.
|
65
|
+
options[:auto] ? Command.start_monitor : Command.generate_all
|
66
66
|
end
|
67
67
|
map 'run' => :run_command
|
68
68
|
|
data/lib/flr/command.rb
CHANGED
@@ -164,31 +164,86 @@ Flr recommends the following flutter resource structure schemes:
|
|
164
164
|
return r_dart_library_version
|
165
165
|
end
|
166
166
|
|
167
|
-
|
168
|
-
|
169
|
-
flutter_project_root_dir = FileUtil.get_cur_flutter_project_root_dir
|
167
|
+
def self.init_all
|
168
|
+
flutter_main_project_root_dir = FileUtil.get_flutter_main_project_root_dir
|
170
169
|
|
171
170
|
# ----- Step-1 Begin -----
|
172
|
-
#
|
173
|
-
# - 检测当前
|
171
|
+
# 进行环境检测;若发现不合法的环境,则抛出异常,终止当前进程
|
172
|
+
# - 检测当前flutter主工程根目录是否存在 pubspec.yaml
|
174
173
|
#
|
175
174
|
|
176
175
|
begin
|
177
|
-
Checker.check_pubspec_file_is_existed(
|
176
|
+
Checker.check_pubspec_file_is_existed(flutter_main_project_root_dir)
|
177
|
+
rescue Exception => e
|
178
|
+
puts(e.message)
|
179
|
+
return
|
180
|
+
end
|
178
181
|
|
179
|
-
|
182
|
+
# ----- Step-1 End -----
|
180
183
|
|
181
|
-
|
184
|
+
puts("init all flutter projects now...")
|
185
|
+
|
186
|
+
# ----- Step-2 Begin -----
|
187
|
+
# 获取主工程和其所有子工程,对它们进行init_one操作
|
188
|
+
# - 获取flutter主工程根目录下所有的子工程目录
|
189
|
+
# - 初始化主工程
|
190
|
+
# - 初始化所有子工程
|
191
|
+
#
|
192
|
+
flutter_sub_project_root_dir_array = FileUtil.get_flutter_sub_project_root_dirs(flutter_main_project_root_dir)
|
193
|
+
|
194
|
+
puts("")
|
195
|
+
init_one(flutter_main_project_root_dir)
|
196
|
+
|
197
|
+
flutter_sub_project_root_dir_array.each do |flutter_project_root_dir|
|
198
|
+
puts("")
|
199
|
+
init_one(flutter_project_root_dir)
|
200
|
+
end
|
201
|
+
|
202
|
+
# ----- Step-2 End -----
|
182
203
|
|
204
|
+
# ----- Step-3 Begin -----
|
205
|
+
# 调用 flutter 工具,为主工程和所有子工程获取依赖
|
206
|
+
#
|
207
|
+
puts("")
|
208
|
+
puts("get dependencies for all flutter projects via execute \"flutter pub get\" now ...")
|
209
|
+
|
210
|
+
get_flutter_pub_cmd = "flutter pub get"
|
211
|
+
system(get_flutter_pub_cmd)
|
212
|
+
|
213
|
+
puts("[√]: get dependencies for all flutter projects done !!!")
|
214
|
+
|
215
|
+
# ----- Step-3 End -----
|
216
|
+
puts("")
|
217
|
+
puts("[√]: init all flutter projects done !!!")
|
218
|
+
|
219
|
+
puts("")
|
220
|
+
puts("[*]: if you want to know how to make a good resource structure for your flutter project, please run \"flr recommend\" ".tips_style)
|
221
|
+
end
|
222
|
+
|
223
|
+
# 对指定 flutter 工程进行初始化
|
224
|
+
def self.init_one(flutter_project_root_dir)
|
225
|
+
puts("------------------------------- init specified project -------------------------------")
|
226
|
+
|
227
|
+
puts("init #{flutter_project_root_dir} now...")
|
228
|
+
|
229
|
+
# ----- Step-1 Begin -----
|
230
|
+
# 进行环境检测;若发现不合法的环境,则抛出异常,终止当前进程
|
231
|
+
# - 检测 pubspec.yaml 是否存在
|
232
|
+
# - 检测 pubspec.yaml 是否合法
|
233
|
+
#
|
234
|
+
begin
|
235
|
+
Checker.check_pubspec_file_is_existed(flutter_project_root_dir)
|
236
|
+
pubspec_file_path = FileUtil.get_pubspec_file_path(flutter_project_root_dir)
|
237
|
+
pubspec_config = FileUtil.load_pubspec_config_from_file(pubspec_file_path)
|
183
238
|
rescue Exception => e
|
184
239
|
puts(e.message)
|
240
|
+
puts("[x]: init #{flutter_project_root_dir} failed".error_style)
|
241
|
+
puts("--------------------------------------------------------------------------------------")
|
185
242
|
return
|
186
243
|
end
|
187
244
|
|
188
245
|
# ----- Step-1 End -----
|
189
246
|
|
190
|
-
puts("init #{flutter_project_root_dir} now...")
|
191
|
-
|
192
247
|
# ----- Step-2 Begin -----
|
193
248
|
# 添加 flr_config 和 r_dart_library 的依赖声明到 pubspec.yaml
|
194
249
|
#
|
@@ -264,6 +319,9 @@ Flr recommends the following flutter resource structure schemes:
|
|
264
319
|
#
|
265
320
|
|
266
321
|
flutter_config = pubspec_config["flutter"]
|
322
|
+
if flutter_config.nil?
|
323
|
+
flutter_config = {}
|
324
|
+
end
|
267
325
|
|
268
326
|
flutter_assets = flutter_config["assets"]
|
269
327
|
should_rm_flutter_assets_Key = true
|
@@ -290,29 +348,67 @@ Flr recommends the following flutter resource structure schemes:
|
|
290
348
|
# 保存 pubspec.yaml
|
291
349
|
FileUtil.dump_pubspec_config_to_file(pubspec_config, pubspec_file_path)
|
292
350
|
|
293
|
-
puts("
|
351
|
+
puts("[√]: init #{flutter_project_root_dir} done !!!")
|
352
|
+
puts("--------------------------------------------------------------------------------------")
|
294
353
|
|
295
|
-
|
296
|
-
# 调用 flutter 工具,为 flutter 工程获取依赖
|
354
|
+
end
|
297
355
|
|
298
|
-
|
299
|
-
|
356
|
+
def self.generate_all
|
357
|
+
flutter_main_project_root_dir = FileUtil.get_flutter_main_project_root_dir
|
300
358
|
|
301
|
-
|
359
|
+
# ----- Step-1 Begin -----
|
360
|
+
# 进行环境检测;若发现不合法的环境,则抛出异常,终止当前进程。
|
361
|
+
# - 检测当前flutter主工程根目录是否存在 pubspec.yaml
|
362
|
+
#
|
363
|
+
begin
|
364
|
+
Checker.check_pubspec_file_is_existed(flutter_main_project_root_dir)
|
365
|
+
rescue Exception => e
|
366
|
+
puts(e.message)
|
367
|
+
return
|
368
|
+
end
|
302
369
|
|
303
|
-
# ----- Step-
|
370
|
+
# ----- Step-1 End -----
|
304
371
|
|
305
|
-
puts("
|
372
|
+
puts("generate for all flutter projects now...")
|
373
|
+
|
374
|
+
# ----- Step-2 Begin -----
|
375
|
+
# 获取主工程和其所有子工程,对它们进行generate_one操作
|
376
|
+
# - 获取flutter主工程根目录下所有的子工程目录
|
377
|
+
# - 对主工程执行generate_one操作
|
378
|
+
# - 对所有子工程执行generate_one操作
|
379
|
+
#
|
380
|
+
flutter_sub_project_root_dir_array = FileUtil.get_flutter_sub_project_root_dirs(flutter_main_project_root_dir)
|
306
381
|
|
307
382
|
puts("")
|
308
|
-
|
383
|
+
generate_one(flutter_main_project_root_dir)
|
309
384
|
|
310
|
-
|
385
|
+
flutter_sub_project_root_dir_array.each do |flutter_project_root_dir|
|
386
|
+
puts("")
|
387
|
+
generate_one(flutter_project_root_dir)
|
388
|
+
end
|
389
|
+
|
390
|
+
# ----- Step-2 End -----
|
311
391
|
|
312
|
-
|
313
|
-
|
392
|
+
# ----- Step-3 Begin -----
|
393
|
+
# 调用 flutter 工具,为主工程和所有子工程获取依赖
|
394
|
+
#
|
395
|
+
puts("")
|
396
|
+
puts("get dependencies for all flutter projects via execute \"flutter pub get\" now ...")
|
397
|
+
|
398
|
+
get_flutter_pub_cmd = "flutter pub get"
|
399
|
+
system(get_flutter_pub_cmd)
|
400
|
+
|
401
|
+
puts("[√]: get dependencies for all flutter projects done !!!")
|
402
|
+
|
403
|
+
# ----- Step-3 End -----
|
404
|
+
puts("")
|
405
|
+
puts("[√]: generate for all flutter projects done !!!")
|
406
|
+
end
|
314
407
|
|
315
|
-
|
408
|
+
# 为指定 flutter 工程扫描资源目录,自动为资源添加声明到 pubspec.yaml 和生成 r.g.dart
|
409
|
+
def self.generate_one(flutter_project_root_dir)
|
410
|
+
puts("--------------------------- generate for specified project ---------------------------")
|
411
|
+
puts("generate for #{flutter_project_root_dir} now...")
|
316
412
|
|
317
413
|
# 警告日志数组
|
318
414
|
warning_messages = []
|
@@ -340,6 +436,8 @@ Flr recommends the following flutter resource structure schemes:
|
|
340
436
|
|
341
437
|
rescue Exception => e
|
342
438
|
puts(e.message)
|
439
|
+
puts("[x]: generate for #{flutter_project_root_dir} failed".error_style)
|
440
|
+
puts("--------------------------------------------------------------------------------------")
|
343
441
|
return
|
344
442
|
end
|
345
443
|
|
@@ -552,23 +650,36 @@ Flr recommends the following flutter resource structure schemes:
|
|
552
650
|
|
553
651
|
# ----- Step-8 Begin -----
|
554
652
|
# 为扫描得到的legal_resource_file添加资源声明到pubspec.yaml:
|
555
|
-
# - 合并image_asset数组和text_asset数组为
|
653
|
+
# - 合并image_asset数组和text_asset数组为new_asset_array(image_asset数组元素在前);
|
654
|
+
# - 读取pubspec.yaml中flutter-assets配置,获得old_asset_array,然后和new_asset_array合并为asset数组;
|
556
655
|
# - 修改pubspec.yaml中flutter-assets配置的值为asset数组;
|
557
656
|
# - 修改pubspec.yaml中flutter-fonts配置的值为font_family_config数组。
|
558
657
|
|
559
|
-
|
658
|
+
flutter_config = pubspec_config["flutter"]
|
659
|
+
if flutter_config.nil?
|
660
|
+
flutter_config = {}
|
661
|
+
end
|
662
|
+
|
663
|
+
new_asset_array = image_asset_array + text_asset_array
|
664
|
+
old_asset_array = flutter_config["assets"]
|
665
|
+
if old_asset_array.nil? or old_asset_array.is_a?(Array) == false
|
666
|
+
old_asset_array = []
|
667
|
+
end
|
668
|
+
|
669
|
+
asset_array = AssetUtil.mergeFlutterAssets(flutter_project_root_dir, package_name, new_asset_array, old_asset_array)
|
560
670
|
if asset_array.length > 0
|
561
|
-
|
671
|
+
flutter_config["assets"] = asset_array
|
562
672
|
else
|
563
|
-
|
673
|
+
flutter_config.delete("assets")
|
564
674
|
end
|
565
675
|
|
566
676
|
if font_family_config_array.length > 0
|
567
|
-
|
677
|
+
flutter_config["fonts"] = font_family_config_array
|
568
678
|
else
|
569
|
-
|
679
|
+
flutter_config.delete("fonts")
|
570
680
|
end
|
571
681
|
|
682
|
+
pubspec_config["flutter"] = flutter_config
|
572
683
|
FileUtil.dump_pubspec_config_to_file(pubspec_config, pubspec_file_path)
|
573
684
|
|
574
685
|
# ----- Step-8 End -----
|
@@ -734,19 +845,6 @@ Flr recommends the following flutter resource structure schemes:
|
|
734
845
|
# ----- Step-21 End -----
|
735
846
|
|
736
847
|
# ----- Step-22 Begin -----
|
737
|
-
# 调用flutter工具,为flutter工程获取依赖
|
738
|
-
#
|
739
|
-
|
740
|
-
get_flutter_pub_cmd = "flutter pub get"
|
741
|
-
puts("execute \"#{get_flutter_pub_cmd}\" now ...")
|
742
|
-
system(get_flutter_pub_cmd)
|
743
|
-
puts("execute \"#{get_flutter_pub_cmd}\" done !!!")
|
744
|
-
|
745
|
-
# ----- Step-22 End -----
|
746
|
-
|
747
|
-
puts("[√]: generate done !!!")
|
748
|
-
|
749
|
-
# ----- Step-23 Begin -----
|
750
848
|
# 判断警告日志数组是否为空,若不为空,输出所有警告日志
|
751
849
|
#
|
752
850
|
|
@@ -757,87 +855,125 @@ Flr recommends the following flutter resource structure schemes:
|
|
757
855
|
end
|
758
856
|
end
|
759
857
|
|
760
|
-
# ----- Step-
|
858
|
+
# ----- Step-22 End -----
|
859
|
+
|
860
|
+
puts("[√]: generate for #{flutter_project_root_dir} done !!!")
|
861
|
+
puts("--------------------------------------------------------------------------------------")
|
761
862
|
|
762
863
|
end
|
763
864
|
|
764
|
-
#
|
865
|
+
# 启动一个资源变化监控服务,若检测到flutter主工程和其子工程有资源变化,就自动执行generate_all操作;
|
866
|
+
# 手动输入`Ctrl-C`,可终止当前服务
|
765
867
|
def self.start_monitor
|
766
868
|
|
767
|
-
|
869
|
+
flutter_main_project_root_dir = FileUtil.get_flutter_main_project_root_dir
|
768
870
|
|
769
871
|
# ----- Step-1 Begin -----
|
770
|
-
#
|
771
|
-
#
|
772
|
-
# - 检测当前pubspec.yaml中是否存在Flr的配置
|
773
|
-
# - 检测当前flr_config中的resource_dir配置是否合法:
|
774
|
-
# 判断合法的标准是:assets配置或者fonts配置了至少1个legal_resource_dir
|
872
|
+
# 对flutter主工程进行环境检测:
|
873
|
+
# - 检测当前flutter主工程根目录是否存在 pubspec.yaml
|
775
874
|
#
|
776
875
|
|
777
876
|
begin
|
778
|
-
Checker.check_pubspec_file_is_existed(
|
779
|
-
|
780
|
-
pubspec_file_path = FileUtil.get_pubspec_file_path(flutter_project_root_dir)
|
781
|
-
|
782
|
-
pubspec_config = FileUtil.load_pubspec_config_from_file(pubspec_file_path)
|
783
|
-
|
784
|
-
Checker.check_flr_config_is_existed(pubspec_config)
|
785
|
-
|
786
|
-
flr_config = pubspec_config["flr"]
|
787
|
-
|
788
|
-
resource_dir_result_tuple = Checker.check_flr_assets_is_legal(flutter_project_root_dir, flr_config)
|
789
|
-
|
877
|
+
Checker.check_pubspec_file_is_existed(flutter_main_project_root_dir)
|
790
878
|
rescue Exception => e
|
791
879
|
puts(e.message)
|
792
880
|
return
|
793
881
|
end
|
794
882
|
|
795
|
-
package_name = pubspec_config["name"]
|
796
|
-
|
797
883
|
# ----- Step-1 End -----
|
798
884
|
|
885
|
+
|
799
886
|
# ----- Step-2 Begin -----
|
800
|
-
#
|
887
|
+
# 对flutter工程进行合法资源目录检测:
|
888
|
+
# - 获取主工程的所有子工程根目录,生成工程根目录数组flutter_project_root_dir_array
|
889
|
+
# - 遍历flutter_project_root_dir_array,获取每个工程的legal_resource_dir数组:
|
890
|
+
# - 从flr_config中的assets配置获取assets_legal_resource_dir数组;
|
891
|
+
# - 从flr_config中的fonts配置获取fonts_legal_resource_dir数组;
|
892
|
+
# - 合并assets_legal_resource_dir数组和fonts_legal_resource_dir数组到legal_resource_dir数组。
|
893
|
+
# - 检测legal_resource_dir数组是否为空,为空则结束运行。
|
801
894
|
#
|
895
|
+
puts("")
|
896
|
+
puts("get the valid resource directories of all projects now ...")
|
802
897
|
|
803
|
-
|
804
|
-
|
805
|
-
|
806
|
-
|
807
|
-
|
808
|
-
|
809
|
-
|
810
|
-
|
811
|
-
|
898
|
+
flutter_main_project_root_dir = FileUtil.get_flutter_main_project_root_dir
|
899
|
+
flutter_sub_project_root_dir_array = FileUtil.get_flutter_sub_project_root_dirs(flutter_main_project_root_dir)
|
900
|
+
|
901
|
+
flutter_project_root_dir_array = []
|
902
|
+
flutter_project_root_dir_array.push(flutter_main_project_root_dir)
|
903
|
+
flutter_project_root_dir_array += flutter_sub_project_root_dir_array
|
904
|
+
|
905
|
+
# 合法的资源目录数组
|
906
|
+
legal_resource_dir_array = []
|
907
|
+
# 非法的资源目录数组
|
908
|
+
illegal_resource_dir_array = []
|
909
|
+
|
910
|
+
flutter_project_root_dir_array.each do |flutter_project_root_dir|
|
911
|
+
begin
|
912
|
+
puts("")
|
913
|
+
puts("--------------------------- get info of specified project ----------------------------")
|
914
|
+
puts("get the valid resource directories from #{flutter_project_root_dir} now...")
|
915
|
+
|
916
|
+
Checker.check_pubspec_file_is_existed(flutter_project_root_dir)
|
917
|
+
|
918
|
+
pubspec_file_path = FileUtil.get_pubspec_file_path(flutter_project_root_dir)
|
919
|
+
|
920
|
+
pubspec_config = FileUtil.load_pubspec_config_from_file(pubspec_file_path)
|
921
|
+
|
922
|
+
Checker.check_flr_config_is_existed(pubspec_config)
|
923
|
+
|
924
|
+
flr_config = pubspec_config["flr"]
|
925
|
+
|
926
|
+
resource_dir_result_tuple = Checker.check_flr_assets_is_legal(flutter_project_root_dir, flr_config)
|
927
|
+
|
928
|
+
assets_legal_resource_dir_array = resource_dir_result_tuple[0]
|
929
|
+
fonts_legal_resource_dir_array = resource_dir_result_tuple[1]
|
930
|
+
legal_resource_dir_array += (assets_legal_resource_dir_array + fonts_legal_resource_dir_array)
|
931
|
+
|
932
|
+
illegal_resource_dir_array += resource_dir_result_tuple[2]
|
933
|
+
puts("get the valid resource directories from #{flutter_project_root_dir} done !!!")
|
934
|
+
puts("--------------------------------------------------------------------------------------")
|
935
|
+
rescue Exception => e
|
936
|
+
puts(e.message)
|
937
|
+
puts("[x]: #{flutter_project_root_dir} has no valid resource directories".error_style)
|
938
|
+
puts("--------------------------------------------------------------------------------------")
|
939
|
+
end
|
940
|
+
end
|
941
|
+
|
942
|
+
if legal_resource_dir_array.length <= 0
|
943
|
+
puts("")
|
944
|
+
puts("[x]: have no valid resource directories to be monitored".error_style)
|
945
|
+
return
|
946
|
+
end
|
947
|
+
|
948
|
+
puts("")
|
949
|
+
puts("get the valid resource directories of all projects done !!!")
|
812
950
|
|
813
951
|
# ----- Step-2 End -----
|
814
952
|
|
953
|
+
|
815
954
|
# ----- Step-3 Begin -----
|
816
|
-
#
|
817
|
-
# - 从flr_config中的assets配置获取assets_legal_resource_dir数组;
|
818
|
-
# - 从flr_config中的fonts配置获取fonts_legal_resource_dir数组;
|
819
|
-
# - 合并assets_legal_resource_dir数组和fonts_legal_resource_dir数组为legal_resource_dir数组。
|
955
|
+
# 执行一次 generate_all 操作
|
820
956
|
#
|
821
957
|
|
822
|
-
|
823
|
-
|
824
|
-
|
825
|
-
|
826
|
-
|
827
|
-
|
828
|
-
# 非法的资源目录数组
|
829
|
-
illegal_resource_dir_array = resource_dir_result_tuple[2]
|
958
|
+
puts("")
|
959
|
+
puts("now generate for all projects once before launching the monitoring service ...")
|
960
|
+
puts("")
|
961
|
+
generate_all
|
962
|
+
puts("")
|
963
|
+
puts("did generate for all projects, now is going to launching the monitoring service ...")
|
830
964
|
|
831
965
|
# ----- Step-3 End -----
|
832
966
|
|
967
|
+
|
833
968
|
# ----- Step-4 Begin -----
|
834
969
|
# 启动资源监控服务
|
835
970
|
# - 启动一个文件监控服务,对 legal_resource_dir 数组中的资源目录进行文件监控
|
836
971
|
# - 若服务检测到资源变化(资源目录下的发生增/删/改文件),则执行一次 flr generate 操作
|
837
972
|
#
|
838
973
|
|
974
|
+
puts("")
|
839
975
|
now_str = Time.now.to_s
|
840
|
-
puts("
|
976
|
+
puts("----------------------------- #{now_str} -----------------------------")
|
841
977
|
puts("launch a monitoring service now ...")
|
842
978
|
puts("launching ...")
|
843
979
|
# stop the monitoring service if exists
|
@@ -854,7 +990,7 @@ Flr recommends the following flutter resource structure schemes:
|
|
854
990
|
puts(" - #{resource_dir}".warning_style)
|
855
991
|
end
|
856
992
|
end
|
857
|
-
puts("
|
993
|
+
puts("--------------------------------------------------------------------------------------")
|
858
994
|
puts("\n")
|
859
995
|
|
860
996
|
# Allow array of directories as input #92
|
@@ -862,16 +998,16 @@ Flr recommends the following flutter resource structure schemes:
|
|
862
998
|
@@listener = Listen.to(*legal_resource_dir_array, ignore: [/\.DS_Store/], latency: 0.5, wait_for_delay: 5, relative: true) do |modified, added, removed|
|
863
999
|
# for example: 2013-03-30 03:13:14 +0900
|
864
1000
|
now_str = Time.now.to_s
|
865
|
-
puts("
|
1001
|
+
puts("----------------------------- #{now_str} -----------------------------")
|
866
1002
|
puts("modified resource files: #{modified}")
|
867
1003
|
puts("added resource files: #{added}")
|
868
1004
|
puts("removed resource files: #{removed}")
|
869
|
-
puts("
|
1005
|
+
puts("generate for all projects now ...")
|
870
1006
|
puts("\n")
|
871
|
-
|
1007
|
+
generate_all
|
872
1008
|
puts("\n")
|
873
|
-
puts("
|
874
|
-
puts("
|
1009
|
+
puts("generate for all projects done !!!")
|
1010
|
+
puts("--------------------------------------------------------------------------------------")
|
875
1011
|
puts("\n")
|
876
1012
|
puts("[*]: the monitoring service is monitoring the asset changes, and then auto scan assets, specifies assets and generates \"r.g.dart\" ...".tips_style)
|
877
1013
|
puts("[*]: you can press \"Ctrl-C\" to terminate it".tips_style)
|
data/lib/flr/util/asset_util.rb
CHANGED
@@ -34,6 +34,162 @@ module Flr
|
|
34
34
|
return false
|
35
35
|
end
|
36
36
|
|
37
|
+
# is_image_asset?(asset) -> true or false
|
38
|
+
#
|
39
|
+
# 判断当前资产是不是图片类资产
|
40
|
+
#
|
41
|
+
# === Examples
|
42
|
+
#
|
43
|
+
# === Example-1
|
44
|
+
# asset = "packages/flutter_r_demo/assets/images/test.png"
|
45
|
+
# @return true
|
46
|
+
#
|
47
|
+
# === Example-2
|
48
|
+
# asset = "assets/images/test.png"
|
49
|
+
# @return true
|
50
|
+
#
|
51
|
+
def self.is_image_asset?(asset)
|
52
|
+
if FileUtil.is_image_resource_file?(asset)
|
53
|
+
return true
|
54
|
+
end
|
55
|
+
|
56
|
+
return false
|
57
|
+
end
|
58
|
+
|
59
|
+
# is_package_asset?(asset) -> true or false
|
60
|
+
#
|
61
|
+
# 判断当前资产是不是package类资产
|
62
|
+
#
|
63
|
+
# === Examples
|
64
|
+
#
|
65
|
+
# === Example-1
|
66
|
+
# asset = "packages/flutter_r_demo/assets/images/test.png"
|
67
|
+
# @return true
|
68
|
+
#
|
69
|
+
# === Example-2
|
70
|
+
# asset = "assets/images/test.png"
|
71
|
+
# @return false
|
72
|
+
#
|
73
|
+
def self.is_package_asset?(asset)
|
74
|
+
package_prefix = "packages/"
|
75
|
+
if asset =~ /\A#{package_prefix}/
|
76
|
+
return true
|
77
|
+
end
|
78
|
+
|
79
|
+
return false
|
80
|
+
end
|
81
|
+
|
82
|
+
# is_specified_package_asset?(package_name, asset) -> true or false
|
83
|
+
#
|
84
|
+
# 判断当前资产是不是指定的package的资产
|
85
|
+
#
|
86
|
+
# === Examples
|
87
|
+
# package_name = "flutter_r_demo"
|
88
|
+
#
|
89
|
+
# === Example-1
|
90
|
+
# asset = "packages/flutter_r_demo/assets/images/test.png"
|
91
|
+
# @return true
|
92
|
+
#
|
93
|
+
# === Example-2
|
94
|
+
# asset = "packages/hello_demo/assets/images/test.png"
|
95
|
+
# @return false
|
96
|
+
#
|
97
|
+
def self.is_specified_package_asset?(package_name, asset)
|
98
|
+
specified_package_prefix = "packages/" + package_name + "/"
|
99
|
+
if asset =~ /\A#{specified_package_prefix}/
|
100
|
+
return true
|
101
|
+
end
|
102
|
+
|
103
|
+
return false
|
104
|
+
end
|
105
|
+
|
106
|
+
# get_main_resource_file(flutter_project_dir, package_name, asset) -> main_resource_file
|
107
|
+
#
|
108
|
+
# 获取指定flutter工程的asset对应的主资源文件
|
109
|
+
# 注意:主资源文件不一定存在,比如图片资产可能只存在变体资源文件
|
110
|
+
#
|
111
|
+
# === Examples
|
112
|
+
# flutter_project_dir = "~/path/to/flutter_r_demo"
|
113
|
+
# package_name = "flutter_r_demo"
|
114
|
+
#
|
115
|
+
# === Example-1
|
116
|
+
# asset = "packages/flutter_r_demo/assets/images/test.png"
|
117
|
+
# main_resource_file = "~/path/to/flutter_r_demo/lib/assets/images/test.png"
|
118
|
+
#
|
119
|
+
# === Example-2
|
120
|
+
# asset = "assets/images/test.png"
|
121
|
+
# main_resource_file = "~/path/to/flutter_r_demo/assets/images/test.png"
|
122
|
+
#
|
123
|
+
def self.get_main_resource_file(flutter_project_dir, package_name, asset)
|
124
|
+
if is_specified_package_asset?(package_name, asset)
|
125
|
+
specified_package_prefix = "packages/" + package_name + "/"
|
126
|
+
|
127
|
+
# asset: packages/flutter_r_demo/assets/images/test.png
|
128
|
+
# to get implied_relative_resource_file: lib/assets/images/test.png
|
129
|
+
implied_relative_resource_file = asset.dup
|
130
|
+
implied_relative_resource_file[specified_package_prefix] = ""
|
131
|
+
implied_relative_resource_file = "lib/" + implied_relative_resource_file
|
132
|
+
|
133
|
+
# main_resource_file: ~/path/to/flutter_r_demo/lib/assets/images/test.png
|
134
|
+
main_resource_file = flutter_project_dir + "/" + implied_relative_resource_file
|
135
|
+
return main_resource_file
|
136
|
+
else
|
137
|
+
# asset: assets/images/test.png
|
138
|
+
# main_resource_file: ~/path/to/flutter_r_demo/assets/images/test.png
|
139
|
+
main_resource_file = flutter_project_dir + "/" + asset
|
140
|
+
return main_resource_file
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
# is_asset_existed?(flutter_project_dir, package_name, asset) -> true or false
|
145
|
+
#
|
146
|
+
# 判断指定flutter工程的asset是不是存在;存在的判断标准是:asset需要存在对应的资源文件
|
147
|
+
#
|
148
|
+
# === Examples
|
149
|
+
# flutter_project_dir = "~/path/to/flutter_r_demo"
|
150
|
+
# package_name = "flutter_r_demo"
|
151
|
+
#
|
152
|
+
# === Example-1
|
153
|
+
# asset = "packages/flutter_r_demo/assets/images/test.png"
|
154
|
+
# @return true
|
155
|
+
#
|
156
|
+
# === Example-2
|
157
|
+
# asset = "packages/flutter_r_demo/404/not-existed.png"
|
158
|
+
# @return false
|
159
|
+
#
|
160
|
+
def self.is_asset_existed?(flutter_project_dir, package_name, asset)
|
161
|
+
# 处理指定flutter工程的asset
|
162
|
+
# 1. 获取asset对应的main_resource_file
|
163
|
+
# 2. 若main_resource_file是非SVG类图片资源文件,判断asset是否存在的标准是:主资源文件或者至少一个变体资源文件存在
|
164
|
+
# 3. 若main_resource_file是SVG类图片资源文件或者其他资源文件,判断asset是否存在的标准是:主资源文件存在
|
165
|
+
#
|
166
|
+
main_resource_file = get_main_resource_file(flutter_project_dir, package_name, asset)
|
167
|
+
if FileUtil.is_non_svg_image_resource_file?(main_resource_file)
|
168
|
+
if File.exist?(main_resource_file)
|
169
|
+
return true
|
170
|
+
end
|
171
|
+
|
172
|
+
file_name = File.basename(main_resource_file)
|
173
|
+
file_dir = File.dirname(main_resource_file)
|
174
|
+
did_find_variant_resource_file = false
|
175
|
+
Dir.glob(["#{file_dir}/*/#{file_name}"]).each do |file|
|
176
|
+
if is_asset_variant?(file)
|
177
|
+
did_find_variant_resource_file = true
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
if did_find_variant_resource_file
|
182
|
+
return true
|
183
|
+
end
|
184
|
+
else
|
185
|
+
if File.exist?(main_resource_file)
|
186
|
+
return true
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
return false
|
191
|
+
end
|
192
|
+
|
37
193
|
# generate_main_asset(flutter_project_dir, package_name, legal_resource_file) -> main_asset
|
38
194
|
#
|
39
195
|
# 为当前资源文件生成 main_asset
|
@@ -185,5 +341,47 @@ module Flr
|
|
185
341
|
return font_asset_config_array
|
186
342
|
end
|
187
343
|
|
344
|
+
# mergeFlutterAssets(new_asset_array, old_asset_array) -> merged_asset_array
|
345
|
+
#
|
346
|
+
# 合并新旧2个asset数组:
|
347
|
+
# - old_asset_array - new_asset_array = diff_asset_array,获取old_asset_array与new_asset_array的差异集合
|
348
|
+
# - 遍历diff_asset_array,筛选合法的asset得到legal_old_asset_array;合法的asset标准是:非图片资源 + 存在对应的资源文件
|
349
|
+
# - 按照字典序对legal_old_asset_array进行排序,并追加到new_asset_array
|
350
|
+
# - 返回合并结果merged_asset_array
|
351
|
+
#
|
352
|
+
# === Examples
|
353
|
+
# flutter_project_dir = "~/path/to/flutter_r_demo"
|
354
|
+
# package_name = "flutter_r_demo"
|
355
|
+
# new_asset_array = ["packages/flutter_r_demo/assets/images/test.png", "packages/flutter_r_demo/assets/jsons/test.json"]
|
356
|
+
# old_asset_array = ["packages/flutter_r_demo/assets/htmls/test.html"]
|
357
|
+
# merged_asset_array = ["packages/flutter_r_demo/assets/images/test.png", "packages/flutter_r_demo/assets/jsons/test.json", "packages/flutter_r_demo/assets/htmls/test.html"]
|
358
|
+
def self.mergeFlutterAssets(flutter_project_dir, package_name, new_asset_array, old_asset_array)
|
359
|
+
legal_old_asset_array = []
|
360
|
+
|
361
|
+
diff_asset_array = old_asset_array - new_asset_array;
|
362
|
+
diff_asset_array.each do |asset|
|
363
|
+
# 若是第三方package的资源,则合并到new_asset_array
|
364
|
+
# 引用第三方package的资源的推荐做法是:通过引用第三方package的R类来访问
|
365
|
+
if is_package_asset?(asset)
|
366
|
+
if is_specified_package_asset?(package_name, asset) == false
|
367
|
+
legal_old_asset_array.push(asset)
|
368
|
+
next
|
369
|
+
end
|
370
|
+
end
|
371
|
+
|
372
|
+
# 处理指定flutter工程的asset
|
373
|
+
# 1. 判断asset是否存在
|
374
|
+
# 2. 若asset存在,则合并到new_asset_array
|
375
|
+
#
|
376
|
+
if is_asset_existed?(flutter_project_dir, package_name, asset)
|
377
|
+
legal_old_asset_array.push(asset)
|
378
|
+
end
|
379
|
+
end
|
380
|
+
|
381
|
+
legal_old_asset_array.sort!
|
382
|
+
merged_asset_array = new_asset_array + legal_old_asset_array
|
383
|
+
return merged_asset_array
|
384
|
+
end
|
385
|
+
|
188
386
|
end
|
189
387
|
end
|
data/lib/flr/util/file_util.rb
CHANGED
@@ -8,13 +8,26 @@ module Flr
|
|
8
8
|
|
9
9
|
# get_cur_flutter_project_root_dir -> String
|
10
10
|
#
|
11
|
-
#
|
11
|
+
# 获取flutter主工程的根目录
|
12
12
|
#
|
13
|
-
def self.
|
13
|
+
def self.get_flutter_main_project_root_dir
|
14
14
|
flutter_project_root_dir = "#{Pathname.pwd}"
|
15
15
|
return flutter_project_root_dir
|
16
16
|
end
|
17
17
|
|
18
|
+
# get_flutter_sub_project_root_dirs -> [sub_project_root_dir]
|
19
|
+
#
|
20
|
+
# 获取flutter主工程的所有子工程的根目录
|
21
|
+
#
|
22
|
+
def self.get_flutter_sub_project_root_dirs(flutter_main_project_root_dir)
|
23
|
+
flutter_sub_project_root_dir_array = []
|
24
|
+
Dir.glob(["#{flutter_main_project_root_dir}/*/pubspec.yaml"]).each do |file|
|
25
|
+
flutter_project_root_dir = File.dirname(file)
|
26
|
+
flutter_sub_project_root_dir_array.push(flutter_project_root_dir)
|
27
|
+
end
|
28
|
+
return flutter_sub_project_root_dir_array
|
29
|
+
end
|
30
|
+
|
18
31
|
# get_pubspec_file_path(flutter_project_dir) -> String
|
19
32
|
#
|
20
33
|
# 获取当前flutter工程的pubspec.yaml文件的路径
|
data/lib/flr/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flr
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- York
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-05-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|