Skip to content

Commit

Permalink
allow configuration, cropping and changing devices.
Browse files Browse the repository at this point in the history
  • Loading branch information
hpoul committed Sep 8, 2020
1 parent e60eb0b commit a276430
Show file tree
Hide file tree
Showing 8 changed files with 583 additions and 76 deletions.
13 changes: 13 additions & 0 deletions .idea/runConfigurations/build_runner_build.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 8 additions & 1 deletion bin/frameit_chrome.dart
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ import 'dart:convert';
import 'dart:io';

import 'package:args/args.dart';
import 'package:frameit_chrome/config.dart';
import 'package:frameit_chrome/frame_process.dart';
import 'package:frameit_chrome/frameit_frame.dart';
import 'package:logging/logging.dart';
Expand Down Expand Up @@ -53,7 +54,11 @@ Future<void> main(List<String> args) async {
print(parser.usage);
exit(1);
}
await runFrame(baseDir, framesDir, chromeBinary, pixelRatio);
try {
await runFrame(baseDir, framesDir, chromeBinary, pixelRatio);
} catch (e, stackTrace) {
_logger.severe('Error while creating frames.', e, stackTrace);
}
}

final localePattern = RegExp('^[a-z]{2}-[A-Z]{2}');
Expand All @@ -69,12 +74,14 @@ Future<void> runFrame(String baseDir, String framesDirPath, String chromeBinary,
_logger.info('Deleting output directory $outDir');
await outDir.delete(recursive: true);
}
final config = await FrameConfig.load(baseDir);
await outDir.create(recursive: true);
final framesDir = Directory(framesDirPath);
checkArgument(framesDir.existsSync(), message: '$framesDir does not exist.');
final framesProvider = await FramesProvider.create(framesDir);

final frameProcess = FrameProcess(
config: config,
chromeBinary: chromeBinary,
framesProvider: framesProvider,
pixelRatio: pixelRatio,
Expand Down
8 changes: 8 additions & 0 deletions build.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
targets:
$default:
builders:
builder_static_text|static_text:
generate_for:
- lib/**/*.dart
options:
content: '// ignore_for_file: implicit_dynamic_parameter,strong_mode_implicit_dynamic_parameter,strong_mode_implicit_dynamic_variable,non_constant_identifier_names,unused_element'
73 changes: 73 additions & 0 deletions lib/config.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
import 'dart:io';

import 'package:json_annotation/json_annotation.dart';
import 'package:path/path.dart' as path;
import 'package:yaml/yaml.dart';

part 'config.g.dart';

@JsonSerializable(anyMap: true)
class FrameConfig {
FrameConfig({
@JsonKey(nullable: true) this.rewrite,
@JsonKey(nullable: true) this.images,
});
factory FrameConfig.fromJson(Map json) => _$FrameConfigFromJson(json);

static const FILE_NAME = 'frameit.yaml';

Map<String, dynamic> toJson() => _$FrameConfigToJson(this);

final List<FileNameMapping> rewrite;
final Map<String, FrameImage> images;

static Future<FrameConfig> load(String baseDir) async {
final configFile = File(path.join(baseDir, FrameConfig.FILE_NAME));
if (!configFile.existsSync()) {
return null;
}
return FrameConfig.fromJson(
loadYaml(await configFile.readAsString()) as Map);
}

FrameImage findImageConfig(String screenshotName) {
return images.entries
.firstWhere((element) => screenshotName.contains(element.key),
orElse: () => null)
?.value;
}
}

@JsonSerializable(nullable: false, anyMap: true)
class FileNameMapping {
FileNameMapping({
this.pattern,
this.replace,
@JsonKey(defaultValue: false) this.duplicate,
});
factory FileNameMapping.fromJson(Map json) => _$FileNameMappingFromJson(json);
Map<String, dynamic> toJson() => _$FileNameMappingToJson(this);

final String pattern;
final String replace;
final bool duplicate;

RegExp _patternRegExp;
RegExp get patternRegExp => _patternRegExp ??= RegExp(pattern);
}

@JsonSerializable(nullable: true, anyMap: true)
class FrameImage {
FrameImage({
this.cropWidth,
this.cropHeight,
this.device,
});
factory FrameImage.fromJson(Map<String, dynamic> json) =>
_$FrameImageFromJson(json);
Map<String, dynamic> toJson() => _$FrameImageToJson(this);

final int cropWidth;
final int cropHeight;
final String device;
}
60 changes: 60 additions & 0 deletions lib/config.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading

0 comments on commit a276430

Please sign in to comment.