Skip to content

Commit 2d5f0b5

Browse files
committed
add some of the upload functions
1 parent bbd7bd4 commit 2d5f0b5

5 files changed

Lines changed: 127 additions & 8 deletions

File tree

lib/functions/filesystem.dart

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,34 @@
11
import 'dart:io';
22

3+
class ProcessedDirectory {
4+
Map<String, Stream<List<int>>> fileStreams = {};
5+
Map<String, int> lengths = {};
6+
7+
ProcessedDirectory();
8+
}
9+
310
Future<void> ensureDirExistence(Directory directory) async {
411
if (!await directory.exists()) {
512
await directory.create(recursive: true);
613
}
714
}
15+
16+
ProcessedDirectory processDirectory(Directory dir, String topDir) {
17+
ProcessedDirectory procDir = ProcessedDirectory();
18+
for (final entity in dir.listSync()) {
19+
if (entity is Directory) {
20+
processDirectory(entity, topDir);
21+
} else if (entity is File) {
22+
final file = entity;
23+
String path = file.path;
24+
path = path.substring(topDir.length).replaceAll('\\', '/');
25+
26+
if (path.startsWith('/')) path = path.substring(1);
27+
28+
procDir.lengths[path] = file.lengthSync();
29+
procDir.fileStreams[path] = file.openRead();
30+
}
31+
}
32+
33+
return procDir;
34+
}

lib/functions/s5.dart

Lines changed: 67 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,21 @@
11
import 'package:dcli/dcli.dart';
22
import 'package:hive/hive.dart';
3+
import 'package:http_parser/http_parser.dart';
34
import 'package:path/path.dart';
45
import 'package:s5_deploy/definitons/logging.dart';
56
import 'package:s5/s5.dart';
7+
import 'dart:convert';
8+
import 'dart:io';
9+
import 'package:http/http.dart' as http;
10+
import 'package:s5_deploy/functions/filesystem.dart';
611

