/* Make File System Report This tool will generate a HTML report for the base path specified. */ import 'dart:io'; import 'package:libac_dart/argparse/Parser.dart'; import 'package:simplehelpertools/constants.dart'; import 'package:libac_dart/argparse/Args.dart'; import 'package:libac_dart/argparse/Builder.dart'; import 'package:libac_dart/argparse/CLIHelper.dart'; import 'package:libac_dart/argparse/types/Bool.dart'; import 'package:libac_dart/argparse/types/String.dart'; import 'package:libac_dart/utils/IOTools.dart'; String get MKFSREPORT_VER => HelperConsts.MKFSREPORT_VERSION; Future main(List args) async { bool verbose = false; String HEADER = "Make File System Report\nVersion: ${HelperConsts.MKFSREPORT_VERSION}\nUsing LibAC Version: ${HelperConsts.LIBAC_VERSION}\nAuthor: Tara Piccari\n\n"; Arguments defaults = ArgumentsBuilder.builder() .withArgument(BoolArgument( name: "asc", )) .withArgument(StringArgument( name: "path", value: "/", )) .withArgument(BoolArgument( name: "help", )) .withArgument(StringArgument( name: "out", value: "file.html", )) .withArgument(BoolArgument( name: "nohtml", )) .build(); Arguments parsed = await ArgumentParser.parse(args); String helpTest = "$HEADER${ArgumentHelpers.generateHelpMessage(defaults.getArgumentsList(), "mkfsreport")}"; if (parsed.count == 0 || !parsed.hasArg("path") || parsed.hasArg("help")) { print(helpTest); return 0; } else { if (parsed.hasArg("out")) { verbose = true; } else { verbose = false; } } print(HEADER); bool ascending = false; if (parsed.hasArg("asc")) ascending = true; StringArgument pathArg = parsed.getArg("path") as StringArgument; if (verbose) print("> Analyzing files..."); await getDirectorySize(pathArg.getValue(), cacheSize: true, recursive: true, verbose: parsed.hasArg("o")); FileInformationCache FIC = FileInformationCache.obtain(); if (verbose) await prnt("\r> Generating report..."); String report = ""; if (!parsed.hasArg("nohtml")) { report = await generateHTMLReport(FIC, ascending: ascending, VERSION: MKFSREPORT_VER); } else { report = await generateTextReport(FIC, ascending: ascending, VERSION: MKFSREPORT_VER); } if (verbose) { StringArgument outputPath = parsed.getArg("out") as StringArgument; await prnt("\n> Saving report..."); await File(outputPath.getValue()).writeAsString(report); await prnt("\n> Task Completed\n"); var size = await File(outputPath.getValue()).length(); FileInfo savedFile = FileInfo(path: outputPath.getValue(), size: size, isFile: true); await prnt("> Report file size: ${savedFile.toString()}\n\n"); } else { print(report); } return 0; } Future generateHTMLReport(FileInformationCache FIC, {bool ascending = false, String VERSION = ""}) async { String header = ''' MKFSReport

File System Report


Generated by mkfsreport v$VERSION
Bundled LibAC Version: ${HelperConsts.LIBAC_VERSION}
    MKFSREPORT and LibAC are provided free of charge with no implied warranties. The software is provided as-is.
    
    This program was created by Tara Piccari, as a part of the Aria's Creations common code library as a helper utility.
    Aria's Creations is a alias for online-only works. Aria is an anagram derived from my name. piccARI, tarA. You place my last name first, take the last 3, skip the first 3 in my first name and take the remaining character(s) and you have my alias.
    
    This utility analyzed the specified folder path to generate a detailed report of directory and file sizes as seen below.
    

'''; header += ''' '''; for (var entry in (await FIC.getOrderedList(ascending: ascending))) { header += ''' '''; } header += '''
Type Path Size
${entry.isFile ? "FILE" : "DIR"} ${entry.path} ${entry.toString()}
'''; header += ''' '''; return header; } Future generateTextReport(FileInformationCache FIC, {bool ascending = false, String VERSION = ""}) async { String header = ''' MKFSReport {File System Report} Generated by mkfsreport v$VERSION Bundled LibAC Version: ${HelperConsts.LIBAC_VERSION} [https://git.zontreck.com/AriasCreations/LibAC-dart] MKFSREPORT and LibAC are provided free of charge with no implied warranties. The software is provided as-is. This program was created by Tara Piccari, as a part of the Aria's Creations common code library as a helper utility. Aria's Creations is a alias for online-only works. Aria is an anagram derived from my name. piccARI, tarA. You place my last name first, take the last 3, skip the first 3 in my first name and take the remaining character(s) and you have my alias. This utility analyzed the specified folder path to generate a detailed report of directory and file sizes as seen below.\n '''; for (var entry in (await FIC.getOrderedList(ascending: ascending))) { header += " ${entry.isFile ? "FILE" : "DIR"} ${entry.toString()} ${entry.path}\n"; } return header; }