7-
void initS5(String nodeURL, String dbPath, String logPath) async {
12+
Future<S5> initS5(String nodeURL, String dbPath, String logPath) async {
813
final nowInMilliseconds = DateTime.now().millisecondsSinceEpoch;
914
final lastEightDigits = nowInMilliseconds
1015
.toString()
1116
.substring(nowInMilliseconds.toString().length - 8);
1217
Hive.init(dbPath);
13-
final s5 = await S5.create(
18+
final S5 s5 = await S5.create(
1419
logger: FileLogger(file: join(logPath, 'log-$lastEightDigits.txt')));
1520
if (!s5.hasIdentity) {
1621
final seed = s5.generateSeedPhrase();
@@ -28,4 +33,64 @@ void initS5(String nodeURL, String dbPath, String logPath) async {
2833
nodeURL,
2934
);
3035
}
36+
return s5;
3137
}
38+
39+
// Future<CID> uploadDirectory(
40+
// Map<String, Stream<List<int>>> fileStreams,
41+
// Map<String, int> lengths,
42+
// String name, {
43+
// List<String>? tryFiles,
44+
// Map<String, String>? errorPages,
45+
// required Function lookupMimeType,
46+
// }) async {
47+
// final params = {
48+
// 'name': name,
49+
// };
50+
51+
// if (tryFiles != null) {
52+
// params['tryfiles'] = json.encode(tryFiles);
53+
// }
54+
// if (errorPages != null) {
55+
// params['errorpages'] = json.encode(errorPages);
56+
// }
57+
58+
// final uc = storageServiceConfigs.first;
59+
60+
// var uri = uc.getAPIUrl('/s5/upload/directory').replace(
61+
// queryParameters: params,
62+
// );
63+
64+
// var request = http.MultipartRequest("POST", uri);
65+
66+
// request.headers.addAll(uc.headers);
67+
68+
// for (final filename in fileStreams.keys) {
69+
// var stream = http.ByteStream(fileStreams[filename]!);
70+
71+
// final mimeType = lookupMimeType(filename);
72+
73+
// var multipartFile = http.MultipartFile(
74+
// filename,
75+
// stream,
76+
// lengths[filename]!,
77+
// filename: filename,
78+
// contentType: mimeType == null ? null : MediaType.parse(mimeType),
79+
// );
80+
81+
// request.files.add(multipartFile);
82+
// }
83+
84+
// final response = await HttpClient.send(request);
85+
86+
// if (response.statusCode != 200) {
87+
// throw Exception('HTTP ${response.statusCode}');
88+
// }
89+
90+
// final res = await response.stream.transform(utf8.decoder).join();
91+
92+
// final resData = json.decode(res);
93+
94+
// if (resData['cid'] == null) throw Exception('Directory upload failed');
95+
// return CID.decode(resData['cid']);
96+
// }

lib/s5_deploy.dart

Lines changed: 31 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ import 'dart:io';
33
import 'package:args/args.dart';
44
import 'package:cli_spin/cli_spin.dart';
55
import 'package:dcli/dcli.dart';
6+
import 'package:lib5/node.dart';
67
import 'package:path/path.dart';
8+
import 'package:s5/s5.dart';
79
import 'package:s5_deploy/definitons/constants.dart';
810
import 'package:s5_deploy/functions/cli.dart';
911
import 'package:s5_deploy/functions/filesystem.dart';
@@ -35,7 +37,7 @@ void s5Deploy(List<String> args) async {
3537
var versionCheck = results['version'] as bool;
3638
if (versionCheck) {
3739
print("Version: $s5Version");
38-
exit(1);
40+
exit(0);
3941
}
4042

4143
// -h || --help || malformed path
@@ -45,14 +47,14 @@ void s5Deploy(List<String> args) async {
4547
print(red('You must pass the name of the file/directory to upload.'));
4648
}
4749
printUsage(topParser);
48-
exit(1);
50+
exit(2);
4951
}
5052

5153
// begin spinner
5254
CliSpin spinner = spinStart("Setting things up...");
5355

5456
// --reset
55-
var resetCheck = results['reset'] as bool;
57+
bool resetCheck = results['reset'] as bool;
5658
if (resetCheck) {
5759
await Directory(dbPath).delete(recursive: true);
5860
}
@@ -62,8 +64,32 @@ void s5Deploy(List<String> args) async {
6264
// init s5
6365
spinner = spinStart("Initializing S5...");
6466
String nodeURL = results['node'] as String;
65-
initS5(nodeURL, dbPath, logPath);
67+
final S5 s5 = await initS5(nodeURL, dbPath, logPath);
68+
spinner.success();
69+
70+
// scan directory
71+
spinner = spinStart("Scanning ${results.arguments.first}");
72+
if (!(Directory(results.arguments.first).existsSync())) {
73+
spinner.fail();
74+
print(red("Directory doesn't exist, scan failed."));
75+
exit(1);
76+
}
77+
ProcessedDirectory procDir = processDirectory(
78+
Directory(results.arguments.first), results.arguments.first);
79+
80+
if (procDir == ProcessedDirectory()) {
81+
spinner.fail();
82+
print(red("Directory empty, scan failed."));
83+
} else {
84+
spinner.success();
85+
}
86+
87+
// now upload to S5 & set registry
88+
spinner = spinStart("Uploading to S5...");
89+
print(s5.hasIdentity);
90+
print((s5.api as S5NodeAPIWithIdentity).accountConfigs);
6691
spinner.success();
6792

68-
exit(1);
93+
// And it's over folks
94+
exit(0);
6995
}

pubspec.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -319,7 +319,7 @@ packages:
319319
source: hosted
320320
version: "3.2.1"
321321
http_parser:
322-
dependency: transitive
322+
dependency: "direct main"
323323
description:
324324
name: http_parser
325325
sha256: "2aa08ce0341cc9b354a498388e30986515406668dbcc4f7c950c3e715496693b"

pubspec.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ dependencies:
1414
dcli: ^4.0.1-beta.4
1515
hive: ^2.2.3
1616
http: ^1.2.1
17+
http_parser: ^4.0.2
1718
lib5: ^0.2.0
1819
lib5_crypto_implementation_dart: ^0.2.0
1920
path: ^1.9.0

0 commit comments

Comments
 (0)