commit 296738f5eda2796d81fe9c916e767fe1b71be132 Author: TommySalami Date: Tue Jul 29 08:31:00 2025 -0600 Add project files. diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..1ff0c42 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,63 @@ +############################################################################### +# Set default behavior to automatically normalize line endings. +############################################################################### +* text=auto + +############################################################################### +# Set default behavior for command prompt diff. +# +# This is need for earlier builds of msysgit that does not have it on by +# default for csharp files. +# Note: This is only used by command line +############################################################################### +#*.cs diff=csharp + +############################################################################### +# Set the merge driver for project and solution files +# +# Merging from the command prompt will add diff markers to the files if there +# are conflicts (Merging from VS is not affected by the settings below, in VS +# the diff markers are never inserted). Diff markers may cause the following +# file extensions to fail to load in VS. An alternative would be to treat +# these files as binary and thus will always conflict and require user +# intervention with every merge. To do so, just uncomment the entries below +############################################################################### +#*.sln merge=binary +#*.csproj merge=binary +#*.vbproj merge=binary +#*.vcxproj merge=binary +#*.vcproj merge=binary +#*.dbproj merge=binary +#*.fsproj merge=binary +#*.lsproj merge=binary +#*.wixproj merge=binary +#*.modelproj merge=binary +#*.sqlproj merge=binary +#*.wwaproj merge=binary + +############################################################################### +# behavior for image files +# +# image files are treated as binary by default. +############################################################################### +#*.jpg binary +#*.png binary +#*.gif binary + +############################################################################### +# diff behavior for common document formats +# +# Convert binary document formats to text before diffing them. This feature +# is only available from the command line. Turn it on by uncommenting the +# entries below. +############################################################################### +#*.doc diff=astextplain +#*.DOC diff=astextplain +#*.docx diff=astextplain +#*.DOCX diff=astextplain +#*.dot diff=astextplain +#*.DOT diff=astextplain +#*.pdf diff=astextplain +#*.PDF diff=astextplain +#*.rtf diff=astextplain +#*.RTF diff=astextplain diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..5d801b1 --- /dev/null +++ b/.gitignore @@ -0,0 +1,366 @@ +## Ignore Visual Studio temporary files, build results, and +## files generated by popular Visual Studio add-ons. +## +## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore + +# User-specific files +*.rsuser +*.suo +*.user +*.userosscache +*.sln.docstates + +# User-specific files (MonoDevelop/Xamarin Studio) +*.userprefs + +# Mono auto generated files +mono_crash.* + +# Build results +[Dd]ebug/ +[Dd]ebugPublic/ +[Rr]elease/ +[Rr]eleases/ +x64/ +x86/ +[Ww][Ii][Nn]32/ +[Aa][Rr][Mm]/ +[Aa][Rr][Mm]64/ +bld/ +[Bb]in/ +[Oo]bj/ +[Oo]ut/ +[Ll]og/ +[Ll]ogs/ + +# Visual Studio 2015/2017 cache/options directory +.vs/ +# Uncomment if you have tasks that create the project's static files in wwwroot +#wwwroot/ + +# Visual Studio 2017 auto generated files +Generated\ Files/ + +# MSTest test Results +[Tt]est[Rr]esult*/ +[Bb]uild[Ll]og.* + +# NUnit +*.VisualState.xml +TestResult.xml +nunit-*.xml + +# Build Results of an ATL Project +[Dd]ebugPS/ +[Rr]eleasePS/ +dlldata.c + +# Benchmark Results +BenchmarkDotNet.Artifacts/ + +# .NET Core +project.lock.json +project.fragment.lock.json +artifacts/ + +# ASP.NET Scaffolding +ScaffoldingReadMe.txt + +# StyleCop +StyleCopReport.xml + +# Files built by Visual Studio +*_i.c +*_p.c +*_h.h +*.ilk +*.meta +*.obj +*.iobj +*.pch +*.pdb +*.ipdb +*.pgc +*.pgd +*.rsp +*.sbr +*.tlb +*.tli +*.tlh +*.tmp +*.tmp_proj +*_wpftmp.csproj +*.log +*.vspscc +*.vssscc +.builds +*.pidb +*.svclog +*.scc + +# Chutzpah Test files +_Chutzpah* + +# Visual C++ cache files +ipch/ +*.aps +*.ncb +*.opendb +*.opensdf +*.sdf +*.cachefile +*.VC.db +*.VC.VC.opendb + +# Visual Studio profiler +*.psess +*.vsp +*.vspx +*.sap + +# Visual Studio Trace Files +*.e2e + +# TFS 2012 Local Workspace +$tf/ + +# Guidance Automation Toolkit +*.gpState + +# ReSharper is a .NET coding add-in +_ReSharper*/ +*.[Rr]e[Ss]harper +*.DotSettings.user + +# TeamCity is a build add-in +_TeamCity* + +# DotCover is a Code Coverage Tool +*.dotCover + +# AxoCover is a Code Coverage Tool +.axoCover/* +!.axoCover/settings.json + +# Coverlet is a free, cross platform Code Coverage Tool +coverage*.json +coverage*.xml +coverage*.info + +# Visual Studio code coverage results +*.coverage +*.coveragexml + +# NCrunch +_NCrunch_* +.*crunch*.local.xml +nCrunchTemp_* + +# MightyMoose +*.mm.* +AutoTest.Net/ + +# Web workbench (sass) +.sass-cache/ + +# Installshield output folder +[Ee]xpress/ + +# DocProject is a documentation generator add-in +DocProject/buildhelp/ +DocProject/Help/*.HxT +DocProject/Help/*.HxC +DocProject/Help/*.hhc +DocProject/Help/*.hhk +DocProject/Help/*.hhp +DocProject/Help/Html2 +DocProject/Help/html + +# Click-Once directory +publish/ + +# Publish Web Output +*.[Pp]ublish.xml +*.azurePubxml +# Note: Comment the next line if you want to checkin your web deploy settings, +# but database connection strings (with potential passwords) will be unencrypted +*.pubxml +*.publishproj + +# Microsoft Azure Web App publish settings. Comment the next line if you want to +# checkin your Azure Web App publish settings, but sensitive information contained +# in these scripts will be unencrypted +PublishScripts/ + +# NuGet Packages +*.nupkg +# NuGet Symbol Packages +*.snupkg +# The packages folder can be ignored because of Package Restore +**/[Pp]ackages/* +# except build/, which is used as an MSBuild target. +!**/[Pp]ackages/build/ +# Uncomment if necessary however generally it will be regenerated when needed +#!**/[Pp]ackages/repositories.config +# NuGet v3's project.json files produces more ignorable files +*.nuget.props +*.nuget.targets + +# Microsoft Azure Build Output +csx/ +*.build.csdef + +# Microsoft Azure Emulator +ecf/ +rcf/ + +# Windows Store app package directories and files +AppPackages/ +BundleArtifacts/ +Package.StoreAssociation.xml +_pkginfo.txt +*.appx +*.appxbundle +*.appxupload + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!?*.[Cc]ache/ + +# Others +ClientBin/ +~$* +*~ +*.dbmdl +*.dbproj.schemaview +*.jfm +*.pfx +*.publishsettings +orleans.codegen.cs + +# Including strong name files can present a security risk +# (https://github.com/github/gitignore/pull/2483#issue-259490424) +#*.snk + +# Since there are multiple workflows, uncomment next line to ignore bower_components +# (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) +#bower_components/ + +# RIA/Silverlight projects +Generated_Code/ + +# Backup & report files from converting an old project file +# to a newer Visual Studio version. Backup files are not needed, +# because we have git ;-) +_UpgradeReport_Files/ +Backup*/ +UpgradeLog*.XML +UpgradeLog*.htm +ServiceFabricBackup/ +*.rptproj.bak + +# SQL Server files +*.mdf +*.ldf +*.ndf + +# Business Intelligence projects +*.rdl.data +*.bim.layout +*.bim_*.settings +*.rptproj.rsuser +*- [Bb]ackup.rdl +*- [Bb]ackup ([0-9]).rdl +*- [Bb]ackup ([0-9][0-9]).rdl + +# Microsoft Fakes +FakesAssemblies/ + +# GhostDoc plugin setting file +*.GhostDoc.xml + +# Node.js Tools for Visual Studio +.ntvs_analysis.dat +node_modules/ + +# Visual Studio 6 build log +*.plg + +# Visual Studio 6 workspace options file +*.opt + +# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) +*.vbw + +# Visual Studio LightSwitch build output +**/*.HTMLClient/GeneratedArtifacts +**/*.DesktopClient/GeneratedArtifacts +**/*.DesktopClient/ModelManifest.xml +**/*.Server/GeneratedArtifacts +**/*.Server/ModelManifest.xml +_Pvt_Extensions + +# Paket dependency manager +.paket/paket.exe +paket-files/ + +# FAKE - F# Make +.fake/ + +# CodeRush personal settings +.cr/personal + +# Python Tools for Visual Studio (PTVS) +__pycache__/ +*.pyc + +# Cake - Uncomment if you are using it +# tools/** +# !tools/packages.config + +# Tabs Studio +*.tss + +# Telerik's JustMock configuration file +*.jmconfig + +# BizTalk build output +*.btp.cs +*.btm.cs +*.odx.cs +*.xsd.cs + +# OpenCover UI analysis results +OpenCover/ + +# Azure Stream Analytics local run output +ASALocalRun/ + +# MSBuild Binary and Structured Log +*.binlog + +# NVidia Nsight GPU debugger configuration file +*.nvuser + +# MFractors (Xamarin productivity tool) working folder +.mfractor/ + +# Local History for Visual Studio +.localhistory/ + +# BeatPulse healthcheck temp database +healthchecksdb + +# Backup folder for Package Reference Convert tool in Visual Studio 2017 +MigrationBackup/ + +# Ionide (cross platform F# VS Code tools) working folder +.ionide/ + +# Fody - auto-generated XML schema +FodyWeavers.xsd + +# Extra misc solution files +misc/ diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..84171ba --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,24 @@ +Version 0.1.2 - 2025-07-29 + +* Update repository info and related URLs +* Minor changes + +Version 0.1.1 - 2024-09-01 + +* New repository created and URLs fixed +* Update some NuGet packages +* Minor changes + +Version 0.1.0 - 2023-05-19 + +* Add Class library project +* Add CLI project +* Update all projects +* Major and minor code changes + +Version 0.0.2 - 2023-04-13 + +* Update to .NET Framework 4.8 +* Update all NuGet Packages +* Update and rename Setup project to Installer project +* Update Release project folder names and filenames structure diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..41dd9eb --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,127 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, religion, or sexual identity +and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +* Focusing on what is best not just for us as individuals, but for the + overall community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or + advances of any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email + address, without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement. +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series +of actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or +permanent ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within +the community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.0, available at +https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. + +Community Impact Guidelines were inspired by [Mozilla's code of conduct +enforcement ladder](https://github.com/mozilla/diversity). + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see the FAQ at +https://www.contributor-covenant.org/faq. Translations are available at +https://www.contributor-covenant.org/translations. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..5f9ffad --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,25 @@ +# @Files2Folders2Files +### The Original Automated Files 2 Folders 2 Files +## Contributing +Let's work better together. We are looking to collaborate with like-minded people who want to contribute in any capacity. Collaboration is open to everyone and we need your help if you are a: +* Collector +* Database Administrator +* Datter +* Developer +* Dumper +* Graphic Artist +* Translator +* Player +* Tester + +Feel free to: +* Fork the repository +* Create an issue +* Branch your repository with the issue number and a meaningful name related to the changes you are making +* Create a pull request + +## Contact +GitEmAll: [https://gitemall.devemall.int.eu.org/TommySalami/Files2Folders2Files](https://gitemall.devemall.int.eu.org/TommySalami/Files2Folders2Files "GitEmAll") + +--- +###### Copyright (c) 2016-2025 Files 2 Folders 2 Files - All Rights Reserved v2025-07-29-00 diff --git a/Files2Folders2Files-CLI/App.config b/Files2Folders2Files-CLI/App.config new file mode 100644 index 0000000..193aecc --- /dev/null +++ b/Files2Folders2Files-CLI/App.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Files2Folders2Files-CLI/Files2Folders2Files-CLI.csproj b/Files2Folders2Files-CLI/Files2Folders2Files-CLI.csproj new file mode 100644 index 0000000..ed16b3c --- /dev/null +++ b/Files2Folders2Files-CLI/Files2Folders2Files-CLI.csproj @@ -0,0 +1,97 @@ + + + + + Debug + AnyCPU + {B0E50B70-FDF5-41C8-82FB-0543274CE095} + Exe + Files2Folders2Files_CLI + Files2Folders2Files-CLI + v4.8 + 512 + true + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + bin\Debug\Files2Folders2Files-CLI.xml + + + AnyCPU + none + true + bin\Release\ + TRACE + prompt + 4 + + + + ..\packages\Serilog.2.12.0\lib\net47\Serilog.dll + + + ..\packages\Serilog.Sinks.Console.4.1.0\lib\net45\Serilog.Sinks.Console.dll + + + ..\packages\Serilog.Sinks.LogEmAll.0.0.7\lib\net461\Serilog.Sinks.LogEmAll.dll + + + + + + + + + + + + True + True + Resources.resx + + + + + + + + + + + + + + + + + + + + + + + ResXFileCodeGenerator + Resources.Designer.cs + + + + + {cbad4d51-b8d5-4f07-8c71-b152f284fdf2} + Files2Folders2Files + + + + + + + + + \ No newline at end of file diff --git a/Files2Folders2Files-CLI/Program.cs b/Files2Folders2Files-CLI/Program.cs new file mode 100644 index 0000000..7307119 --- /dev/null +++ b/Files2Folders2Files-CLI/Program.cs @@ -0,0 +1,55 @@ +using Serilog; +using Serilog.Formatting.Display; +using Serilog.Sinks.LogEmAll; + +namespace Files2Folders2Files_CLI +{ + /// + /// The Main Program Class. + /// + class Program + { + /// + /// The main entry point for the application. + /// + /// + static void Main(string[] args) + { + // Configure the Logger. + ConfigureSerilog(); + + // Create a new program object. + Files2Folders2Files.Files2Folders2Files f2f2f = new Files2Folders2Files.Files2Folders2Files(); + + // Set the title. + f2f2f.UpdateTitle(); + + // Print the version. + f2f2f.PrintVersion(); + + // Load the default options passed from the default options file. + f2f2f.LoadOptionsFromFile(); + + // Load the default options passed from the command line arguments. + f2f2f.LoadOptionsFromCLI(args); + + // Process the command switch. + f2f2f.ProcessCommandSwitch(); + + // Output the log to a text file. + f2f2f.SaveLogToFile(); + } + + /// + /// Configure the logger. + /// + public static void ConfigureSerilog() + { + Log.Logger = new LoggerConfiguration() + .MinimumLevel.Information() + .WriteTo.Console(outputTemplate: "{Level:u4}: {Message:lj}{NewLine}{Exception}") + .WriteToListString(new MessageTemplateTextFormatter("{Level:u4}: {Message:lj}{Exception}")) + .CreateLogger(); + } + } +} diff --git a/Files2Folders2Files-CLI/Properties/AssemblyInfo.cs b/Files2Folders2Files-CLI/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..9a1fb15 --- /dev/null +++ b/Files2Folders2Files-CLI/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Files2Folders2Files-CLI")] +[assembly: AssemblyDescription("The Original Automated Files 2 Folders 2 Files")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Files 2 Folders 2 Files")] +[assembly: AssemblyProduct("Files2Folders2Files-CLI")] +[assembly: AssemblyCopyright("Copyright (c) 2016-2025 Files 2 Folders 2 Files - All Rights Reserved")] +[assembly: AssemblyTrademark("Files 2 Folders 2 Files - The Original Automated Files 2 Folders 2 Files")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("b0e50b70-fdf5-41c8-82fb-0543274ce095")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("0.1.2")] +[assembly: AssemblyFileVersion("0.1.2")] diff --git a/Files2Folders2Files-CLI/Properties/Resources.Designer.cs b/Files2Folders2Files-CLI/Properties/Resources.Designer.cs new file mode 100644 index 0000000..459174f --- /dev/null +++ b/Files2Folders2Files-CLI/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Files2Folders2Files_CLI.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Files2Folders2Files_CLI.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/Files2Folders2Files-CLI/Properties/Resources.resx b/Files2Folders2Files-CLI/Properties/Resources.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/Files2Folders2Files-CLI/Properties/Resources.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Files2Folders2Files-CLI/Resources/BASHes/Files2Folders2Files-Files2Folders.sh b/Files2Folders2Files-CLI/Resources/BASHes/Files2Folders2Files-Files2Folders.sh new file mode 100644 index 0000000..4cf05ec --- /dev/null +++ b/Files2Folders2Files-CLI/Resources/BASHes/Files2Folders2Files-Files2Folders.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +# Main +mono "../Files2Folders2Files-CLI.exe" -files2folders diff --git a/Files2Folders2Files-CLI/Resources/BASHes/Files2Folders2Files-Folders2Files.sh b/Files2Folders2Files-CLI/Resources/BASHes/Files2Folders2Files-Folders2Files.sh new file mode 100644 index 0000000..d4cebcd --- /dev/null +++ b/Files2Folders2Files-CLI/Resources/BASHes/Files2Folders2Files-Folders2Files.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +# Main +mono "../Files2Folders2Files-CLI.exe" -folders2files diff --git a/Files2Folders2Files-CLI/Resources/BASHes/Files2Folders2Files-Print-Donation-Info.sh b/Files2Folders2Files-CLI/Resources/BASHes/Files2Folders2Files-Print-Donation-Info.sh new file mode 100644 index 0000000..a4ffed5 --- /dev/null +++ b/Files2Folders2Files-CLI/Resources/BASHes/Files2Folders2Files-Print-Donation-Info.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +# Main +mono "../Files2Folders2Files-CLI.exe" -donations diff --git a/Files2Folders2Files-CLI/Resources/BASHes/Files2Folders2Files-Print-Help-CMD.sh b/Files2Folders2Files-CLI/Resources/BASHes/Files2Folders2Files-Print-Help-CMD.sh new file mode 100644 index 0000000..3619402 --- /dev/null +++ b/Files2Folders2Files-CLI/Resources/BASHes/Files2Folders2Files-Print-Help-CMD.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +# Main +mono "../Files2Folders2Files-CLI.exe" -help "LF:../Logs/Files2Folders2Files-Log-00000000_000000.txt" diff --git a/Files2Folders2Files-CLI/Resources/BASHes/Files2Folders2Files-Print-License.sh b/Files2Folders2Files-CLI/Resources/BASHes/Files2Folders2Files-Print-License.sh new file mode 100644 index 0000000..01442f3 --- /dev/null +++ b/Files2Folders2Files-CLI/Resources/BASHes/Files2Folders2Files-Print-License.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +# Main +mono "../Files2Folders2Files-CLI.exe" -license diff --git a/Files2Folders2Files-CLI/Resources/BASHes/Files2Folders2Files-Print-Version.sh b/Files2Folders2Files-CLI/Resources/BASHes/Files2Folders2Files-Print-Version.sh new file mode 100644 index 0000000..9391980 --- /dev/null +++ b/Files2Folders2Files-CLI/Resources/BASHes/Files2Folders2Files-Print-Version.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +# Main +mono "../Files2Folders2Files-CLI.exe" -version diff --git a/Files2Folders2Files-CLI/Resources/BASHes/Files2Folders2Files-Save-Options.sh b/Files2Folders2Files-CLI/Resources/BASHes/Files2Folders2Files-Save-Options.sh new file mode 100644 index 0000000..390da7b --- /dev/null +++ b/Files2Folders2Files-CLI/Resources/BASHes/Files2Folders2Files-Save-Options.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +# Main +mono "../Files2Folders2Files-CLI.exe" -saveoptions diff --git a/Files2Folders2Files-CLI/Resources/BASHes/put your bash files in this directory.txt b/Files2Folders2Files-CLI/Resources/BASHes/put your bash files in this directory.txt new file mode 100644 index 0000000..6d78808 --- /dev/null +++ b/Files2Folders2Files-CLI/Resources/BASHes/put your bash files in this directory.txt @@ -0,0 +1 @@ +This file can be deleted. \ No newline at end of file diff --git a/Files2Folders2Files-CLI/Resources/Batches/Files2Folders2Files-Files2Folders.bat b/Files2Folders2Files-CLI/Resources/Batches/Files2Folders2Files-Files2Folders.bat new file mode 100644 index 0000000..a493800 --- /dev/null +++ b/Files2Folders2Files-CLI/Resources/Batches/Files2Folders2Files-Files2Folders.bat @@ -0,0 +1,7 @@ +@echo off + +rem */ Main /* +"..\Files2Folders2Files-CLI.exe" -files2folders + +rem */ Pause /* +@pause diff --git a/Files2Folders2Files-CLI/Resources/Batches/Files2Folders2Files-Folders2Files.bat b/Files2Folders2Files-CLI/Resources/Batches/Files2Folders2Files-Folders2Files.bat new file mode 100644 index 0000000..e6f7194 --- /dev/null +++ b/Files2Folders2Files-CLI/Resources/Batches/Files2Folders2Files-Folders2Files.bat @@ -0,0 +1,7 @@ +@echo off + +rem */ Main /* +"..\Files2Folders2Files-CLI.exe" -folders2files + +rem */ Pause /* +@pause diff --git a/Files2Folders2Files-CLI/Resources/Batches/Files2Folders2Files-Print-Donation-Info.bat b/Files2Folders2Files-CLI/Resources/Batches/Files2Folders2Files-Print-Donation-Info.bat new file mode 100644 index 0000000..618100e --- /dev/null +++ b/Files2Folders2Files-CLI/Resources/Batches/Files2Folders2Files-Print-Donation-Info.bat @@ -0,0 +1,7 @@ +@echo off + +rem */ Main /* +"..\Files2Folders2Files-CLI.exe" -donations + +rem */ Pause /* +@pause diff --git a/Files2Folders2Files-CLI/Resources/Batches/Files2Folders2Files-Print-Help-CMD.bat b/Files2Folders2Files-CLI/Resources/Batches/Files2Folders2Files-Print-Help-CMD.bat new file mode 100644 index 0000000..b4037b7 --- /dev/null +++ b/Files2Folders2Files-CLI/Resources/Batches/Files2Folders2Files-Print-Help-CMD.bat @@ -0,0 +1,7 @@ +@echo off + +rem */ Main /* +"..\Files2Folders2Files-CLI.exe" -help "LF:..\Logs\Files2Folders2Files-Log-00000000_000000.txt" + +rem */ Pause /* +@pause diff --git a/Files2Folders2Files-CLI/Resources/Batches/Files2Folders2Files-Print-License.bat b/Files2Folders2Files-CLI/Resources/Batches/Files2Folders2Files-Print-License.bat new file mode 100644 index 0000000..9f2d593 --- /dev/null +++ b/Files2Folders2Files-CLI/Resources/Batches/Files2Folders2Files-Print-License.bat @@ -0,0 +1,7 @@ +@echo off + +rem */ Main /* +"..\Files2Folders2Files-CLI.exe" -license + +rem */ Pause /* +@pause diff --git a/Files2Folders2Files-CLI/Resources/Batches/Files2Folders2Files-Print-Version.bat b/Files2Folders2Files-CLI/Resources/Batches/Files2Folders2Files-Print-Version.bat new file mode 100644 index 0000000..106a362 --- /dev/null +++ b/Files2Folders2Files-CLI/Resources/Batches/Files2Folders2Files-Print-Version.bat @@ -0,0 +1,7 @@ +@echo off + +rem */ Main /* +"..\Files2Folders2Files-CLI.exe" -version + +rem */ Pause /* +@pause diff --git a/Files2Folders2Files-CLI/Resources/Batches/Files2Folders2Files-Save-Options.bat b/Files2Folders2Files-CLI/Resources/Batches/Files2Folders2Files-Save-Options.bat new file mode 100644 index 0000000..85b4ffb --- /dev/null +++ b/Files2Folders2Files-CLI/Resources/Batches/Files2Folders2Files-Save-Options.bat @@ -0,0 +1,7 @@ +@echo off + +rem */ Main /* +"..\Files2Folders2Files-CLI.exe" -saveoptions + +rem */ Pause /* +@pause diff --git a/Files2Folders2Files-CLI/Resources/Batches/put your batch files in this directory.txt b/Files2Folders2Files-CLI/Resources/Batches/put your batch files in this directory.txt new file mode 100644 index 0000000..6d78808 --- /dev/null +++ b/Files2Folders2Files-CLI/Resources/Batches/put your batch files in this directory.txt @@ -0,0 +1 @@ +This file can be deleted. \ No newline at end of file diff --git a/Files2Folders2Files-CLI/packages.config b/Files2Folders2Files-CLI/packages.config new file mode 100644 index 0000000..b927374 --- /dev/null +++ b/Files2Folders2Files-CLI/packages.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Files2Folders2Files-GUI/App.config b/Files2Folders2Files-GUI/App.config new file mode 100644 index 0000000..4bfa005 --- /dev/null +++ b/Files2Folders2Files-GUI/App.config @@ -0,0 +1,6 @@ + + + + + + diff --git a/Files2Folders2Files-GUI/Files2Folders2Files-GUI.csproj b/Files2Folders2Files-GUI/Files2Folders2Files-GUI.csproj new file mode 100644 index 0000000..1daa500 --- /dev/null +++ b/Files2Folders2Files-GUI/Files2Folders2Files-GUI.csproj @@ -0,0 +1,118 @@ + + + + + Debug + AnyCPU + {73055FFB-47A7-4332-BB2B-410AAE263774} + WinExe + Files2Folders2Files_GUI + Files2Folders2Files-GUI + v4.8 + 512 + true + true + false + + publish\ + true + Disk + false + Foreground + 7 + Days + false + false + true + 0 + 1.0.0.%2a + false + true + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + bin\Debug\Files2Folders2Files-GUI.xml + + + AnyCPU + none + true + bin\Release\ + TRACE + prompt + 4 + + + + + ..\packages\Serilog.2.12.0\lib\net47\Serilog.dll + + + ..\packages\Serilog.Sinks.LogEmAll.0.0.7\lib\net461\Serilog.Sinks.LogEmAll.dll + + + + + + + + + + + + + Form + + + FrmFiles2Folders2Files.cs + + + + + FrmFiles2Folders2Files.cs + + + ResXFileCodeGenerator + Resources.Designer.cs + Designer + + + True + Resources.resx + True + + + + + + + + + False + Microsoft .NET Framework 4.6.1 %28x86 and x64%29 + true + + + False + .NET Framework 3.5 SP1 + false + + + + + {cbad4d51-b8d5-4f07-8c71-b152f284fdf2} + Files2Folders2Files + + + + + + + \ No newline at end of file diff --git a/Files2Folders2Files-GUI/FrmFiles2Folders2Files.Designer.cs b/Files2Folders2Files-GUI/FrmFiles2Folders2Files.Designer.cs new file mode 100644 index 0000000..a081aae --- /dev/null +++ b/Files2Folders2Files-GUI/FrmFiles2Folders2Files.Designer.cs @@ -0,0 +1,966 @@ +namespace Files2Folders2Files_GUI +{ + partial class FrmFiles2Folders2Files + { + /// + /// Required designer variable. + /// + private System.ComponentModel.IContainer components = null; + + /// + /// Clean up any resources being used. + /// + /// true if managed resources should be disposed; otherwise, false. + protected override void Dispose(bool disposing) + { + if (disposing && (components != null)) + { + components.Dispose(); + } + base.Dispose(disposing); + } + + #region Windows Form Designer generated code + + /// + /// Required method for Designer support - do not modify + /// the contents of this method with the code editor. + /// + private void InitializeComponent() + { + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmFiles2Folders2Files)); + this.msMain = new System.Windows.Forms.MenuStrip(); + this.tsmiFiles2Folders2Files = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmiFiles2Folders = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmiFolders2Files = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator(); + this.loadOptionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.saveOptionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator5 = new System.Windows.Forms.ToolStripSeparator(); + this.saveLogToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.toolStripSeparator6 = new System.Windows.Forms.ToolStripSeparator(); + this.tsmiExit = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmiView = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmiLog = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmiOptions = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmiHelp = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmiLicense = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmiDonations = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmiRegistration = new System.Windows.Forms.ToolStripMenuItem(); + this.tsmiToolbar = new System.Windows.Forms.ToolStripMenuItem(); + this.tsMain = new System.Windows.Forms.ToolStrip(); + this.tsbFiles2Folders = new System.Windows.Forms.ToolStripButton(); + this.tsbFolders2Files = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator(); + this.tsbLoadOptions = new System.Windows.Forms.ToolStripButton(); + this.tsbSaveOptions = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator3 = new System.Windows.Forms.ToolStripSeparator(); + this.tsbSaveLog = new System.Windows.Forms.ToolStripButton(); + this.toolStripSeparator4 = new System.Windows.Forms.ToolStripSeparator(); + this.tsbViewHelp = new System.Windows.Forms.ToolStripButton(); + this.tsbViewLicense = new System.Windows.Forms.ToolStripButton(); + this.tsbViewDonations = new System.Windows.Forms.ToolStripButton(); + this.tsbViewRegistration = new System.Windows.Forms.ToolStripButton(); + this.tsbViewToolbar = new System.Windows.Forms.ToolStripButton(); + this.ssMain = new System.Windows.Forms.StatusStrip(); + this.tsbCancel = new System.Windows.Forms.ToolStripDropDownButton(); + this.tspbOverallProgress = new System.Windows.Forms.ToolStripProgressBar(); + this.tsslStatus = new System.Windows.Forms.ToolStripStatusLabel(); + this.tsslSnap = new System.Windows.Forms.ToolStripStatusLabel(); + this.bgwFiles2Folders = new System.ComponentModel.BackgroundWorker(); + this.bgwFolders2Files = new System.ComponentModel.BackgroundWorker(); + this.tcMain = new System.Windows.Forms.TabControl(); + this.tabLog = new System.Windows.Forms.TabPage(); + this.rtblLog = new Serilog.Sinks.LogEmAll.RichTextBoxLog(); + this.tabOptions = new System.Windows.Forms.TabPage(); + this.gbOptionsInfo = new System.Windows.Forms.GroupBox(); + this.lblOptionsInfo1 = new System.Windows.Forms.Label(); + this.tlpOptions = new System.Windows.Forms.TableLayoutPanel(); + this.gbOutputOptions = new System.Windows.Forms.GroupBox(); + this.chkDeleteEmptyFolders = new System.Windows.Forms.CheckBox(); + this.gbDirectoryPath = new System.Windows.Forms.GroupBox(); + this.txtDirectoryPath = new System.Windows.Forms.TextBox(); + this.tabHelp = new System.Windows.Forms.TabPage(); + this.rtbHelp = new System.Windows.Forms.RichTextBox(); + this.tabLicense = new System.Windows.Forms.TabPage(); + this.rtbLicense = new System.Windows.Forms.RichTextBox(); + this.tabDonations = new System.Windows.Forms.TabPage(); + this.rtbDonations = new System.Windows.Forms.RichTextBox(); + this.tabRegistration = new System.Windows.Forms.TabPage(); + this.gbRegisterApp = new System.Windows.Forms.GroupBox(); + this.bgwStartupTasks = new System.ComponentModel.BackgroundWorker(); + this.txtRegisterAppUsername = new System.Windows.Forms.TextBox(); + this.txtRegisterAppEmailAddress = new System.Windows.Forms.TextBox(); + this.txtRegisterAppPassword = new System.Windows.Forms.TextBox(); + this.btnRegisterApp = new System.Windows.Forms.Button(); + this.lblRegisterAppUsername = new System.Windows.Forms.Label(); + this.lblRegisterAppEmailAddress = new System.Windows.Forms.Label(); + this.lblRegisterAppPassword = new System.Windows.Forms.Label(); + this.lblRegistrationStatus = new System.Windows.Forms.Label(); + this.lblRegistrationKey = new System.Windows.Forms.Label(); + this.lblRegistrationStatusLabel = new System.Windows.Forms.Label(); + this.lblRegistrationKeyLabel = new System.Windows.Forms.Label(); + this.gbRegistration = new System.Windows.Forms.GroupBox(); + this.tlpRegistration = new System.Windows.Forms.TableLayoutPanel(); + this.msMain.SuspendLayout(); + this.tsMain.SuspendLayout(); + this.ssMain.SuspendLayout(); + this.tcMain.SuspendLayout(); + this.tabLog.SuspendLayout(); + this.tabOptions.SuspendLayout(); + this.gbOptionsInfo.SuspendLayout(); + this.tlpOptions.SuspendLayout(); + this.gbOutputOptions.SuspendLayout(); + this.gbDirectoryPath.SuspendLayout(); + this.tabHelp.SuspendLayout(); + this.tabLicense.SuspendLayout(); + this.tabDonations.SuspendLayout(); + this.tabRegistration.SuspendLayout(); + this.gbRegisterApp.SuspendLayout(); + this.gbRegistration.SuspendLayout(); + this.tlpRegistration.SuspendLayout(); + this.SuspendLayout(); + // + // msMain + // + this.msMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tsmiFiles2Folders2Files, + this.tsmiView}); + this.msMain.Location = new System.Drawing.Point(0, 0); + this.msMain.Name = "msMain"; + this.msMain.Size = new System.Drawing.Size(784, 24); + this.msMain.TabIndex = 0; + this.msMain.Text = "msMain"; + // + // tsmiFiles2Folders2Files + // + this.tsmiFiles2Folders2Files.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tsmiFiles2Folders, + this.tsmiFolders2Files, + this.toolStripSeparator1, + this.loadOptionsToolStripMenuItem, + this.saveOptionsToolStripMenuItem, + this.toolStripSeparator5, + this.saveLogToolStripMenuItem, + this.toolStripSeparator6, + this.tsmiExit}); + this.tsmiFiles2Folders2Files.Name = "tsmiFiles2Folders2Files"; + this.tsmiFiles2Folders2Files.Size = new System.Drawing.Size(127, 20); + this.tsmiFiles2Folders2Files.Text = "Files 2 Folders 2 Files"; + // + // tsmiFiles2Folders + // + this.tsmiFiles2Folders.Name = "tsmiFiles2Folders"; + this.tsmiFiles2Folders.Size = new System.Drawing.Size(147, 22); + this.tsmiFiles2Folders.Text = "Files 2 Folders"; + this.tsmiFiles2Folders.Click += new System.EventHandler(this.Files2Folders_Click); + // + // tsmiFolders2Files + // + this.tsmiFolders2Files.Name = "tsmiFolders2Files"; + this.tsmiFolders2Files.Size = new System.Drawing.Size(147, 22); + this.tsmiFolders2Files.Text = "Folders 2 Files"; + this.tsmiFolders2Files.Click += new System.EventHandler(this.Folders2Files_Click); + // + // toolStripSeparator1 + // + this.toolStripSeparator1.Name = "toolStripSeparator1"; + this.toolStripSeparator1.Size = new System.Drawing.Size(144, 6); + // + // loadOptionsToolStripMenuItem + // + this.loadOptionsToolStripMenuItem.Name = "loadOptionsToolStripMenuItem"; + this.loadOptionsToolStripMenuItem.Size = new System.Drawing.Size(147, 22); + this.loadOptionsToolStripMenuItem.Text = "Load Options"; + this.loadOptionsToolStripMenuItem.Click += new System.EventHandler(this.LoadOptions_Click); + // + // saveOptionsToolStripMenuItem + // + this.saveOptionsToolStripMenuItem.Name = "saveOptionsToolStripMenuItem"; + this.saveOptionsToolStripMenuItem.Size = new System.Drawing.Size(147, 22); + this.saveOptionsToolStripMenuItem.Text = "Save Options"; + this.saveOptionsToolStripMenuItem.Click += new System.EventHandler(this.SaveOptions_Click); + // + // toolStripSeparator5 + // + this.toolStripSeparator5.Name = "toolStripSeparator5"; + this.toolStripSeparator5.Size = new System.Drawing.Size(144, 6); + // + // saveLogToolStripMenuItem + // + this.saveLogToolStripMenuItem.Name = "saveLogToolStripMenuItem"; + this.saveLogToolStripMenuItem.Size = new System.Drawing.Size(147, 22); + this.saveLogToolStripMenuItem.Text = "Save Log"; + this.saveLogToolStripMenuItem.Click += new System.EventHandler(this.SaveLog_Click); + // + // toolStripSeparator6 + // + this.toolStripSeparator6.Name = "toolStripSeparator6"; + this.toolStripSeparator6.Size = new System.Drawing.Size(144, 6); + // + // tsmiExit + // + this.tsmiExit.Name = "tsmiExit"; + this.tsmiExit.Size = new System.Drawing.Size(147, 22); + this.tsmiExit.Text = "Exit"; + this.tsmiExit.Click += new System.EventHandler(this.Exit_Click); + // + // tsmiView + // + this.tsmiView.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tsmiLog, + this.tsmiOptions, + this.tsmiHelp, + this.tsmiLicense, + this.tsmiDonations, + this.tsmiRegistration, + this.tsmiToolbar}); + this.tsmiView.Name = "tsmiView"; + this.tsmiView.Size = new System.Drawing.Size(44, 20); + this.tsmiView.Text = "View"; + // + // tsmiLog + // + this.tsmiLog.Checked = true; + this.tsmiLog.CheckState = System.Windows.Forms.CheckState.Checked; + this.tsmiLog.Name = "tsmiLog"; + this.tsmiLog.Size = new System.Drawing.Size(137, 22); + this.tsmiLog.Text = "Log"; + this.tsmiLog.Click += new System.EventHandler(this.ViewLog_Click); + // + // tsmiOptions + // + this.tsmiOptions.Checked = true; + this.tsmiOptions.CheckState = System.Windows.Forms.CheckState.Checked; + this.tsmiOptions.Name = "tsmiOptions"; + this.tsmiOptions.Size = new System.Drawing.Size(137, 22); + this.tsmiOptions.Text = "Options"; + this.tsmiOptions.Click += new System.EventHandler(this.ViewOptions_Click); + // + // tsmiHelp + // + this.tsmiHelp.Name = "tsmiHelp"; + this.tsmiHelp.Size = new System.Drawing.Size(137, 22); + this.tsmiHelp.Text = "Help"; + this.tsmiHelp.Click += new System.EventHandler(this.ViewHelp_Click); + // + // tsmiLicense + // + this.tsmiLicense.Name = "tsmiLicense"; + this.tsmiLicense.Size = new System.Drawing.Size(137, 22); + this.tsmiLicense.Text = "License"; + this.tsmiLicense.Click += new System.EventHandler(this.ViewLicense_Click); + // + // tsmiDonations + // + this.tsmiDonations.Name = "tsmiDonations"; + this.tsmiDonations.Size = new System.Drawing.Size(137, 22); + this.tsmiDonations.Text = "Donations"; + this.tsmiDonations.Click += new System.EventHandler(this.ViewDonations_Click); + // + // tsmiRegistration + // + this.tsmiRegistration.Name = "tsmiRegistration"; + this.tsmiRegistration.Size = new System.Drawing.Size(137, 22); + this.tsmiRegistration.Text = "Registration"; + this.tsmiRegistration.Click += new System.EventHandler(this.ViewRegistration_Click); + // + // tsmiToolbar + // + this.tsmiToolbar.Name = "tsmiToolbar"; + this.tsmiToolbar.Size = new System.Drawing.Size(137, 22); + this.tsmiToolbar.Text = "Toolbar"; + this.tsmiToolbar.Click += new System.EventHandler(this.ViewToolbar_Click); + // + // tsMain + // + this.tsMain.ImageScalingSize = new System.Drawing.Size(32, 32); + this.tsMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tsbFiles2Folders, + this.tsbFolders2Files, + this.toolStripSeparator2, + this.tsbLoadOptions, + this.tsbSaveOptions, + this.toolStripSeparator3, + this.tsbSaveLog, + this.toolStripSeparator4, + this.tsbViewHelp, + this.tsbViewLicense, + this.tsbViewDonations, + this.tsbViewRegistration, + this.tsbViewToolbar}); + this.tsMain.Location = new System.Drawing.Point(0, 24); + this.tsMain.Name = "tsMain"; + this.tsMain.Size = new System.Drawing.Size(784, 39); + this.tsMain.TabIndex = 1; + this.tsMain.Text = "tsMain"; + // + // tsbFiles2Folders + // + this.tsbFiles2Folders.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.tsbFiles2Folders.Image = ((System.Drawing.Image)(resources.GetObject("tsbFiles2Folders.Image"))); + this.tsbFiles2Folders.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbFiles2Folders.Name = "tsbFiles2Folders"; + this.tsbFiles2Folders.Size = new System.Drawing.Size(36, 36); + this.tsbFiles2Folders.Text = "Files 2 Folders"; + this.tsbFiles2Folders.Click += new System.EventHandler(this.Files2Folders_Click); + // + // tsbFolders2Files + // + this.tsbFolders2Files.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.tsbFolders2Files.Image = ((System.Drawing.Image)(resources.GetObject("tsbFolders2Files.Image"))); + this.tsbFolders2Files.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbFolders2Files.Name = "tsbFolders2Files"; + this.tsbFolders2Files.Size = new System.Drawing.Size(36, 36); + this.tsbFolders2Files.Text = "Folders 2 Files"; + this.tsbFolders2Files.Click += new System.EventHandler(this.Folders2Files_Click); + // + // toolStripSeparator2 + // + this.toolStripSeparator2.Name = "toolStripSeparator2"; + this.toolStripSeparator2.Size = new System.Drawing.Size(6, 39); + // + // tsbLoadOptions + // + this.tsbLoadOptions.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.tsbLoadOptions.Image = ((System.Drawing.Image)(resources.GetObject("tsbLoadOptions.Image"))); + this.tsbLoadOptions.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbLoadOptions.Name = "tsbLoadOptions"; + this.tsbLoadOptions.Size = new System.Drawing.Size(36, 36); + this.tsbLoadOptions.Text = "Load Options"; + this.tsbLoadOptions.Click += new System.EventHandler(this.LoadOptions_Click); + // + // tsbSaveOptions + // + this.tsbSaveOptions.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.tsbSaveOptions.Image = ((System.Drawing.Image)(resources.GetObject("tsbSaveOptions.Image"))); + this.tsbSaveOptions.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbSaveOptions.Name = "tsbSaveOptions"; + this.tsbSaveOptions.Size = new System.Drawing.Size(36, 36); + this.tsbSaveOptions.Text = "Save Options"; + this.tsbSaveOptions.Click += new System.EventHandler(this.SaveOptions_Click); + // + // toolStripSeparator3 + // + this.toolStripSeparator3.Name = "toolStripSeparator3"; + this.toolStripSeparator3.Size = new System.Drawing.Size(6, 39); + // + // tsbSaveLog + // + this.tsbSaveLog.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.tsbSaveLog.Image = ((System.Drawing.Image)(resources.GetObject("tsbSaveLog.Image"))); + this.tsbSaveLog.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbSaveLog.Name = "tsbSaveLog"; + this.tsbSaveLog.Size = new System.Drawing.Size(36, 36); + this.tsbSaveLog.Text = "Save Log"; + this.tsbSaveLog.Click += new System.EventHandler(this.SaveLog_Click); + // + // toolStripSeparator4 + // + this.toolStripSeparator4.Name = "toolStripSeparator4"; + this.toolStripSeparator4.Size = new System.Drawing.Size(6, 39); + // + // tsbViewHelp + // + this.tsbViewHelp.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.tsbViewHelp.Image = ((System.Drawing.Image)(resources.GetObject("tsbViewHelp.Image"))); + this.tsbViewHelp.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbViewHelp.Name = "tsbViewHelp"; + this.tsbViewHelp.Size = new System.Drawing.Size(36, 36); + this.tsbViewHelp.Text = "View Help"; + this.tsbViewHelp.Click += new System.EventHandler(this.ViewHelp_Click); + // + // tsbViewLicense + // + this.tsbViewLicense.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.tsbViewLicense.Image = ((System.Drawing.Image)(resources.GetObject("tsbViewLicense.Image"))); + this.tsbViewLicense.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbViewLicense.Name = "tsbViewLicense"; + this.tsbViewLicense.Size = new System.Drawing.Size(36, 36); + this.tsbViewLicense.Text = "View License"; + this.tsbViewLicense.Click += new System.EventHandler(this.ViewLicense_Click); + // + // tsbViewDonations + // + this.tsbViewDonations.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.tsbViewDonations.Image = ((System.Drawing.Image)(resources.GetObject("tsbViewDonations.Image"))); + this.tsbViewDonations.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbViewDonations.Name = "tsbViewDonations"; + this.tsbViewDonations.Size = new System.Drawing.Size(36, 36); + this.tsbViewDonations.Text = "View Donations"; + this.tsbViewDonations.Click += new System.EventHandler(this.ViewDonations_Click); + // + // tsbViewRegistration + // + this.tsbViewRegistration.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.tsbViewRegistration.Image = ((System.Drawing.Image)(resources.GetObject("tsbViewRegistration.Image"))); + this.tsbViewRegistration.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbViewRegistration.Name = "tsbViewRegistration"; + this.tsbViewRegistration.Size = new System.Drawing.Size(36, 36); + this.tsbViewRegistration.Text = "View Registration"; + this.tsbViewRegistration.Click += new System.EventHandler(this.ViewRegistration_Click); + // + // tsbViewToolbar + // + this.tsbViewToolbar.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.tsbViewToolbar.Image = ((System.Drawing.Image)(resources.GetObject("tsbViewToolbar.Image"))); + this.tsbViewToolbar.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbViewToolbar.Name = "tsbViewToolbar"; + this.tsbViewToolbar.Size = new System.Drawing.Size(36, 36); + this.tsbViewToolbar.Text = "View Toolbar"; + this.tsbViewToolbar.Click += new System.EventHandler(this.ViewToolbar_Click); + // + // ssMain + // + this.ssMain.Items.AddRange(new System.Windows.Forms.ToolStripItem[] { + this.tsbCancel, + this.tspbOverallProgress, + this.tsslStatus, + this.tsslSnap}); + this.ssMain.Location = new System.Drawing.Point(0, 359); + this.ssMain.Name = "ssMain"; + this.ssMain.Size = new System.Drawing.Size(784, 22); + this.ssMain.TabIndex = 2; + this.ssMain.Text = "ssMain"; + // + // tsbCancel + // + this.tsbCancel.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image; + this.tsbCancel.Enabled = false; + this.tsbCancel.Image = ((System.Drawing.Image)(resources.GetObject("tsbCancel.Image"))); + this.tsbCancel.ImageTransparentColor = System.Drawing.Color.Magenta; + this.tsbCancel.Name = "tsbCancel"; + this.tsbCancel.ShowDropDownArrow = false; + this.tsbCancel.Size = new System.Drawing.Size(20, 20); + this.tsbCancel.Text = "Cancel"; + this.tsbCancel.Click += new System.EventHandler(this.Cancel_Click); + // + // tspbOverallProgress + // + this.tspbOverallProgress.MarqueeAnimationSpeed = 10; + this.tspbOverallProgress.Name = "tspbOverallProgress"; + this.tspbOverallProgress.Size = new System.Drawing.Size(200, 16); + this.tspbOverallProgress.Step = 1; + // + // tsslStatus + // + this.tsslStatus.Name = "tsslStatus"; + this.tsslStatus.Size = new System.Drawing.Size(39, 17); + this.tsslStatus.Text = "Ready"; + // + // tsslSnap + // + this.tsslSnap.Name = "tsslSnap"; + this.tsslSnap.Size = new System.Drawing.Size(508, 17); + this.tsslSnap.Spring = true; + // + // bgwFiles2Folders + // + this.bgwFiles2Folders.WorkerReportsProgress = true; + this.bgwFiles2Folders.WorkerSupportsCancellation = true; + this.bgwFiles2Folders.DoWork += new System.ComponentModel.DoWorkEventHandler(this.Files2Folders_DoWork); + this.bgwFiles2Folders.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler(this.Files2Folders_ProgressChanged); + this.bgwFiles2Folders.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.Files2Folders_RunWorkerCompleted); + // + // bgwFolders2Files + // + this.bgwFolders2Files.WorkerReportsProgress = true; + this.bgwFolders2Files.WorkerSupportsCancellation = true; + this.bgwFolders2Files.DoWork += new System.ComponentModel.DoWorkEventHandler(this.Folders2Files_DoWork); + this.bgwFolders2Files.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler(this.Folders2Files_ProgressChanged); + this.bgwFolders2Files.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.Folders2Files_RunWorkerCompleted); + // + // tcMain + // + this.tcMain.Controls.Add(this.tabLog); + this.tcMain.Controls.Add(this.tabOptions); + this.tcMain.Controls.Add(this.tabHelp); + this.tcMain.Controls.Add(this.tabLicense); + this.tcMain.Controls.Add(this.tabDonations); + this.tcMain.Controls.Add(this.tabRegistration); + this.tcMain.Dock = System.Windows.Forms.DockStyle.Fill; + this.tcMain.Location = new System.Drawing.Point(0, 63); + this.tcMain.Name = "tcMain"; + this.tcMain.SelectedIndex = 0; + this.tcMain.Size = new System.Drawing.Size(784, 296); + this.tcMain.TabIndex = 3; + // + // tabLog + // + this.tabLog.Controls.Add(this.rtblLog); + this.tabLog.Location = new System.Drawing.Point(4, 22); + this.tabLog.Name = "tabLog"; + this.tabLog.Padding = new System.Windows.Forms.Padding(3); + this.tabLog.Size = new System.Drawing.Size(776, 270); + this.tabLog.TabIndex = 0; + this.tabLog.Text = " Log "; + this.tabLog.UseVisualStyleBackColor = true; + // + // rtblLog + // + this.rtblLog.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.rtblLog.Location = new System.Drawing.Point(6, 6); + this.rtblLog.Name = "rtblLog"; + this.rtblLog.ReadOnly = true; + this.rtblLog.Size = new System.Drawing.Size(764, 258); + this.rtblLog.TabIndex = 1; + this.rtblLog.Text = ""; + // + // tabOptions + // + this.tabOptions.Controls.Add(this.gbOptionsInfo); + this.tabOptions.Controls.Add(this.tlpOptions); + this.tabOptions.Location = new System.Drawing.Point(4, 22); + this.tabOptions.Name = "tabOptions"; + this.tabOptions.Padding = new System.Windows.Forms.Padding(3); + this.tabOptions.Size = new System.Drawing.Size(776, 270); + this.tabOptions.TabIndex = 1; + this.tabOptions.Text = " Options "; + this.tabOptions.UseVisualStyleBackColor = true; + // + // gbOptionsInfo + // + this.gbOptionsInfo.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.gbOptionsInfo.Controls.Add(this.lblOptionsInfo1); + this.gbOptionsInfo.Location = new System.Drawing.Point(6, 111); + this.gbOptionsInfo.Name = "gbOptionsInfo"; + this.gbOptionsInfo.Size = new System.Drawing.Size(764, 35); + this.gbOptionsInfo.TabIndex = 2; + this.gbOptionsInfo.TabStop = false; + this.gbOptionsInfo.Text = "Options Info"; + // + // lblOptionsInfo1 + // + this.lblOptionsInfo1.AutoSize = true; + this.lblOptionsInfo1.Location = new System.Drawing.Point(9, 16); + this.lblOptionsInfo1.Name = "lblOptionsInfo1"; + this.lblOptionsInfo1.Size = new System.Drawing.Size(148, 13); + this.lblOptionsInfo1.TabIndex = 0; + this.lblOptionsInfo1.Text = "Use these options as needed."; + // + // tlpOptions + // + this.tlpOptions.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tlpOptions.ColumnCount = 1; + this.tlpOptions.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 100F)); + this.tlpOptions.Controls.Add(this.gbOutputOptions, 0, 1); + this.tlpOptions.Controls.Add(this.gbDirectoryPath, 0, 0); + this.tlpOptions.Location = new System.Drawing.Point(6, 6); + this.tlpOptions.Name = "tlpOptions"; + this.tlpOptions.RowCount = 2; + this.tlpOptions.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 51F)); + this.tlpOptions.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Absolute, 48F)); + this.tlpOptions.Size = new System.Drawing.Size(764, 99); + this.tlpOptions.TabIndex = 0; + // + // gbOutputOptions + // + this.gbOutputOptions.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.gbOutputOptions.Controls.Add(this.chkDeleteEmptyFolders); + this.gbOutputOptions.Location = new System.Drawing.Point(3, 54); + this.gbOutputOptions.Name = "gbOutputOptions"; + this.gbOutputOptions.Size = new System.Drawing.Size(758, 42); + this.gbOutputOptions.TabIndex = 1; + this.gbOutputOptions.TabStop = false; + this.gbOutputOptions.Text = "Output Options"; + // + // chkDeleteEmptyFolders + // + this.chkDeleteEmptyFolders.AutoSize = true; + this.chkDeleteEmptyFolders.Location = new System.Drawing.Point(6, 19); + this.chkDeleteEmptyFolders.Name = "chkDeleteEmptyFolders"; + this.chkDeleteEmptyFolders.Size = new System.Drawing.Size(126, 17); + this.chkDeleteEmptyFolders.TabIndex = 0; + this.chkDeleteEmptyFolders.Text = "Delete Empty Folders"; + this.chkDeleteEmptyFolders.UseVisualStyleBackColor = true; + // + // gbDirectoryPath + // + this.gbDirectoryPath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.gbDirectoryPath.Controls.Add(this.txtDirectoryPath); + this.gbDirectoryPath.Location = new System.Drawing.Point(3, 3); + this.gbDirectoryPath.Name = "gbDirectoryPath"; + this.gbDirectoryPath.Size = new System.Drawing.Size(758, 45); + this.gbDirectoryPath.TabIndex = 0; + this.gbDirectoryPath.TabStop = false; + this.gbDirectoryPath.Text = "Directory Path"; + // + // txtDirectoryPath + // + this.txtDirectoryPath.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtDirectoryPath.Location = new System.Drawing.Point(6, 19); + this.txtDirectoryPath.Name = "txtDirectoryPath"; + this.txtDirectoryPath.ReadOnly = true; + this.txtDirectoryPath.Size = new System.Drawing.Size(746, 20); + this.txtDirectoryPath.TabIndex = 0; + this.txtDirectoryPath.Click += new System.EventHandler(this.DirectoryPath_Click); + // + // tabHelp + // + this.tabHelp.Controls.Add(this.rtbHelp); + this.tabHelp.Location = new System.Drawing.Point(4, 22); + this.tabHelp.Name = "tabHelp"; + this.tabHelp.Padding = new System.Windows.Forms.Padding(3); + this.tabHelp.Size = new System.Drawing.Size(776, 270); + this.tabHelp.TabIndex = 2; + this.tabHelp.Text = " Help "; + this.tabHelp.UseVisualStyleBackColor = true; + // + // rtbHelp + // + this.rtbHelp.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.rtbHelp.Location = new System.Drawing.Point(6, 6); + this.rtbHelp.Name = "rtbHelp"; + this.rtbHelp.ReadOnly = true; + this.rtbHelp.Size = new System.Drawing.Size(764, 258); + this.rtbHelp.TabIndex = 0; + this.rtbHelp.Text = ""; + // + // tabLicense + // + this.tabLicense.Controls.Add(this.rtbLicense); + this.tabLicense.Location = new System.Drawing.Point(4, 22); + this.tabLicense.Name = "tabLicense"; + this.tabLicense.Padding = new System.Windows.Forms.Padding(3); + this.tabLicense.Size = new System.Drawing.Size(776, 270); + this.tabLicense.TabIndex = 3; + this.tabLicense.Text = " License "; + this.tabLicense.UseVisualStyleBackColor = true; + // + // rtbLicense + // + this.rtbLicense.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.rtbLicense.Location = new System.Drawing.Point(6, 6); + this.rtbLicense.Name = "rtbLicense"; + this.rtbLicense.ReadOnly = true; + this.rtbLicense.Size = new System.Drawing.Size(764, 258); + this.rtbLicense.TabIndex = 0; + this.rtbLicense.Text = ""; + // + // tabDonations + // + this.tabDonations.Controls.Add(this.rtbDonations); + this.tabDonations.Location = new System.Drawing.Point(4, 22); + this.tabDonations.Name = "tabDonations"; + this.tabDonations.Padding = new System.Windows.Forms.Padding(3); + this.tabDonations.Size = new System.Drawing.Size(776, 270); + this.tabDonations.TabIndex = 4; + this.tabDonations.Text = " Donations "; + this.tabDonations.UseVisualStyleBackColor = true; + // + // rtbDonations + // + this.rtbDonations.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) + | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.rtbDonations.Location = new System.Drawing.Point(6, 6); + this.rtbDonations.Name = "rtbDonations"; + this.rtbDonations.ReadOnly = true; + this.rtbDonations.Size = new System.Drawing.Size(764, 258); + this.rtbDonations.TabIndex = 0; + this.rtbDonations.Text = ""; + // + // tabRegistration + // + this.tabRegistration.Controls.Add(this.tlpRegistration); + this.tabRegistration.Location = new System.Drawing.Point(4, 22); + this.tabRegistration.Name = "tabRegistration"; + this.tabRegistration.Padding = new System.Windows.Forms.Padding(3); + this.tabRegistration.Size = new System.Drawing.Size(776, 270); + this.tabRegistration.TabIndex = 5; + this.tabRegistration.Text = " Registration "; + this.tabRegistration.UseVisualStyleBackColor = true; + // + // gbRegisterApp + // + this.gbRegisterApp.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.gbRegisterApp.Controls.Add(this.lblRegisterAppPassword); + this.gbRegisterApp.Controls.Add(this.lblRegisterAppEmailAddress); + this.gbRegisterApp.Controls.Add(this.lblRegisterAppUsername); + this.gbRegisterApp.Controls.Add(this.btnRegisterApp); + this.gbRegisterApp.Controls.Add(this.txtRegisterAppPassword); + this.gbRegisterApp.Controls.Add(this.txtRegisterAppEmailAddress); + this.gbRegisterApp.Controls.Add(this.txtRegisterAppUsername); + this.gbRegisterApp.Location = new System.Drawing.Point(3, 3); + this.gbRegisterApp.Name = "gbRegisterApp"; + this.gbRegisterApp.Size = new System.Drawing.Size(376, 126); + this.gbRegisterApp.TabIndex = 0; + this.gbRegisterApp.TabStop = false; + this.gbRegisterApp.Text = "Register App"; + // + // bgwStartupTasks + // + this.bgwStartupTasks.WorkerReportsProgress = true; + this.bgwStartupTasks.DoWork += new System.ComponentModel.DoWorkEventHandler(this.StartupTasks_DoWork); + this.bgwStartupTasks.ProgressChanged += new System.ComponentModel.ProgressChangedEventHandler(this.StartupTasks_ProgressChanged); + this.bgwStartupTasks.RunWorkerCompleted += new System.ComponentModel.RunWorkerCompletedEventHandler(this.StartupTasks_RunWorkerCompleted); + // + // txtRegisterAppUsername + // + this.txtRegisterAppUsername.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtRegisterAppUsername.Enabled = false; + this.txtRegisterAppUsername.Location = new System.Drawing.Point(92, 19); + this.txtRegisterAppUsername.Name = "txtRegisterAppUsername"; + this.txtRegisterAppUsername.Size = new System.Drawing.Size(278, 20); + this.txtRegisterAppUsername.TabIndex = 0; + // + // txtRegisterAppEmailAddress + // + this.txtRegisterAppEmailAddress.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtRegisterAppEmailAddress.Enabled = false; + this.txtRegisterAppEmailAddress.Location = new System.Drawing.Point(92, 45); + this.txtRegisterAppEmailAddress.Name = "txtRegisterAppEmailAddress"; + this.txtRegisterAppEmailAddress.Size = new System.Drawing.Size(278, 20); + this.txtRegisterAppEmailAddress.TabIndex = 1; + // + // txtRegisterAppPassword + // + this.txtRegisterAppPassword.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.txtRegisterAppPassword.Enabled = false; + this.txtRegisterAppPassword.Location = new System.Drawing.Point(92, 71); + this.txtRegisterAppPassword.Name = "txtRegisterAppPassword"; + this.txtRegisterAppPassword.Size = new System.Drawing.Size(278, 20); + this.txtRegisterAppPassword.TabIndex = 2; + // + // btnRegisterApp + // + this.btnRegisterApp.Enabled = false; + this.btnRegisterApp.Location = new System.Drawing.Point(92, 97); + this.btnRegisterApp.Name = "btnRegisterApp"; + this.btnRegisterApp.Size = new System.Drawing.Size(80, 23); + this.btnRegisterApp.TabIndex = 3; + this.btnRegisterApp.Text = "Register App"; + this.btnRegisterApp.UseVisualStyleBackColor = true; + // + // lblRegisterAppUsername + // + this.lblRegisterAppUsername.AutoSize = true; + this.lblRegisterAppUsername.Location = new System.Drawing.Point(6, 22); + this.lblRegisterAppUsername.Name = "lblRegisterAppUsername"; + this.lblRegisterAppUsername.Size = new System.Drawing.Size(61, 13); + this.lblRegisterAppUsername.TabIndex = 4; + this.lblRegisterAppUsername.Text = "Username: "; + // + // lblRegisterAppEmailAddress + // + this.lblRegisterAppEmailAddress.AutoSize = true; + this.lblRegisterAppEmailAddress.Location = new System.Drawing.Point(6, 48); + this.lblRegisterAppEmailAddress.Name = "lblRegisterAppEmailAddress"; + this.lblRegisterAppEmailAddress.Size = new System.Drawing.Size(79, 13); + this.lblRegisterAppEmailAddress.TabIndex = 5; + this.lblRegisterAppEmailAddress.Text = "Email Address: "; + // + // lblRegisterAppPassword + // + this.lblRegisterAppPassword.AutoSize = true; + this.lblRegisterAppPassword.Location = new System.Drawing.Point(6, 74); + this.lblRegisterAppPassword.Name = "lblRegisterAppPassword"; + this.lblRegisterAppPassword.Size = new System.Drawing.Size(59, 13); + this.lblRegisterAppPassword.TabIndex = 6; + this.lblRegisterAppPassword.Text = "Password: "; + // + // lblRegistrationStatus + // + this.lblRegistrationStatus.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.lblRegistrationStatus.Location = new System.Drawing.Point(55, 22); + this.lblRegistrationStatus.Name = "lblRegistrationStatus"; + this.lblRegistrationStatus.Size = new System.Drawing.Size(315, 13); + this.lblRegistrationStatus.TabIndex = 0; + this.lblRegistrationStatus.Text = "unregistered"; + // + // lblRegistrationKey + // + this.lblRegistrationKey.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.lblRegistrationKey.Location = new System.Drawing.Point(55, 48); + this.lblRegistrationKey.Name = "lblRegistrationKey"; + this.lblRegistrationKey.Size = new System.Drawing.Size(315, 13); + this.lblRegistrationKey.TabIndex = 1; + // + // lblRegistrationStatusLabel + // + this.lblRegistrationStatusLabel.AutoSize = true; + this.lblRegistrationStatusLabel.Location = new System.Drawing.Point(6, 22); + this.lblRegistrationStatusLabel.Name = "lblRegistrationStatusLabel"; + this.lblRegistrationStatusLabel.Size = new System.Drawing.Size(43, 13); + this.lblRegistrationStatusLabel.TabIndex = 2; + this.lblRegistrationStatusLabel.Text = "Status: "; + // + // lblRegistrationKeyLabel + // + this.lblRegistrationKeyLabel.AutoSize = true; + this.lblRegistrationKeyLabel.Location = new System.Drawing.Point(6, 48); + this.lblRegistrationKeyLabel.Name = "lblRegistrationKeyLabel"; + this.lblRegistrationKeyLabel.Size = new System.Drawing.Size(31, 13); + this.lblRegistrationKeyLabel.TabIndex = 3; + this.lblRegistrationKeyLabel.Text = "Key: "; + // + // gbRegistration + // + this.gbRegistration.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.gbRegistration.Controls.Add(this.lblRegistrationKey); + this.gbRegistration.Controls.Add(this.lblRegistrationKeyLabel); + this.gbRegistration.Controls.Add(this.lblRegistrationStatus); + this.gbRegistration.Controls.Add(this.lblRegistrationStatusLabel); + this.gbRegistration.Location = new System.Drawing.Point(385, 3); + this.gbRegistration.Name = "gbRegistration"; + this.gbRegistration.Size = new System.Drawing.Size(376, 126); + this.gbRegistration.TabIndex = 1; + this.gbRegistration.TabStop = false; + this.gbRegistration.Text = "Registration"; + // + // tlpRegistration + // + this.tlpRegistration.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left) + | System.Windows.Forms.AnchorStyles.Right))); + this.tlpRegistration.ColumnCount = 2; + this.tlpRegistration.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tlpRegistration.ColumnStyles.Add(new System.Windows.Forms.ColumnStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tlpRegistration.Controls.Add(this.gbRegistration, 1, 0); + this.tlpRegistration.Controls.Add(this.gbRegisterApp, 0, 0); + this.tlpRegistration.Location = new System.Drawing.Point(6, 6); + this.tlpRegistration.Name = "tlpRegistration"; + this.tlpRegistration.RowCount = 1; + this.tlpRegistration.RowStyles.Add(new System.Windows.Forms.RowStyle(System.Windows.Forms.SizeType.Percent, 50F)); + this.tlpRegistration.Size = new System.Drawing.Size(764, 132); + this.tlpRegistration.TabIndex = 2; + // + // FrmFiles2Folders2Files + // + this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); + this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; + this.ClientSize = new System.Drawing.Size(784, 381); + this.Controls.Add(this.tcMain); + this.Controls.Add(this.ssMain); + this.Controls.Add(this.tsMain); + this.Controls.Add(this.msMain); + this.MainMenuStrip = this.msMain; + this.Name = "FrmFiles2Folders2Files"; + this.Text = "Files 2 Folders 2 Files"; + this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Files2Folders2Files_FormClosing); + this.Shown += new System.EventHandler(this.Form_Shown); + this.msMain.ResumeLayout(false); + this.msMain.PerformLayout(); + this.tsMain.ResumeLayout(false); + this.tsMain.PerformLayout(); + this.ssMain.ResumeLayout(false); + this.ssMain.PerformLayout(); + this.tcMain.ResumeLayout(false); + this.tabLog.ResumeLayout(false); + this.tabOptions.ResumeLayout(false); + this.gbOptionsInfo.ResumeLayout(false); + this.gbOptionsInfo.PerformLayout(); + this.tlpOptions.ResumeLayout(false); + this.gbOutputOptions.ResumeLayout(false); + this.gbOutputOptions.PerformLayout(); + this.gbDirectoryPath.ResumeLayout(false); + this.gbDirectoryPath.PerformLayout(); + this.tabHelp.ResumeLayout(false); + this.tabLicense.ResumeLayout(false); + this.tabDonations.ResumeLayout(false); + this.tabRegistration.ResumeLayout(false); + this.gbRegisterApp.ResumeLayout(false); + this.gbRegisterApp.PerformLayout(); + this.gbRegistration.ResumeLayout(false); + this.gbRegistration.PerformLayout(); + this.tlpRegistration.ResumeLayout(false); + this.ResumeLayout(false); + this.PerformLayout(); + + } + + #endregion + + private System.Windows.Forms.MenuStrip msMain; + private System.Windows.Forms.ToolStripMenuItem tsmiFiles2Folders2Files; + private System.Windows.Forms.ToolStripMenuItem tsmiFiles2Folders; + private System.Windows.Forms.ToolStripMenuItem tsmiFolders2Files; + private System.Windows.Forms.ToolStripMenuItem tsmiExit; + private System.Windows.Forms.ToolStrip tsMain; + private System.Windows.Forms.ToolStripButton tsbFiles2Folders; + private System.Windows.Forms.ToolStripButton tsbFolders2Files; + private System.Windows.Forms.StatusStrip ssMain; + private System.Windows.Forms.ToolStripStatusLabel tsslSnap; + private System.Windows.Forms.ToolStripStatusLabel tsslStatus; + private System.Windows.Forms.ToolStripDropDownButton tsbCancel; + private System.ComponentModel.BackgroundWorker bgwFiles2Folders; + private System.ComponentModel.BackgroundWorker bgwFolders2Files; + private System.Windows.Forms.TabControl tcMain; + private System.Windows.Forms.TabPage tabLog; + private System.Windows.Forms.TabPage tabOptions; + private System.Windows.Forms.TableLayoutPanel tlpOptions; + private System.Windows.Forms.GroupBox gbDirectoryPath; + private System.Windows.Forms.TextBox txtDirectoryPath; + private System.Windows.Forms.GroupBox gbOutputOptions; + private System.Windows.Forms.CheckBox chkDeleteEmptyFolders; + private System.Windows.Forms.ToolStripProgressBar tspbOverallProgress; + private System.ComponentModel.BackgroundWorker bgwStartupTasks; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator1; + private System.Windows.Forms.ToolStripMenuItem tsmiView; + private System.Windows.Forms.ToolStripMenuItem tsmiLog; + private System.Windows.Forms.ToolStripMenuItem tsmiOptions; + private System.Windows.Forms.ToolStripMenuItem tsmiHelp; + private System.Windows.Forms.ToolStripMenuItem tsmiLicense; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator2; + private System.Windows.Forms.ToolStripButton tsbViewHelp; + private System.Windows.Forms.ToolStripButton tsbViewLicense; + private System.Windows.Forms.TabPage tabHelp; + private System.Windows.Forms.TabPage tabLicense; + private System.Windows.Forms.RichTextBox rtbHelp; + private System.Windows.Forms.RichTextBox rtbLicense; + private System.Windows.Forms.ToolStripMenuItem tsmiToolbar; + private System.Windows.Forms.ToolStripButton tsbViewToolbar; + private System.Windows.Forms.TabPage tabDonations; + private System.Windows.Forms.TabPage tabRegistration; + private System.Windows.Forms.ToolStripMenuItem tsmiDonations; + private System.Windows.Forms.ToolStripMenuItem tsmiRegistration; + private System.Windows.Forms.ToolStripButton tsbViewDonations; + private System.Windows.Forms.ToolStripButton tsbViewRegistration; + private System.Windows.Forms.GroupBox gbOptionsInfo; + private System.Windows.Forms.Label lblOptionsInfo1; + private System.Windows.Forms.RichTextBox rtbDonations; + private Serilog.Sinks.LogEmAll.RichTextBoxLog rtblLog; + private System.Windows.Forms.ToolStripMenuItem loadOptionsToolStripMenuItem; + private System.Windows.Forms.ToolStripMenuItem saveOptionsToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator5; + private System.Windows.Forms.ToolStripMenuItem saveLogToolStripMenuItem; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator6; + private System.Windows.Forms.ToolStripButton tsbLoadOptions; + private System.Windows.Forms.ToolStripButton tsbSaveOptions; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator3; + private System.Windows.Forms.ToolStripButton tsbSaveLog; + private System.Windows.Forms.ToolStripSeparator toolStripSeparator4; + private System.Windows.Forms.GroupBox gbRegisterApp; + private System.Windows.Forms.Label lblRegistrationStatus; + private System.Windows.Forms.Label lblRegisterAppPassword; + private System.Windows.Forms.Label lblRegisterAppEmailAddress; + private System.Windows.Forms.Label lblRegisterAppUsername; + private System.Windows.Forms.Button btnRegisterApp; + private System.Windows.Forms.TextBox txtRegisterAppPassword; + private System.Windows.Forms.TextBox txtRegisterAppEmailAddress; + private System.Windows.Forms.TextBox txtRegisterAppUsername; + private System.Windows.Forms.Label lblRegistrationKeyLabel; + private System.Windows.Forms.Label lblRegistrationStatusLabel; + private System.Windows.Forms.Label lblRegistrationKey; + private System.Windows.Forms.GroupBox gbRegistration; + private System.Windows.Forms.TableLayoutPanel tlpRegistration; + } +} + diff --git a/Files2Folders2Files-GUI/FrmFiles2Folders2Files.cs b/Files2Folders2Files-GUI/FrmFiles2Folders2Files.cs new file mode 100644 index 0000000..b0033c4 --- /dev/null +++ b/Files2Folders2Files-GUI/FrmFiles2Folders2Files.cs @@ -0,0 +1,787 @@ +using Serilog; +using System; +using System.ComponentModel; +using System.IO; +using System.Windows.Forms; + +namespace Files2Folders2Files_GUI +{ + /// + /// FrmFiles2Folders2Files Form Class. + /// + public partial class FrmFiles2Folders2Files : Form + { + #region Constructors + + Files2Folders2Files.Files2Folders2Files f2f2f = new Files2Folders2Files.Files2Folders2Files(); + + /// + /// FrmFiles2Folders2Files-GUI Constructor + /// + public FrmFiles2Folders2Files() + { + // Initialize the form. + InitializeComponent(); + + // Print the version. + f2f2f.PrintVersion(); + + // Load the default options passed from the default options file. + f2f2f.LoadOptionsFromFile(); + + // Load the default options passed from the command line arguments. + f2f2f.LoadOptionsFromCLI(Environment.GetCommandLineArgs()); + + // Add data bindings. + chkDeleteEmptyFolders.DataBindings.Add("Checked", f2f2f, "DeleteEmptyFolders"); + txtDirectoryPath.DataBindings.Add("Text", f2f2f, "DirectoryPath"); + lblRegistrationKey.DataBindings.Add("Text", f2f2f, "RegistrationKey"); + lblRegistrationStatus.DataBindings.Add("Text", f2f2f, "RegistrationStatus"); + txtRegisterAppUsername.DataBindings.Add("Text", f2f2f, "RegisterAppUsername"); + txtRegisterAppEmailAddress.DataBindings.Add("Text", f2f2f, "RegisterAppEmailAddress"); + txtRegisterAppPassword.DataBindings.Add("Text", f2f2f, "RegisterAppPassword"); + + // Hide some tabs. + tcMain.TabPages.Remove(tabHelp); + tcMain.TabPages.Remove(tabLicense); + tcMain.TabPages.Remove(tabDonations); + tcMain.TabPages.Remove(tabRegistration); + + // Update the title. + UpdateTitle(); + + // Load the GUI RichTextBoxes from resources. + rtbHelp.Text = Files2Folders2Files.Properties.Resources.Files2Folders2Files_HELP; + rtbLicense.Text = Files2Folders2Files.Properties.Resources.Files2Folders2Files_LICENSE; + rtbDonations.Text = Files2Folders2Files.Properties.Resources.Files2Folders2Files_DONATIONS; + } + + #endregion + + #region Public Accessors + + /// LogLines + public string[] LogLines + { + get { return rtblLog.Lines; } + set { rtblLog.Lines = value; } + } + + #endregion + + #region Log + + /// + /// Saves the log to a text file. + /// + /// + /// + public bool SaveLogToFile(string strPath = null) + { + try + { + if (strPath != null) + { + f2f2f.PathLogFile = strPath; + } + + // Determine if the user selected a log filename. + if (f2f2f.PathLogFile.Length == 0) + { + // Return a bool value. + return false; + } + else + { + // Print to screen + Log.Information("Saving log file ..."); + + // Create log file directory if it doesn't exist. + if (Directory.Exists(Path.GetDirectoryName(f2f2f.PathLogFile)) == false) Directory.CreateDirectory(Path.GetDirectoryName(f2f2f.PathLogFile)); + + // Save the contents of the log to a text file. + File.WriteAllLines(f2f2f.PathLogFile, LogLines); + + // Print to screen + Log.Information("Log file saved (" + f2f2f.PathLogFile + ")"); + + // Return a bool value. + return true; + } + } + catch (Exception ex) + { + // Print to screen + Log.Error("Saving log file failed"); + Log.Error(ex.Message); + + // Return a bool value. + return false; + } + } + + #endregion + + #region Startup Tasks + + /// + /// Performs the startup tasks. + /// + /// + /// + private void StartupTasks_DoWork(object sender, DoWorkEventArgs e) + { + // Stub + } + + /// + /// StartupTasks Progress Changed. + /// + /// + /// + private void StartupTasks_ProgressChanged(object sender, ProgressChangedEventArgs e) + { + // Stub + } + + /// + /// StartupTasks RunWorker Completed. + /// + /// + /// + private void StartupTasks_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) + { + // Print to screen + Log.Information("Ready"); + } + + #endregion + + #region GUI Methods + + /// + /// Sets the application title. + /// + /// + private void UpdateTitle(string strTitle = "") + { + if (this.InvokeRequired && !this.IsDisposed) + { + Invoke(new MethodInvoker(delegate () + { + // Update the application title. + this.Text = f2f2f.AppName + " v" + f2f2f.AppVersion + strTitle; + })); + } + else if (!this.IsDisposed) + { + // Update the application title. + this.Text = f2f2f.AppName + " v" + f2f2f.AppVersion + strTitle; + } + } + + /// + /// Updates the status message label. + /// + /// + private void UpdateStatusMessageLabel(string strMsg) + { + if (this.InvokeRequired && !this.IsDisposed) + { + Invoke(new MethodInvoker(delegate () + { + // Update the progress status message label. + this.tsslStatus.Text = strMsg; + })); + } + else if (!this.IsDisposed) + { + // Update the progress status message label. + this.tsslStatus.Text = strMsg; + } + } + + private delegate void DisableAllButtonsDelegate(); + + /// + /// Disables all the buttons and textboxes and checkboxes. + /// + private void DisableAllButtons() + { + // Disable the toolstrip buttons. + tsbFiles2Folders.Enabled = false; + tsbFolders2Files.Enabled = false; + + // Disable the menustrip buttons. + tsmiFiles2Folders.Enabled = false; + tsmiFolders2Files.Enabled = false; + + // Disable the textboxes. + txtDirectoryPath.Enabled = false; + + // Disable the checkboxes. + chkDeleteEmptyFolders.Enabled = false; + } + + private delegate void EnableAllButtonsDelegate(); + + /// + /// Enables all the buttons and textboxes and checkboxes. + /// + private void EnableAllButtons() + { + // Enable the toolstrip buttons. + tsbFiles2Folders.Enabled = true; + tsbFolders2Files.Enabled = true; + + // Disable the menustrip buttons. + tsmiFiles2Folders.Enabled = true; + tsmiFolders2Files.Enabled = true; + + // Enable the textboxes. + txtDirectoryPath.Enabled = true; + + // Enable the checkboxes. + chkDeleteEmptyFolders.Enabled = true; + } + + #endregion + + #region GUI Events + + /// + /// Builds files to folders. + /// + /// + /// + private void Files2Folders_Click(object sender, EventArgs e) + { + // Select the Log tab. + if (tcMain.TabPages.Contains(tabLog)) { tcMain.SelectTab(tabLog); } + + // Disable all buttons. + DisableAllButtons(); + + // Enable the Cancel Button. + tsbCancel.Enabled = true; + + // Update the status message label. + UpdateStatusMessageLabel("Building Files 2 Folders ..."); + + // Build Files 2 Folders. + bgwFiles2Folders.RunWorkerAsync(); + } + + /// + /// Builds folders to files. + /// + /// + /// + private void Folders2Files_Click(object sender, EventArgs e) + { + // Select the Log tab. + if (tcMain.TabPages.Contains(tabLog)) { tcMain.SelectTab(tabLog); } + + // Disable all buttons. + DisableAllButtons(); + + // Enable the Cancel Button. + tsbCancel.Enabled = true; + + // Update the status message label. + UpdateStatusMessageLabel("Building Folders 2 Files ..."); + + // Build Folders 2 Files. + bgwFolders2Files.RunWorkerAsync(); + } + + /// + /// Updates the directory path. + /// + /// + /// + private void DirectoryPath_Click(object sender, EventArgs e) + { + // Disable all buttons. + DisableAllButtons(); + + if (txtDirectoryPath.Text == "") { txtDirectoryPath.Text = "."; } + + // Create and initialize a FolderBrowserDialog for the directory path. + FolderBrowserDialog fbdSelectDir = new FolderBrowserDialog + { + ShowNewFolderButton = true, + Description = "Please enter a directory path: ", + SelectedPath = Path.GetFullPath(Path.Combine(txtDirectoryPath.Text)) + }; + + // Determine if the user selected OK from the FolderBrowserDialog. + if (fbdSelectDir.ShowDialog() == DialogResult.OK) + { + // Set both variables for compatibility for Windows .NET and Mono. + this.f2f2f.DirectoryPath = fbdSelectDir.SelectedPath; + txtDirectoryPath.Text = fbdSelectDir.SelectedPath; + } + + // Enable all buttons. + EnableAllButtons(); + } + + /// + /// Loads an options file. + /// + /// + /// + private void LoadOptions_Click(object sender, EventArgs e) + { + // Disable all buttons. + DisableAllButtons(); + + // Create and initialize an OpenFileDialog for the options file. + OpenFileDialog ofdOptions = new OpenFileDialog + { + DefaultExt = "*.xml", + Filter = "XML Files|*.xml", + Title = "Please enter a path to the options file: ", + InitialDirectory = Path.Combine(Application.StartupPath, "Options") + }; + + // Determine if the user selected a file name from the OpenFileDialog. + if (ofdOptions.ShowDialog() == DialogResult.OK && ofdOptions.FileName.Length > 0) + { + // Set the options file path. + f2f2f.PathOptionsFile = ofdOptions.FileName; + + // Select the Log tab. + if (tcMain.TabPages.Contains(tabLog)) { tcMain.SelectTab(tabLog); } + + // Load the options. + f2f2f.LoadOptionsFromFile(); + + // Print to screen + Log.Information("Ready"); + } + + // Dispose of the OpenFileDialog. + ofdOptions.Dispose(); + + // Enable all buttons. + EnableAllButtons(); + } + + /// + /// Saves an options file. + /// + /// + /// + private void SaveOptions_Click(object sender, EventArgs e) + { + // Disable all buttons. + DisableAllButtons(); + + // Create and initialize a SaveFileDialog for the options file. + SaveFileDialog sfdOptions = new SaveFileDialog + { + DefaultExt = "*.xml", + Filter = "XML Files|*.xml", + FileName = "Files2Folders2Files-Options.xml", + Title = "Please enter a path to the options file: ", + InitialDirectory = Path.Combine(Application.StartupPath, "Options") + }; + + // Determine if the user selected a file name from the SaveFileDialog. + if (sfdOptions.ShowDialog() == DialogResult.OK && sfdOptions.FileName.Length > 0) + { + // Set the options file path. + f2f2f.PathOptionsFile = sfdOptions.FileName; + + // Select the Log tab. + if (tcMain.TabPages.Contains(tabLog)) { tcMain.SelectTab(tabLog); } + + // Save the options. + f2f2f.SaveOptionsToFile(); + + // Print to screen + Log.Information("Ready"); + } + + // Dispose of the SaveFileDialog. + sfdOptions.Dispose(); + + // Enable all buttons. + EnableAllButtons(); + } + + /// + /// Saves the log to a text file. + /// + /// + /// + private void SaveLog_Click(object sender, EventArgs e) + { + // Disable all buttons. + DisableAllButtons(); + + // Create and initialize a SaveFileDialog for the log file. + SaveFileDialog sfdLog = new SaveFileDialog + { + DefaultExt = "*.txt", + Filter = "TXT Files|*.txt", + FileName = "Files2Folders2Files-Log-" + DateTime.Now.ToString("yyyyMMdd_HHmmss") + ".txt", + Title = "Please enter a path to the log file: ", + InitialDirectory = Path.Combine(Application.StartupPath, "Logs") + }; + + // Determine if the user selected a log filename. + if (sfdLog.ShowDialog() == DialogResult.OK && sfdLog.FileName.Length > 0) + { + // Set the log file path. + f2f2f.PathLogFile = sfdLog.FileName; + + // Select the Log tab. + if (tcMain.TabPages.Contains(tabLog)) { tcMain.SelectTab(tabLog); } + + // Save the log. + SaveLogToFile(f2f2f.PathLogFile); + + // Print to screen + Log.Information("Ready"); + } + + // Dispose of the SaveFileDialog. + sfdLog.Dispose(); + + // Enable all buttons. + EnableAllButtons(); + } + + /// + /// Toggles the visibility of the log. + /// + private void ViewLog_Click(object sender, EventArgs e) + { + if (tsmiLog.Checked) + { + tsmiLog.Checked = false; + tsmiLog.CheckState = CheckState.Unchecked; + tcMain.TabPages.Remove(tabLog); + } + else + { + tsmiLog.Checked = true; + tsmiLog.CheckState = CheckState.Checked; + tcMain.TabPages.Add(tabLog); + tcMain.SelectTab(tabLog); + } + } + + /// + /// Toggles the visibility of the options. + /// + private void ViewOptions_Click(object sender, EventArgs e) + { + if (tsmiOptions.Checked) + { + tsmiOptions.Checked = false; + tsmiOptions.CheckState = CheckState.Unchecked; + tcMain.TabPages.Remove(tabOptions); + } + else + { + tsmiOptions.Checked = true; + tsmiOptions.CheckState = CheckState.Checked; + tcMain.TabPages.Add(tabOptions); + tcMain.SelectTab(tabOptions); + } + } + + /// + /// Toggles the visibility of the help. + /// + private void ViewHelp_Click(object sender, EventArgs e) + { + if (tsmiHelp.Checked) + { + tsmiHelp.Checked = false; + tsmiHelp.CheckState = CheckState.Unchecked; + tcMain.TabPages.Remove(tabHelp); + } + else + { + tsmiHelp.Checked = true; + tsmiHelp.CheckState = CheckState.Checked; + tcMain.TabPages.Add(tabHelp); + tcMain.SelectTab(tabHelp); + } + } + + /// + /// Toggles the visibility of the license. + /// + private void ViewLicense_Click(object sender, EventArgs e) + { + if (tsmiLicense.Checked) + { + tsmiLicense.Checked = false; + tsmiLicense.CheckState = CheckState.Unchecked; + tcMain.TabPages.Remove(tabLicense); + } + else + { + tsmiLicense.Checked = true; + tsmiLicense.CheckState = CheckState.Checked; + tcMain.TabPages.Add(tabLicense); + tcMain.SelectTab(tabLicense); + } + } + + /// + /// Toggles the visibility of the registration. + /// + private void ViewRegistration_Click(object sender, EventArgs e) + { + if (tsmiRegistration.Checked) + { + tsmiRegistration.Checked = false; + tsmiRegistration.CheckState = CheckState.Unchecked; + tcMain.TabPages.Remove(tabRegistration); + } + else + { + tsmiRegistration.Checked = true; + tsmiRegistration.CheckState = CheckState.Checked; + tcMain.TabPages.Add(tabRegistration); + tcMain.SelectTab(tabRegistration); + } + } + + /// + /// Toggles the visibility of the Donations. + /// + private void ViewDonations_Click(object sender, EventArgs e) + { + if (tsmiDonations.Checked) + { + tsmiDonations.Checked = false; + tsmiDonations.CheckState = CheckState.Unchecked; + tcMain.TabPages.Remove(tabDonations); + } + else + { + tsmiDonations.Checked = true; + tsmiDonations.CheckState = CheckState.Checked; + tcMain.TabPages.Add(tabDonations); + tcMain.SelectTab(tabDonations); + } + } + + /// + /// Toggles the visibility of the toolbar. + /// + private void ViewToolbar_Click(object sender, EventArgs e) + { + if (tsMain.Visible) + { + tsMain.Visible = false; + tsmiToolbar.Checked = false; + tsmiToolbar.CheckState = CheckState.Unchecked; + } + else + { + tsMain.Visible = true; + tsmiToolbar.Checked = true; + tsmiToolbar.CheckState = CheckState.Checked; + } + } + + /// + /// Cancels the build. + /// + /// + /// + private void Cancel_Click(object sender, EventArgs e) + { + if (bgwFiles2Folders.IsBusy == true || bgwFolders2Files.IsBusy == true) + { + // Print to screen + Log.Information("Info: Cancellation pending after current operation ..."); + + // Disable the cancel button. + tsbCancel.Enabled = false; + + // Cancel the asynchronous operation. + if (bgwFiles2Folders.IsBusy == true) { bgwFiles2Folders.CancelAsync(); } + if (bgwFolders2Files.IsBusy == true) { bgwFolders2Files.CancelAsync(); } + + // Update the status message label. + UpdateStatusMessageLabel("Cancellation Pending ..."); + } + } + + /// + /// Exits the WinForms app. + /// + /// + /// + private void Exit_Click(object sender, EventArgs e) + { + Application.Exit(); + } + + /// + /// After the form is shown, run the startup tasks. + /// + /// + /// + private void Form_Shown(object sender, EventArgs e) + { + // Perform the application startup tasks. + bgwStartupTasks.RunWorkerAsync(); + } + + /// + /// Checks things to make sure it is safe, before closing the form. + /// + /// + /// + private void Files2Folders2Files_FormClosing(object sender, FormClosingEventArgs e) + { + if (bgwFiles2Folders.IsBusy == true || bgwFolders2Files.IsBusy == true) + { + if (MessageBox.Show("The builder is currently running. Exiting now may cause corrupt or incomplete files! Are you sure you want to exit now?", "Confirm Exit", MessageBoxButtons.OKCancel, MessageBoxIcon.Question) != DialogResult.OK) + { + e.Cancel = true; + } + } + } + + #endregion + + #region Builders + + /// + /// Moves all pf the files from a single directory into folders of matching names. + /// + /// + /// + private void Files2Folders_DoWork(object sender, DoWorkEventArgs e) + { + // Run Files2Folders builder. + f2f2f.BuildFiles2Folders(sender, e); + } + + /// + /// Changes the progress of the Files 2 Folders background worker. + /// + /// + /// + private void Files2Folders_ProgressChanged(object sender, ProgressChangedEventArgs e) + { + // Update the overall progress bar. + tspbOverallProgress.Value = e.ProgressPercentage; + } + + /// + /// Completes the Files 2 Folders background worker. + /// + /// + /// + private void Files2Folders_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) + { + if (e.Cancelled) + { + // Print to screen + Log.Information("Info: Files 2 Folders cancelled"); + } + else if (e.Error != null) + { + // Print to screen + Log.Information("Error: Files 2 Folders failed"); + Log.Information("Error: " + e.Error.Message); + } + else + { + // + } + + // Reset the overall progress bar. + tspbOverallProgress.Value = 0; + + // Disable the cancel button. + tsbCancel.Enabled = false; + + // Print to screen + Log.Information("Info: Ready"); + + // Update the status message label. + UpdateStatusMessageLabel("Ready"); + + // Enable all buttons. + Invoke(new EnableAllButtonsDelegate(EnableAllButtons)); + } + + /// + /// Moves all of the files from all of the folders into a single directory. + /// Optionally deletes all of the empty folders. + /// + /// + /// + private void Folders2Files_DoWork(object sender, DoWorkEventArgs e) + { + // Run Files2Folders builder. + f2f2f.BuildFolders2Files(sender, e); + } + + /// + /// Changes the progress of the Folders 2 Files background worker. + /// + /// + /// + private void Folders2Files_ProgressChanged(object sender, ProgressChangedEventArgs e) + { + // Update the overall progress bar. + tspbOverallProgress.Value = e.ProgressPercentage; + } + + /// + /// Completes the Folders 2 Files background worker. + /// + /// + /// + private void Folders2Files_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) + { + if (e.Cancelled) + { + // Print to screen + Log.Information("Info: Folders 2 Files cancelled"); + } + else if (e.Error != null) + { + // Print to screen + Log.Information("Error: Folders 2 Files failed"); + Log.Information("Error: " + e.Error.Message); + } + else + { + // + } + + // Reset the overall progress bar. + tspbOverallProgress.Value = 0; + + // Disable the cancel button. + tsbCancel.Enabled = false; + + // Update the status message label. + UpdateStatusMessageLabel("Ready"); + + // Print to screen + Log.Information("Info: Ready"); + + // Enable all buttons. + Invoke(new EnableAllButtonsDelegate(EnableAllButtons)); + } + + #endregion + } +} diff --git a/Files2Folders2Files-GUI/FrmFiles2Folders2Files.resx b/Files2Folders2Files-GUI/FrmFiles2Folders2Files.resx new file mode 100644 index 0000000..5c07246 --- /dev/null +++ b/Files2Folders2Files-GUI/FrmFiles2Folders2Files.resx @@ -0,0 +1,307 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + 17, 17 + + + 112, 17 + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG + YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 + 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw + bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc + VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 + c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 + Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo + mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ + kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D + TgDQASA1MVpwzwAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG + YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 + 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw + bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc + VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 + c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 + Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo + mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ + kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D + TgDQASA1MVpwzwAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG + YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 + 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw + bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc + VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 + c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 + Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo + mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ + kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D + TgDQASA1MVpwzwAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG + YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 + 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw + bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc + VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 + c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 + Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo + mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ + kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D + TgDQASA1MVpwzwAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG + YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 + 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw + bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc + VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 + c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 + Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo + mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ + kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D + TgDQASA1MVpwzwAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG + YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 + 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw + bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc + VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 + c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 + Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo + mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ + kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D + TgDQASA1MVpwzwAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG + YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 + 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw + bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc + VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 + c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 + Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo + mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ + kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D + TgDQASA1MVpwzwAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG + YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 + 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw + bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc + VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 + c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 + Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo + mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ + kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D + TgDQASA1MVpwzwAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG + YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 + 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw + bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc + VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 + c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 + Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo + mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ + kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D + TgDQASA1MVpwzwAAAABJRU5ErkJggg== + + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG + YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 + 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw + bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc + VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 + c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 + Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo + mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ + kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D + TgDQASA1MVpwzwAAAABJRU5ErkJggg== + + + + 200, 17 + + + + iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8 + YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIDSURBVDhPpZLrS5NhGMb3j4SWh0oRQVExD4gonkDpg4hG + YKxG6WBogkMZKgPNCEVJFBGdGETEvgwyO9DJE5syZw3PIlPEE9pgBCLZ5XvdMB8Ew8gXbl54nuf63dd9 + 0OGSnwCahxbPRNPAPMw9Xpg6ZmF46kZZ0xSKzJPIrhpDWsVnpBhGkKx3nAX8Pv7z1zg8OoY/cITdn4fw + bf/C0kYAN3Ma/w3gWfZL5kzTKBxjWyK2DftwI9tyMYCZKXbNHaD91bLYJrDXsYbrWfUKwJrPE9M2M1Oc + VzOOpHI7Jr376Hi9ogHqFIANO0/MmmmbmSmm9a8ze+I4MrNWAdjtoJgWcx+PSzg166yZZ8xM8XvXDix9 + c4jIqFYAjoriBV9AhEPv1mH/sonogha0afbZMMZz+yreTGyhpusHwtNNCsA5U1zS4BLxzJIfg299qO32 + Ir7UJtZfftyATqeT+8o2D8JSjQrAJblrncYL7ZJ2+bfaFnC/1S1NjL3diRat7qrO7wLRP3HjWsojBeCo + mDEo5mNjuweFGvjWg2EBhCbpkW78htSHHwRyNdmgAFzPEee2iFkzayy2OLXzT4gr6UdUnlXrullsxxQ+ + kx0g8BTA3aZlButjSTyjODq/WcQcW/B/Je4OQhLvKQDnzN1mp0nnkvAhR8VuMzNrpm1mpjgkoVwB/v8D + TgDQASA1MVpwzwAAAABJRU5ErkJggg== + + + + 289, 17 + + + 434, 17 + + + 579, 17 + + + 63 + + \ No newline at end of file diff --git a/Files2Folders2Files-GUI/Program.cs b/Files2Folders2Files-GUI/Program.cs new file mode 100644 index 0000000..fc19c41 --- /dev/null +++ b/Files2Folders2Files-GUI/Program.cs @@ -0,0 +1,34 @@ +using Serilog; +using Serilog.Formatting.Display; +using Serilog.Sinks.LogEmAll; +using System; +using System.Windows.Forms; + +namespace Files2Folders2Files_GUI +{ + static class Program + { + /// + /// The main entry point for the application. + /// + [STAThread] + static void Main() + { + ConfigureSerilog(); + Application.EnableVisualStyles(); + Application.SetCompatibleTextRenderingDefault(false); + Application.Run(new FrmFiles2Folders2Files()); + } + + /// + /// Configure the logger. + /// + public static void ConfigureSerilog() + { + Log.Logger = new LoggerConfiguration() + .MinimumLevel.Information() + .WriteToRichTextBox(new MessageTemplateTextFormatter("{Level:u4}: {Message:lj}{NewLine}{Exception}")) + .CreateLogger(); + } + } +} diff --git a/Files2Folders2Files-GUI/Properties/AssemblyInfo.cs b/Files2Folders2Files-GUI/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..eb86d3a --- /dev/null +++ b/Files2Folders2Files-GUI/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Files 2 Folders 2 Files")] +[assembly: AssemblyDescription("The Original Automated Files 2 Folders 2 Files")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Files 2 Folders 2 Files")] +[assembly: AssemblyProduct("Files 2 Folders 2 Files-GUI")] +[assembly: AssemblyCopyright("Copyright (c) 2016-2025 Files 2 Folders 2 Files - All Rights Reserved")] +[assembly: AssemblyTrademark("Files 2 Folders 2 Files - The Original Automated Files 2 Folders 2 Files")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("73055ffb-47a7-4332-bb2b-410aae263774")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("0.1.2")] +[assembly: AssemblyFileVersion("0.1.2")] diff --git a/Files2Folders2Files-GUI/Properties/Resources.Designer.cs b/Files2Folders2Files-GUI/Properties/Resources.Designer.cs new file mode 100644 index 0000000..aa25fec --- /dev/null +++ b/Files2Folders2Files-GUI/Properties/Resources.Designer.cs @@ -0,0 +1,63 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Files2Folders2Files_GUI.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + internal class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Files2Folders2Files_GUI.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + internal static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + } +} diff --git a/Files2Folders2Files-GUI/Properties/Resources.resx b/Files2Folders2Files-GUI/Properties/Resources.resx new file mode 100644 index 0000000..1af7de1 --- /dev/null +++ b/Files2Folders2Files-GUI/Properties/Resources.resx @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + \ No newline at end of file diff --git a/Files2Folders2Files-GUI/packages.config b/Files2Folders2Files-GUI/packages.config new file mode 100644 index 0000000..9978c02 --- /dev/null +++ b/Files2Folders2Files-GUI/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Files2Folders2Files-Installer/Files2Folders2Files-Installer.vdproj b/Files2Folders2Files-Installer/Files2Folders2Files-Installer.vdproj new file mode 100644 index 0000000..983b6c6 --- /dev/null +++ b/Files2Folders2Files-Installer/Files2Folders2Files-Installer.vdproj @@ -0,0 +1,1849 @@ +"DeployProject" +{ +"VSVersion" = "3:800" +"ProjectType" = "8:{978C614F-708E-4E1A-B201-565925725DBA}" +"IsWebType" = "8:FALSE" +"ProjectName" = "8:Files2Folders2Files-Installer" +"LanguageId" = "3:1033" +"CodePage" = "3:1252" +"UILanguageId" = "3:1033" +"SccProjectName" = "8:" +"SccLocalPath" = "8:" +"SccAuxPath" = "8:" +"SccProvider" = "8:" + "Hierarchy" + { + "Entry" + { + "MsmKey" = "8:_0E433C61FD47478DAA7665A28209CB35" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_0FA488B20BCB401CA4C83DFB55D58DC5" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_13EA72EA8F4B4FBF816EE197152D7851" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_25E9C0753BCB4E3483F7E78BEBC6BB6D" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_26F87EA4907945B7B9BED8AB6CC0AEFF" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_2791255712804530BA3B3332813A2BC1" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_2B0B9C4C4E73496DBC488361DB1AF3EE" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_4198F4BDA4184E48BE91FF946A3C80FE" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_45CB42835F354F0E943A94AB6D1A4E4F" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_4680BB07C200400B84D30B8FF3C155A7" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_4A2AECF62C95CEEDD03CBD8CE282C9E8" + "OwnerKey" = "8:_2791255712804530BA3B3332813A2BC1" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_4FC8BF26D6A9437EB0255E92E3574B92" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_52058BAA5B784D0AB6551123765DDFA7" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_5F4A947BBCB34574BB8C31295D57E469" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_63CDC9A0F7EA4E3F84F030AB84F0DB87" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_6E14913BC6294C638CDF6B8F2A46ABCF" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_6E4C9E941527075887D0B3A3EEEA8244" + "OwnerKey" = "8:_72D55CE61DBB6A03240BE31F428C2052" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_6E4C9E941527075887D0B3A3EEEA8244" + "OwnerKey" = "8:_ABF1DDF0E8174C528D9A17ABC32D4546" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_6E4C9E941527075887D0B3A3EEEA8244" + "OwnerKey" = "8:_4A2AECF62C95CEEDD03CBD8CE282C9E8" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_6E4C9E941527075887D0B3A3EEEA8244" + "OwnerKey" = "8:_2791255712804530BA3B3332813A2BC1" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_6E4C9E941527075887D0B3A3EEEA8244" + "OwnerKey" = "8:_D3B61476772873181E355D89E702F154" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_72D55CE61DBB6A03240BE31F428C2052" + "OwnerKey" = "8:_2791255712804530BA3B3332813A2BC1" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_72D55CE61DBB6A03240BE31F428C2052" + "OwnerKey" = "8:_ABF1DDF0E8174C528D9A17ABC32D4546" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_73D5F79150AF49F7959A732C6536686C" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_77E2C5E130274AD9ACB535A9DB51A112" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_9365E36A2A8F496A9C5EDA26EF4BC308" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_ABF1DDF0E8174C528D9A17ABC32D4546" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_BE56E0B7A03D4F178F30051AAE72AFDA" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_D3B61476772873181E355D89E702F154" + "OwnerKey" = "8:_72D55CE61DBB6A03240BE31F428C2052" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_D3B61476772873181E355D89E702F154" + "OwnerKey" = "8:_ABF1DDF0E8174C528D9A17ABC32D4546" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_D3B61476772873181E355D89E702F154" + "OwnerKey" = "8:_2791255712804530BA3B3332813A2BC1" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_E549B7BC52F64B2BBD0ACEF46D512A8E" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_E95D36F216414564BD10E861B1A767F0" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_F09A3AE9ED8A42DD8690C402D13225E9" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_F981EA64DE0C49DA880F3EA0E0C2A39F" + "OwnerKey" = "8:_UNDEFINED" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_2791255712804530BA3B3332813A2BC1" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_ABF1DDF0E8174C528D9A17ABC32D4546" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_4A2AECF62C95CEEDD03CBD8CE282C9E8" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_72D55CE61DBB6A03240BE31F428C2052" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_D3B61476772873181E355D89E702F154" + "MsmSig" = "8:_UNDEFINED" + } + "Entry" + { + "MsmKey" = "8:_UNDEFINED" + "OwnerKey" = "8:_6E4C9E941527075887D0B3A3EEEA8244" + "MsmSig" = "8:_UNDEFINED" + } + } + "Configurations" + { + "Debug" + { + "DisplayName" = "8:Debug" + "IsDebugOnly" = "11:TRUE" + "IsReleaseOnly" = "11:FALSE" + "OutputFilename" = "8:bin\\Debug\\Files2Folders2Files-Installer.msi" + "PackageFilesAs" = "3:2" + "PackageFileSize" = "3:-2147483648" + "CabType" = "3:1" + "Compression" = "3:2" + "SignOutput" = "11:FALSE" + "CertificateFile" = "8:" + "PrivateKeyFile" = "8:" + "TimeStampServer" = "8:" + "InstallerBootstrapper" = "3:2" + "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}" + { + "Enabled" = "11:TRUE" + "PromptEnabled" = "11:TRUE" + "PrerequisitesLocation" = "2:1" + "Url" = "8:" + "ComponentsUrl" = "8:" + "Items" + { + "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:.NETFramework,Version=v4.8" + { + "Name" = "8:Microsoft .NET Framework 4.8 (x86 and x64)" + "ProductCode" = "8:.NETFramework,Version=v4.8" + } + } + } + } + "Release" + { + "DisplayName" = "8:Release" + "IsDebugOnly" = "11:FALSE" + "IsReleaseOnly" = "11:TRUE" + "OutputFilename" = "8:bin\\Release\\Files2Folders2Files-Installer.msi" + "PackageFilesAs" = "3:2" + "PackageFileSize" = "3:-2147483648" + "CabType" = "3:1" + "Compression" = "3:2" + "SignOutput" = "11:FALSE" + "CertificateFile" = "8:" + "PrivateKeyFile" = "8:" + "TimeStampServer" = "8:" + "InstallerBootstrapper" = "3:2" + "BootstrapperCfg:{63ACBE69-63AA-4F98-B2B6-99F9E24495F2}" + { + "Enabled" = "11:TRUE" + "PromptEnabled" = "11:TRUE" + "PrerequisitesLocation" = "2:1" + "Url" = "8:" + "ComponentsUrl" = "8:" + "Items" + { + "{EDC2488A-8267-493A-A98E-7D9C3B36CDF3}:.NETFramework,Version=v4.8" + { + "Name" = "8:Microsoft .NET Framework 4.8 (x86 and x64)" + "ProductCode" = "8:.NETFramework,Version=v4.8" + } + } + } + } + } + "Deployable" + { + "CustomAction" + { + } + "DefaultFeature" + { + "Name" = "8:DefaultFeature" + "Title" = "8:" + "Description" = "8:" + } + "ExternalPersistence" + { + "LaunchCondition" + { + "{A06ECF26-33A3-4562-8140-9B0E340D4F24}:_E39EA51396594E8E876B543CECE86527" + { + "Name" = "8:.NET Framework" + "Message" = "8:[VSDNETMSG]" + "FrameworkVersion" = "8:.NETFramework,Version=v4.8" + "AllowLaterVersions" = "11:FALSE" + "InstallUrl" = "8:http://go.microsoft.com/fwlink/?LinkId=863262" + } + } + } + "File" + { + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_0E433C61FD47478DAA7665A28209CB35" + { + "SourcePath" = "8:..\\Files2Folders2Files-CLI\\Resources\\Batches\\Files2Folders2Files-Print-Help-CMD.bat" + "TargetName" = "8:Files2Folders2Files-Print-Help-CMD.bat" + "Tag" = "8:" + "Folder" = "8:_9F7240506FED40C782E4DDA901016046" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_0FA488B20BCB401CA4C83DFB55D58DC5" + { + "SourcePath" = "8:..\\Files2Folders2Files\\Resources\\Logs\\put your logs in this directory.txt" + "TargetName" = "8:put your logs in this directory.txt" + "Tag" = "8:" + "Folder" = "8:_31B678E6D7D94776BD0EE538E9BA6EC7" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_13EA72EA8F4B4FBF816EE197152D7851" + { + "SourcePath" = "8:..\\Files2Folders2Files-CLI\\Resources\\Batches\\put your batch files in this directory.txt" + "TargetName" = "8:put your batch files in this directory.txt" + "Tag" = "8:" + "Folder" = "8:_9F7240506FED40C782E4DDA901016046" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_25E9C0753BCB4E3483F7E78BEBC6BB6D" + { + "SourcePath" = "8:..\\Files2Folders2Files-CLI\\Resources\\BASHes\\Files2Folders2Files-Files2Folders.sh" + "TargetName" = "8:Files2Folders2Files-Files2Folders.sh" + "Tag" = "8:" + "Folder" = "8:_3090D44E77CA4B20B5FC4E1B738CC81C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_26F87EA4907945B7B9BED8AB6CC0AEFF" + { + "SourcePath" = "8:..\\Files2Folders2Files-CLI\\Resources\\BASHes\\Files2Folders2Files-Print-License.sh" + "TargetName" = "8:Files2Folders2Files-Print-License.sh" + "Tag" = "8:" + "Folder" = "8:_3090D44E77CA4B20B5FC4E1B738CC81C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_2B0B9C4C4E73496DBC488361DB1AF3EE" + { + "SourcePath" = "8:..\\Files2Folders2Files\\Resources\\Docs\\Files2Folders2Files-HELP-CMD.txt" + "TargetName" = "8:Files2Folders2Files-HELP-CMD.txt" + "Tag" = "8:" + "Folder" = "8:_C1F0655C1A274B14ABD70D0E85403469" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_4198F4BDA4184E48BE91FF946A3C80FE" + { + "SourcePath" = "8:..\\Files2Folders2Files-CLI\\Resources\\Batches\\Files2Folders2Files-Folders2Files.bat" + "TargetName" = "8:Files2Folders2Files-Folders2Files.bat" + "Tag" = "8:" + "Folder" = "8:_9F7240506FED40C782E4DDA901016046" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_45CB42835F354F0E943A94AB6D1A4E4F" + { + "SourcePath" = "8:..\\Files2Folders2Files-CLI\\Resources\\Batches\\Files2Folders2Files-Print-License.bat" + "TargetName" = "8:Files2Folders2Files-Print-License.bat" + "Tag" = "8:" + "Folder" = "8:_9F7240506FED40C782E4DDA901016046" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_4680BB07C200400B84D30B8FF3C155A7" + { + "SourcePath" = "8:..\\Files2Folders2Files\\Resources\\Docs\\Files2Folders2Files-DONATIONS.txt" + "TargetName" = "8:Files2Folders2Files-DONATIONS.txt" + "Tag" = "8:" + "Folder" = "8:_C1F0655C1A274B14ABD70D0E85403469" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_4A2AECF62C95CEEDD03CBD8CE282C9E8" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:Serilog.Sinks.Console, Version=4.1.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_4A2AECF62C95CEEDD03CBD8CE282C9E8" + { + "Name" = "8:Serilog.Sinks.Console.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:Serilog.Sinks.Console.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_5B23BF76C9884279B7C1EF7AC2AA9063" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_4FC8BF26D6A9437EB0255E92E3574B92" + { + "SourcePath" = "8:..\\Files2Folders2Files-CLI\\Resources\\BASHes\\Files2Folders2Files-Folders2Files.sh" + "TargetName" = "8:Files2Folders2Files-Folders2Files.sh" + "Tag" = "8:" + "Folder" = "8:_3090D44E77CA4B20B5FC4E1B738CC81C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_52058BAA5B784D0AB6551123765DDFA7" + { + "SourcePath" = "8:..\\Files2Folders2Files-CLI\\Resources\\BASHes\\Files2Folders2Files-Print-Version.sh" + "TargetName" = "8:Files2Folders2Files-Print-Version.sh" + "Tag" = "8:" + "Folder" = "8:_3090D44E77CA4B20B5FC4E1B738CC81C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_5F4A947BBCB34574BB8C31295D57E469" + { + "SourcePath" = "8:..\\Files2Folders2Files-CLI\\Resources\\Batches\\Files2Folders2Files-Print-Version.bat" + "TargetName" = "8:Files2Folders2Files-Print-Version.bat" + "Tag" = "8:" + "Folder" = "8:_9F7240506FED40C782E4DDA901016046" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_63CDC9A0F7EA4E3F84F030AB84F0DB87" + { + "SourcePath" = "8:..\\Files2Folders2Files\\Resources\\Docs\\Files2Folders2Files-HELP.txt" + "TargetName" = "8:Files2Folders2Files-HELP.txt" + "Tag" = "8:" + "Folder" = "8:_C1F0655C1A274B14ABD70D0E85403469" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_6E14913BC6294C638CDF6B8F2A46ABCF" + { + "SourcePath" = "8:..\\Files2Folders2Files-CLI\\Resources\\BASHes\\put your bash files in this directory.txt" + "TargetName" = "8:put your bash files in this directory.txt" + "Tag" = "8:" + "Folder" = "8:_3090D44E77CA4B20B5FC4E1B738CC81C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_6E4C9E941527075887D0B3A3EEEA8244" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:Serilog, Version=2.0.0.0, Culture=neutral, PublicKeyToken=24c2f752a8e58a10, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_6E4C9E941527075887D0B3A3EEEA8244" + { + "Name" = "8:Serilog.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:Serilog.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_5B23BF76C9884279B7C1EF7AC2AA9063" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_72D55CE61DBB6A03240BE31F428C2052" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:Files2Folders2Files, Version=0.1.1.0, Culture=neutral, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_72D55CE61DBB6A03240BE31F428C2052" + { + "Name" = "8:Files2Folders2Files.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:Files2Folders2Files.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_5B23BF76C9884279B7C1EF7AC2AA9063" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_73D5F79150AF49F7959A732C6536686C" + { + "SourcePath" = "8:..\\Files2Folders2Files-CLI\\Resources\\Batches\\Files2Folders2Files-Save-Options.bat" + "TargetName" = "8:Files2Folders2Files-Save-Options.bat" + "Tag" = "8:" + "Folder" = "8:_9F7240506FED40C782E4DDA901016046" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_77E2C5E130274AD9ACB535A9DB51A112" + { + "SourcePath" = "8:..\\Files2Folders2Files\\Resources\\Options\\put your options files in this directory.txt" + "TargetName" = "8:put your options files in this directory.txt" + "Tag" = "8:" + "Folder" = "8:_BF52660B091D42DAAEE4C3194432BEEA" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_9365E36A2A8F496A9C5EDA26EF4BC308" + { + "SourcePath" = "8:..\\Files2Folders2Files-CLI\\Resources\\Batches\\Files2Folders2Files-Print-Donation-Info.bat" + "TargetName" = "8:Files2Folders2Files-Print-Donation-Info.bat" + "Tag" = "8:" + "Folder" = "8:_9F7240506FED40C782E4DDA901016046" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_BE56E0B7A03D4F178F30051AAE72AFDA" + { + "SourcePath" = "8:..\\Files2Folders2Files-CLI\\Resources\\BASHes\\Files2Folders2Files-Save-Options.sh" + "TargetName" = "8:Files2Folders2Files-Save-Options.sh" + "Tag" = "8:" + "Folder" = "8:_3090D44E77CA4B20B5FC4E1B738CC81C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{9F6F8455-1EF1-4B85-886A-4223BCC8E7F7}:_D3B61476772873181E355D89E702F154" + { + "AssemblyRegister" = "3:1" + "AssemblyIsInGAC" = "11:FALSE" + "AssemblyAsmDisplayName" = "8:Serilog.Sinks.LogEmAll, Version=0.0.6.0, Culture=neutral, processorArchitecture=MSIL" + "ScatterAssemblies" + { + "_D3B61476772873181E355D89E702F154" + { + "Name" = "8:Serilog.Sinks.LogEmAll.dll" + "Attributes" = "3:512" + } + } + "SourcePath" = "8:Serilog.Sinks.LogEmAll.dll" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_5B23BF76C9884279B7C1EF7AC2AA9063" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:TRUE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E549B7BC52F64B2BBD0ACEF46D512A8E" + { + "SourcePath" = "8:..\\Files2Folders2Files-CLI\\Resources\\BASHes\\Files2Folders2Files-Print-Donation-Info.sh" + "TargetName" = "8:Files2Folders2Files-Print-Donation-Info.sh" + "Tag" = "8:" + "Folder" = "8:_3090D44E77CA4B20B5FC4E1B738CC81C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_E95D36F216414564BD10E861B1A767F0" + { + "SourcePath" = "8:..\\Files2Folders2Files\\Resources\\Docs\\Files2Folders2Files-LICENSE.rtf" + "TargetName" = "8:Files2Folders2Files-LICENSE.rtf" + "Tag" = "8:" + "Folder" = "8:_C1F0655C1A274B14ABD70D0E85403469" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F09A3AE9ED8A42DD8690C402D13225E9" + { + "SourcePath" = "8:..\\Files2Folders2Files-CLI\\Resources\\BASHes\\Files2Folders2Files-Print-Help-CMD.sh" + "TargetName" = "8:Files2Folders2Files-Print-Help-CMD.sh" + "Tag" = "8:" + "Folder" = "8:_3090D44E77CA4B20B5FC4E1B738CC81C" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F981EA64DE0C49DA880F3EA0E0C2A39F" + { + "SourcePath" = "8:..\\Files2Folders2Files-CLI\\Resources\\Batches\\Files2Folders2Files-Files2Folders.bat" + "TargetName" = "8:Files2Folders2Files-Files2Folders.bat" + "Tag" = "8:" + "Folder" = "8:_9F7240506FED40C782E4DDA901016046" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + } + } + "FileType" + { + } + "Folder" + { + "{3C67513D-01DD-4637-8A68-80971EB9504F}:_5B23BF76C9884279B7C1EF7AC2AA9063" + { + "DefaultLocation" = "8:[ProgramFilesFolder][Manufacturer]\\[ProductName]" + "Name" = "8:#1925" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:TARGETDIR" + "Folders" + { + "{9EF0B969-E518-4E46-987F-47570745A589}:_3090D44E77CA4B20B5FC4E1B738CC81C" + { + "Name" = "8:BASHes" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:_FEC8C07790524CF7BD83387C320EAD28" + "Folders" + { + } + } + "{9EF0B969-E518-4E46-987F-47570745A589}:_31B678E6D7D94776BD0EE538E9BA6EC7" + { + "Name" = "8:Logs" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:_EC1A1119400A4D2CB8619CB9E626FB15" + "Folders" + { + } + } + "{9EF0B969-E518-4E46-987F-47570745A589}:_9F7240506FED40C782E4DDA901016046" + { + "Name" = "8:Batches" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:_6B49E5FD6CE04903B53D4839352060B8" + "Folders" + { + } + } + "{9EF0B969-E518-4E46-987F-47570745A589}:_BF52660B091D42DAAEE4C3194432BEEA" + { + "Name" = "8:Options" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:_C0E1752210A34786A1EA3A86C8BEE27F" + "Folders" + { + } + } + "{9EF0B969-E518-4E46-987F-47570745A589}:_C1F0655C1A274B14ABD70D0E85403469" + { + "Name" = "8:Docs" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:_B4F6B42D311547D682CA3932D344E549" + "Folders" + { + } + } + } + } + "{1525181F-901A-416C-8A58-119130FE478E}:_9134C18FB9974783865EF7E2AFE43D09" + { + "Name" = "8:#1919" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:ProgramMenuFolder" + "Folders" + { + "{9EF0B969-E518-4E46-987F-47570745A589}:_5DBD8B330C924EFAAF006D25F5B1B1DA" + { + "Name" = "8:Files 2 Folders 2 Files" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:_205F4D4ECDB24C82B2FC0B7618A3F364" + "Folders" + { + "{9EF0B969-E518-4E46-987F-47570745A589}:_3164A98A49694833978F1A95C6028DAD" + { + "Name" = "8:Batches" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:_8E27D6BD2BCE413CB6811A8BE1F1D5E3" + "Folders" + { + } + } + "{9EF0B969-E518-4E46-987F-47570745A589}:_459D8D96C5BB4E0FA9B47573A1D1F3DA" + { + "Name" = "8:Docs" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:_01C8BA2D117342B88F764C0FA760FBF7" + "Folders" + { + } + } + } + } + } + } + "{1525181F-901A-416C-8A58-119130FE478E}:_A963E562BDDF43B5AC497C1E770B1078" + { + "Name" = "8:#1916" + "AlwaysCreate" = "11:FALSE" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Property" = "8:DesktopFolder" + "Folders" + { + } + } + } + "LaunchCondition" + { + } + "Locator" + { + } + "MsiBootstrapper" + { + "LangId" = "3:1033" + "RequiresElevation" = "11:FALSE" + } + "Product" + { + "Name" = "8:Microsoft Visual Studio" + "ProductName" = "8:Files 2 Folders 2 Files" + "ProductCode" = "8:{81FF6661-B919-45F6-ADE9-CD6B9F8729A7}" + "PackageCode" = "8:{825AD016-0C47-4889-A529-676774BB791F}" + "UpgradeCode" = "8:{63159E6B-7503-42B8-AB06-D4AFFD4F8E4D}" + "AspNetVersion" = "8:4.0.30319.0" + "RestartWWWService" = "11:FALSE" + "RemovePreviousVersions" = "11:TRUE" + "DetectNewerInstalledVersion" = "11:TRUE" + "InstallAllUsers" = "11:FALSE" + "ProductVersion" = "8:0.1.2" + "Manufacturer" = "8:Files 2 Folders 2 Files" + "ARPHELPTELEPHONE" = "8:" + "ARPHELPLINK" = "8:" + "Title" = "8:Files 2 Folders 2 Files Installer" + "Subject" = "8:" + "ARPCONTACT" = "8:Files 2 Folders 2 Files" + "Keywords" = "8:Files 2 Folders 2 Files" + "ARPCOMMENTS" = "8:The Original Automated Files 2 Folders 2 Files" + "ARPURLINFOABOUT" = "8:https://www.devemall.int.eu.org" + "ARPPRODUCTICON" = "8:" + "ARPIconIndex" = "3:0" + "SearchPath" = "8:" + "UseSystemSearchPath" = "11:TRUE" + "TargetPlatform" = "3:0" + "PreBuildEvent" = "8:" + "PostBuildEvent" = "8:" + "RunPostBuildEvent" = "3:0" + } + "Registry" + { + "HKLM" + { + "Keys" + { + "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_6D7328D181DF415A9205CC192636E768" + { + "Name" = "8:Software" + "Condition" = "8:" + "AlwaysCreate" = "11:FALSE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_498F9D4158B745548DA2D9C470228C54" + { + "Name" = "8:[Manufacturer]" + "Condition" = "8:" + "AlwaysCreate" = "11:FALSE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + } + "Values" + { + } + } + } + "Values" + { + } + } + } + } + "HKCU" + { + "Keys" + { + "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_AC6E67A22A394046A2DBC7568BE6008D" + { + "Name" = "8:Software" + "Condition" = "8:" + "AlwaysCreate" = "11:FALSE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + "{60EA8692-D2D5-43EB-80DC-7906BF13D6EF}:_940B2A27DB9F4171A2FF97658EDB8558" + { + "Name" = "8:[Manufacturer]" + "Condition" = "8:" + "AlwaysCreate" = "11:FALSE" + "DeleteAtUninstall" = "11:FALSE" + "Transitive" = "11:FALSE" + "Keys" + { + } + "Values" + { + } + } + } + "Values" + { + } + } + } + } + "HKCR" + { + "Keys" + { + } + } + "HKU" + { + "Keys" + { + } + } + "HKPU" + { + "Keys" + { + } + } + } + "Sequences" + { + } + "Shortcut" + { + "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_3A0A20A65A114A8C89592D30A3C6FF71" + { + "Name" = "8:Files2Folders2Files-HELP-CMD" + "Arguments" = "8:" + "Description" = "8:" + "ShowCmd" = "3:1" + "IconIndex" = "3:0" + "Transitive" = "11:FALSE" + "Target" = "8:_2B0B9C4C4E73496DBC488361DB1AF3EE" + "Folder" = "8:_459D8D96C5BB4E0FA9B47573A1D1F3DA" + "WorkingFolder" = "8:_C1F0655C1A274B14ABD70D0E85403469" + "Icon" = "8:" + "Feature" = "8:" + } + "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_60DAAF8719A14900A1425CA26FFAD0A1" + { + "Name" = "8:Files2Folders2Files-Folders2Files" + "Arguments" = "8:" + "Description" = "8:" + "ShowCmd" = "3:1" + "IconIndex" = "3:0" + "Transitive" = "11:FALSE" + "Target" = "8:_4198F4BDA4184E48BE91FF946A3C80FE" + "Folder" = "8:_3164A98A49694833978F1A95C6028DAD" + "WorkingFolder" = "8:_9F7240506FED40C782E4DDA901016046" + "Icon" = "8:" + "Feature" = "8:" + } + "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_706AED6EF8254DF2AE5A551A30B7C242" + { + "Name" = "8:Files2Folders2Files-GUI" + "Arguments" = "8:" + "Description" = "8:" + "ShowCmd" = "3:1" + "IconIndex" = "3:0" + "Transitive" = "11:FALSE" + "Target" = "8:_ABF1DDF0E8174C528D9A17ABC32D4546" + "Folder" = "8:_5DBD8B330C924EFAAF006D25F5B1B1DA" + "WorkingFolder" = "8:_5B23BF76C9884279B7C1EF7AC2AA9063" + "Icon" = "8:" + "Feature" = "8:" + } + "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_75627441A36048FBA7559BC67D2550A5" + { + "Name" = "8:Files2Folders2Files-CLI" + "Arguments" = "8:" + "Description" = "8:" + "ShowCmd" = "3:1" + "IconIndex" = "3:0" + "Transitive" = "11:FALSE" + "Target" = "8:_2791255712804530BA3B3332813A2BC1" + "Folder" = "8:_5DBD8B330C924EFAAF006D25F5B1B1DA" + "WorkingFolder" = "8:_5B23BF76C9884279B7C1EF7AC2AA9063" + "Icon" = "8:" + "Feature" = "8:" + } + "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_B4E81A9837674A5F8606DC37FD33DE23" + { + "Name" = "8:Files2Folders2Files-DONATIONS" + "Arguments" = "8:" + "Description" = "8:" + "ShowCmd" = "3:1" + "IconIndex" = "3:0" + "Transitive" = "11:FALSE" + "Target" = "8:_4680BB07C200400B84D30B8FF3C155A7" + "Folder" = "8:_459D8D96C5BB4E0FA9B47573A1D1F3DA" + "WorkingFolder" = "8:_C1F0655C1A274B14ABD70D0E85403469" + "Icon" = "8:" + "Feature" = "8:" + } + "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_F51C9A645EA34B908705A55DC7720D44" + { + "Name" = "8:Files2Folders2Files-Files2Folders" + "Arguments" = "8:" + "Description" = "8:" + "ShowCmd" = "3:1" + "IconIndex" = "3:0" + "Transitive" = "11:FALSE" + "Target" = "8:_F981EA64DE0C49DA880F3EA0E0C2A39F" + "Folder" = "8:_3164A98A49694833978F1A95C6028DAD" + "WorkingFolder" = "8:_9F7240506FED40C782E4DDA901016046" + "Icon" = "8:" + "Feature" = "8:" + } + "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_F918ED26144A42BC8E2F2CEAC3B0CE3D" + { + "Name" = "8:Files2Folders2Files-LICENSE" + "Arguments" = "8:" + "Description" = "8:" + "ShowCmd" = "3:1" + "IconIndex" = "3:0" + "Transitive" = "11:FALSE" + "Target" = "8:_E95D36F216414564BD10E861B1A767F0" + "Folder" = "8:_459D8D96C5BB4E0FA9B47573A1D1F3DA" + "WorkingFolder" = "8:_C1F0655C1A274B14ABD70D0E85403469" + "Icon" = "8:" + "Feature" = "8:" + } + "{970C0BB2-C7D0-45D7-ABFA-7EC378858BC0}:_FAEFB7FFB5F2453F91BF6397C58AE10C" + { + "Name" = "8:Files2Folders2Files-HELP" + "Arguments" = "8:" + "Description" = "8:" + "ShowCmd" = "3:1" + "IconIndex" = "3:0" + "Transitive" = "11:FALSE" + "Target" = "8:_63CDC9A0F7EA4E3F84F030AB84F0DB87" + "Folder" = "8:_459D8D96C5BB4E0FA9B47573A1D1F3DA" + "WorkingFolder" = "8:_C1F0655C1A274B14ABD70D0E85403469" + "Icon" = "8:" + "Feature" = "8:" + } + } + "UserInterface" + { + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_13D186E817674AE6881F6FD6B6B68BB4" + { + "Name" = "8:#1902" + "Sequence" = "3:2" + "Attributes" = "3:3" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_8EA8A34407884CBDBA04BD5C167D29EB" + { + "Sequence" = "3:100" + "DisplayName" = "8:Finished" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminFinishedDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_14D4C830B4044D24BC6CCA1D2437E209" + { + "Name" = "8:#1901" + "Sequence" = "3:2" + "Attributes" = "3:2" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_5E687EBFD7864BFBA083D54141D9414E" + { + "Sequence" = "3:100" + "DisplayName" = "8:Progress" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminProgressDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "ShowProgress" + { + "Name" = "8:ShowProgress" + "DisplayName" = "8:#1009" + "Description" = "8:#1109" + "Type" = "3:5" + "ContextData" = "8:1;True=1;False=0" + "Attributes" = "3:0" + "Setting" = "3:0" + "Value" = "3:1" + "DefaultValue" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_357A4A75330A4B3892ACBC2BCB3B6575" + { + "Name" = "8:#1900" + "Sequence" = "3:1" + "Attributes" = "3:1" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_12BC49CB214F499A930B7356C7FC8266" + { + "Sequence" = "3:410" + "DisplayName" = "8:Confirm Installation" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdConfirmDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_3C6773EBE5C343D5B29F48A0D7AC45D9" + { + "Sequence" = "3:400" + "DisplayName" = "8:License Agreement" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdLicenseDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "EulaText" + { + "Name" = "8:EulaText" + "DisplayName" = "8:#1008" + "Description" = "8:#1108" + "Type" = "3:6" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:2" + "Value" = "8:_E95D36F216414564BD10E861B1A767F0" + "UsePlugInResources" = "11:TRUE" + } + "Sunken" + { + "Name" = "8:Sunken" + "DisplayName" = "8:#1007" + "Description" = "8:#1107" + "Type" = "3:5" + "ContextData" = "8:4;True=4;False=0" + "Attributes" = "3:0" + "Setting" = "3:0" + "Value" = "3:4" + "DefaultValue" = "3:4" + "UsePlugInResources" = "11:TRUE" + } + } + } + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_49B94FDAB5D74E32986F0DDC0446D7D3" + { + "Sequence" = "3:100" + "DisplayName" = "8:Welcome" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdWelcomeDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "CopyrightWarning" + { + "Name" = "8:CopyrightWarning" + "DisplayName" = "8:#1002" + "Description" = "8:#1102" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1202" + "DefaultValue" = "8:#1202" + "UsePlugInResources" = "11:TRUE" + } + "Welcome" + { + "Name" = "8:Welcome" + "DisplayName" = "8:#1003" + "Description" = "8:#1103" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1203" + "DefaultValue" = "8:#1203" + "UsePlugInResources" = "11:TRUE" + } + } + } + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_9D7706A931644770B4039EB3F732F600" + { + "Sequence" = "3:200" + "DisplayName" = "8:Installation Folder" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdFolderDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "InstallAllUsersVisible" + { + "Name" = "8:InstallAllUsersVisible" + "DisplayName" = "8:#1059" + "Description" = "8:#1159" + "Type" = "3:5" + "ContextData" = "8:1;True=1;False=0" + "Attributes" = "3:0" + "Setting" = "3:0" + "Value" = "3:1" + "DefaultValue" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_427108AE222145D0A92F31CBC2B12C04" + { + "UseDynamicProperties" = "11:FALSE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdUserInterface.wim" + } + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_70A125C4CF9740A39C2945780901EB91" + { + "Name" = "8:#1900" + "Sequence" = "3:2" + "Attributes" = "3:1" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_63023B7731FE482FA31FEB5BE72D7AFF" + { + "Sequence" = "3:100" + "DisplayName" = "8:Welcome" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminWelcomeDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "CopyrightWarning" + { + "Name" = "8:CopyrightWarning" + "DisplayName" = "8:#1002" + "Description" = "8:#1102" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1202" + "DefaultValue" = "8:#1202" + "UsePlugInResources" = "11:TRUE" + } + "Welcome" + { + "Name" = "8:Welcome" + "DisplayName" = "8:#1003" + "Description" = "8:#1103" + "Type" = "3:3" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1203" + "DefaultValue" = "8:#1203" + "UsePlugInResources" = "11:TRUE" + } + } + } + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_72EE9860DF9145D88964A8A68F45B630" + { + "Sequence" = "3:200" + "DisplayName" = "8:Installation Folder" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminFolderDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_AD7498EBA3C54759B86AB6EDEA96209C" + { + "Sequence" = "3:400" + "DisplayName" = "8:License Agreement" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminLicenseDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "EulaText" + { + "Name" = "8:EulaText" + "DisplayName" = "8:#1008" + "Description" = "8:#1108" + "Type" = "3:6" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:2" + "Value" = "8:_E95D36F216414564BD10E861B1A767F0" + "UsePlugInResources" = "11:TRUE" + } + "Sunken" + { + "Name" = "8:Sunken" + "DisplayName" = "8:#1007" + "Description" = "8:#1107" + "Type" = "3:5" + "ContextData" = "8:4;True=4;False=0" + "Attributes" = "3:0" + "Setting" = "3:0" + "Value" = "3:4" + "DefaultValue" = "3:4" + "UsePlugInResources" = "11:TRUE" + } + } + } + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_C93E0568E8A0406DBB980C1115E5D93C" + { + "Sequence" = "3:410" + "DisplayName" = "8:Confirm Installation" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdAdminConfirmDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{2479F3F5-0309-486D-8047-8187E2CE5BA0}:_ACA9FCE8CE8A44A5BFEC9149A6F8A036" + { + "UseDynamicProperties" = "11:FALSE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdBasicDialogs.wim" + } + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_B3A915677D0D4470BEE9A8DBE2E25627" + { + "Name" = "8:#1901" + "Sequence" = "3:1" + "Attributes" = "3:2" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_61BF9EC8BFF14227B4E9CC01D058F3FF" + { + "Sequence" = "3:100" + "DisplayName" = "8:Progress" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdProgressDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "ShowProgress" + { + "Name" = "8:ShowProgress" + "DisplayName" = "8:#1009" + "Description" = "8:#1109" + "Type" = "3:5" + "ContextData" = "8:1;True=1;False=0" + "Attributes" = "3:0" + "Setting" = "3:0" + "Value" = "3:1" + "DefaultValue" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + "{DF760B10-853B-4699-99F2-AFF7185B4A62}:_E21CE4D86D534DD3BB9958536B746C32" + { + "Name" = "8:#1902" + "Sequence" = "3:1" + "Attributes" = "3:3" + "Dialogs" + { + "{688940B3-5CA9-4162-8DEE-2993FA9D8CBC}:_C45750F355464A208F7853CB4A9F72E3" + { + "Sequence" = "3:100" + "DisplayName" = "8:Finished" + "UseDynamicProperties" = "11:TRUE" + "IsDependency" = "11:FALSE" + "SourcePath" = "8:\\VsdFinishedDlg.wid" + "Properties" + { + "BannerBitmap" + { + "Name" = "8:BannerBitmap" + "DisplayName" = "8:#1001" + "Description" = "8:#1101" + "Type" = "3:8" + "ContextData" = "8:Bitmap" + "Attributes" = "3:4" + "Setting" = "3:1" + "UsePlugInResources" = "11:TRUE" + } + "UpdateText" + { + "Name" = "8:UpdateText" + "DisplayName" = "8:#1058" + "Description" = "8:#1158" + "Type" = "3:15" + "ContextData" = "8:" + "Attributes" = "3:0" + "Setting" = "3:1" + "Value" = "8:#1258" + "DefaultValue" = "8:#1258" + "UsePlugInResources" = "11:TRUE" + } + } + } + } + } + } + "MergeModule" + { + } + "ProjectOutput" + { + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_2791255712804530BA3B3332813A2BC1" + { + "SourcePath" = "8:..\\Files2Folders2Files-CLI\\obj\\Debug\\Files2Folders2Files-CLI.exe" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_5B23BF76C9884279B7C1EF7AC2AA9063" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:1" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectGuid" = "8:{B0E50B70-FDF5-41C8-82FB-0543274CE095}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } + "{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_ABF1DDF0E8174C528D9A17ABC32D4546" + { + "SourcePath" = "8:..\\Files2Folders2Files-GUI\\obj\\Debug\\Files2Folders2Files-GUI.exe" + "TargetName" = "8:" + "Tag" = "8:" + "Folder" = "8:_5B23BF76C9884279B7C1EF7AC2AA9063" + "Condition" = "8:" + "Transitive" = "11:FALSE" + "Vital" = "11:TRUE" + "ReadOnly" = "11:FALSE" + "Hidden" = "11:FALSE" + "System" = "11:FALSE" + "Permanent" = "11:FALSE" + "SharedLegacy" = "11:FALSE" + "PackageAs" = "3:1" + "Register" = "3:1" + "Exclude" = "11:FALSE" + "IsDependency" = "11:FALSE" + "IsolateTo" = "8:" + "ProjectOutputGroupRegister" = "3:1" + "OutputConfiguration" = "8:" + "OutputGroupCanonicalName" = "8:Built" + "OutputProjectGuid" = "8:{73055FFB-47A7-4332-BB2B-410AAE263774}" + "ShowKeyOutput" = "11:TRUE" + "ExcludeFilters" + { + } + } + } + } +} diff --git a/Files2Folders2Files-Release/Files2Folders2Files-Release.csproj b/Files2Folders2Files-Release/Files2Folders2Files-Release.csproj new file mode 100644 index 0000000..769fcfe --- /dev/null +++ b/Files2Folders2Files-Release/Files2Folders2Files-Release.csproj @@ -0,0 +1,118 @@ + + + + + + Debug + AnyCPU + {68E72165-E8D2-4B40-8801-BC16D5D160AC} + + + + + AnyCPU + bin\Debug\ + + + AnyCPU + bin\Release\ + + + + + + + Files2Folders2Files + 0.1.2 + Files2Folders2Files-Portable + Files2Folders2Files-Installer + Files2Folders2Files-Package + Files2Folders2Files-Source + Files2Folders2Files + Files2Folders2Files-CLI + Files2Folders2Files-GUI + $(OutputPath)Portable\ + $(OutputPath)ILMerge\ + $(OutputPath)Package + $(OutputPath)Installer\ + $(OutputPath)Source\ + $(OutputPath)Releases\ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. + + + + \ No newline at end of file diff --git a/Files2Folders2Files-Release/packages.config b/Files2Folders2Files-Release/packages.config new file mode 100644 index 0000000..8f32205 --- /dev/null +++ b/Files2Folders2Files-Release/packages.config @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Files2Folders2Files.sln b/Files2Folders2Files.sln new file mode 100644 index 0000000..40c14bf --- /dev/null +++ b/Files2Folders2Files.sln @@ -0,0 +1,65 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.5.33627.172 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Files2Folders2Files-GUI", "Files2Folders2Files-GUI\Files2Folders2Files-GUI.csproj", "{73055FFB-47A7-4332-BB2B-410AAE263774}" +EndProject +Project("{54435603-DBB4-11D2-8724-00A0C9A8B90C}") = "Files2Folders2Files-Installer", "Files2Folders2Files-Installer\Files2Folders2Files-Installer.vdproj", "{6001528E-3FF2-4396-BAAD-A86C6A8DCD9D}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Files2Folders2Files-Release", "Files2Folders2Files-Release\Files2Folders2Files-Release.csproj", "{68E72165-E8D2-4B40-8801-BC16D5D160AC}" + ProjectSection(ProjectDependencies) = postProject + {6001528E-3FF2-4396-BAAD-A86C6A8DCD9D} = {6001528E-3FF2-4396-BAAD-A86C6A8DCD9D} + {73055FFB-47A7-4332-BB2B-410AAE263774} = {73055FFB-47A7-4332-BB2B-410AAE263774} + {B0E50B70-FDF5-41C8-82FB-0543274CE095} = {B0E50B70-FDF5-41C8-82FB-0543274CE095} + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{BC5B21C7-3C27-4456-B5A4-39C00EF25B4F}" + ProjectSection(SolutionItems) = preProject + CHANGELOG.md = CHANGELOG.md + CODE_OF_CONDUCT.md = CODE_OF_CONDUCT.md + CONTRIBUTING.md = CONTRIBUTING.md + LICENSE = LICENSE + README.md = README.md + TODO.md = TODO.md + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Files2Folders2Files", "Files2Folders2Files\Files2Folders2Files.csproj", "{CBAD4D51-B8D5-4F07-8C71-B152F284FDF2}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Files2Folders2Files-CLI", "Files2Folders2Files-CLI\Files2Folders2Files-CLI.csproj", "{B0E50B70-FDF5-41C8-82FB-0543274CE095}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + Description = The Original Automated Files 2 Folders 2 Files + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {73055FFB-47A7-4332-BB2B-410AAE263774}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {73055FFB-47A7-4332-BB2B-410AAE263774}.Debug|Any CPU.Build.0 = Debug|Any CPU + {73055FFB-47A7-4332-BB2B-410AAE263774}.Release|Any CPU.ActiveCfg = Release|Any CPU + {73055FFB-47A7-4332-BB2B-410AAE263774}.Release|Any CPU.Build.0 = Release|Any CPU + {6001528E-3FF2-4396-BAAD-A86C6A8DCD9D}.Debug|Any CPU.ActiveCfg = Debug + {6001528E-3FF2-4396-BAAD-A86C6A8DCD9D}.Debug|Any CPU.Build.0 = Debug + {6001528E-3FF2-4396-BAAD-A86C6A8DCD9D}.Release|Any CPU.ActiveCfg = Release + {6001528E-3FF2-4396-BAAD-A86C6A8DCD9D}.Release|Any CPU.Build.0 = Release + {68E72165-E8D2-4B40-8801-BC16D5D160AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {68E72165-E8D2-4B40-8801-BC16D5D160AC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {68E72165-E8D2-4B40-8801-BC16D5D160AC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {68E72165-E8D2-4B40-8801-BC16D5D160AC}.Release|Any CPU.Build.0 = Release|Any CPU + {CBAD4D51-B8D5-4F07-8C71-B152F284FDF2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {CBAD4D51-B8D5-4F07-8C71-B152F284FDF2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {CBAD4D51-B8D5-4F07-8C71-B152F284FDF2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {CBAD4D51-B8D5-4F07-8C71-B152F284FDF2}.Release|Any CPU.Build.0 = Release|Any CPU + {B0E50B70-FDF5-41C8-82FB-0543274CE095}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B0E50B70-FDF5-41C8-82FB-0543274CE095}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B0E50B70-FDF5-41C8-82FB-0543274CE095}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B0E50B70-FDF5-41C8-82FB-0543274CE095}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {46A8276F-6071-4BFB-BD00-0BB0DAECBAF6} + EndGlobalSection +EndGlobal diff --git a/Files2Folders2Files/Files2Folders2Files.cs b/Files2Folders2Files/Files2Folders2Files.cs new file mode 100644 index 0000000..30d59f0 --- /dev/null +++ b/Files2Folders2Files/Files2Folders2Files.cs @@ -0,0 +1,900 @@ +using Serilog; +using Serilog.Sinks.LogEmAll; +using System; +using System.Collections.Generic; +using System.ComponentModel; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Reflection; +using System.Runtime.InteropServices; +using System.Text.RegularExpressions; +using System.Xml.Linq; + +namespace Files2Folders2Files +{ + /// + /// Files2Folders2Files class + /// + public class Files2Folders2Files : INotifyPropertyChanged + { + #region Constructors + + /// + /// Files2Folders2Files Constructor + /// + public Files2Folders2Files() + { + // Construct a Files2Folders2Files object. + } + + #endregion + + #region INotifyPropertyChanged + + /// PropertyChanged Event + public event PropertyChangedEventHandler PropertyChanged; + + /// + /// NotifyPropertyChanged + /// + /// + private void NotifyPropertyChanged(String pName) + { + PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(pName)); + } + + #endregion + + #region Private members + + // Not Options + private readonly string _appName = FileVersionInfo.GetVersionInfo(Assembly.GetEntryAssembly().Location).ProductName; + private readonly string _appVersion = FileVersionInfo.GetVersionInfo(Assembly.GetEntryAssembly().Location).ProductVersion; + private readonly string _appCopyright = FileVersionInfo.GetVersionInfo(Assembly.GetEntryAssembly().Location).LegalCopyright; + private readonly string _libName = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).ProductName; + private readonly string _libVersion = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).ProductVersion; + private readonly string _libCopyright = FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).LegalCopyright; + private bool _appIsRegistered = false; + private string _commandSwitch = "-help"; + private bool _deleteEmptyFolders = true; + private ListStringLog _logLines = new ListStringLog(); + // Paths Options + private string _directoryPath = ""; + private string _pathOptionsFile = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location), "Options", "Files2Folders2Files-Options.xml"); + private string _pathLogFile = ""; + // Registration Options + private string _registrationStatus = "unregistered"; + private string _registrationKey = ""; + private string _registerAppUsername = ""; + private string _registerAppEmailAddress = ""; + private string _registerAppPassword = ""; + + #endregion + + #region Getters/Setters Public Accessors + + /// AppName + public string AppName + { + get { return _appName; } + set { } + } + /// AppVersion + public string AppVersion + { + get { return _appVersion; } + set { } + } + /// AppCopyright + public string AppCopyright + { + get { return _appCopyright; } + set { } + } + /// LibName + public string LibName + { + get { return _libName; } + set { } + } + /// LibVersion + public string LibVersion + { + get { return _libVersion; } + set { } + } + /// LibCopyright + public string LibCopyright + { + get { return _libCopyright; } + set { } + } + /// AppIsRegistered + public bool AppIsRegistered + { + get { return _appIsRegistered; } + set { _appIsRegistered = value; NotifyPropertyChanged("AppIsRegistered"); } + } + /// CommandSwitch + public string CommandSwitch + { + get { return _commandSwitch; } + set { _commandSwitch = value; } + } + /// DirectoryPath + public string DirectoryPath + { + get { return _directoryPath; } + set { _directoryPath = value; NotifyPropertyChanged("DirectoryPath"); } + } + /// DeleteEmptyFolders + public bool DeleteEmptyFolders + { + get { return _deleteEmptyFolders; } + set { _deleteEmptyFolders = value; NotifyPropertyChanged("DeleteEmptyFolders"); } + } + /// PathOptionsFile + public string PathOptionsFile + { + get { return _pathOptionsFile; } + set { _pathOptionsFile = value; } + } + /// PathLogFile + public string PathLogFile + { + get { return _pathLogFile; } + set { _pathLogFile = value; } + } + /// LogLines + public ListStringLog LogLines + { + get { return _logLines; } + set { _logLines = value; } + } + /// RegistrationStatus + public string RegistrationStatus + { + get { return _registrationStatus; } + set { _registrationStatus = value; NotifyPropertyChanged("RegistrationStatus"); } + } + /// RegistrationKey + public string RegistrationKey + { + get { return _registrationKey; } + set { _registrationKey = value; NotifyPropertyChanged("RegistrationKey"); } + } + /// RegisterAppUsername + public string RegisterAppUsername + { + get { return _registerAppUsername; } + set { _registerAppUsername = value; NotifyPropertyChanged("RegisterAppUsername"); } + } + /// RegisterAppEmailAddress + public string RegisterAppEmailAddress + { + get { return _registerAppEmailAddress; } + set { _registerAppEmailAddress = value; NotifyPropertyChanged("RegisterAppEmailAddress"); } + } + /// RegisterAppPassword + public string RegisterAppPassword + { + get { return _registerAppPassword; } + set { _registerAppPassword = value; NotifyPropertyChanged("RegisterAppPassword"); } + } + + #endregion + + #region Registration + + /// + /// Register the app. + /// + /// + /// + /// + /// + public bool RegisterApp(string strUsername = null, string strEmailAddress = null, string strPassword = null) + { + try + { + // Return a bool value + return true; + } + catch (Exception ex) + { + // Print to screen + Log.Error("Registering app failed"); + Log.Error(ex.Message); + + // Return a value + return false; + } + } + + #endregion + + #region Options + + /// + /// Loads and sets the options variables from the options file. + /// + /// + /// + public bool LoadOptionsFromFile(string strPath = null) + { + try + { + if (strPath != null) + { + PathOptionsFile = strPath; + } + + if (!File.Exists(PathOptionsFile)) + { + // Print to screen + Log.Information("Options file was not found"); + + // Return a bool value. + return false; + } + else + { + // Print to screen + Log.Information("Loading options file ..."); + + // Load the options from the XML file. + XDocument xdocOptions = XDocument.Load(PathOptionsFile); + + // Set the variables. + if (xdocOptions.Element("Options") == null) { Log.Warning("Options file is corrupt or outdated (Options)"); } + else + { + if (xdocOptions.Element("Options").Element("Paths") == null) { Log.Warning("Options file is corrupt or outdated (Paths)"); } + else + { + if (xdocOptions.Element("Options").Element("Paths").Element("DirectoryPath") != null) { DirectoryPath = xdocOptions.Element("Options").Element("Paths").Element("DirectoryPath").Value; } + else { Log.Warning("Options file is corrupt or outdated (DirectoryPath)"); } + } + + if (xdocOptions.Element("Options").Element("Output") == null) { Log.Warning("Options file is corrupt or outdated (Output)"); } + else + { + if (xdocOptions.Element("Options").Element("Output").Element("DeleteEmptyFolders") != null) { DeleteEmptyFolders = Convert.ToBoolean(xdocOptions.Element("Options").Element("Output").Element("DeleteEmptyFolders").Value); } + else { Log.Warning("Options file is corrupt or outdated (DeleteEmptyFolders)"); } + } + } + + // Print to screen + Log.Information("Options file loaded (" + PathOptionsFile + ")"); + + // Return a bool value. + return true; + } + } + catch (Exception ex) + { + // Print to screen + Log.Error("Loading options from file failed"); + Log.Error(ex.Message); + + // Return a bool value. + return false; + } + } + + /// + /// Saves a new options file. + /// + /// + /// + public bool SaveOptionsToFile(string strPath = null) + { + try + { + if (strPath != null) + { + PathOptionsFile = strPath; + } + + // Print to screen + Log.Information("Saving options file ..."); + + // Create a new options XDocument. + XDocument xdocOptions = new XDocument( + new XDeclaration("1.0", "utf-8", "yes"), + new XComment("This is a Files2Folders2Files options file"), + new XComment("WARNING: Using invalid values might cause this app to crash!"), + new XElement("Options", + new XAttribute("Version", AppVersion), + new XElement("Output", + new XElement("DeleteEmptyFolders", DeleteEmptyFolders) + ), + new XElement("Paths", + new XElement("DirectoryPath", DirectoryPath) + ) + ) + ); + + // Create options file directory if it doesn't exist. + if (Directory.Exists(Path.GetDirectoryName(PathOptionsFile)) == false) Directory.CreateDirectory(Path.GetDirectoryName(PathOptionsFile)); + + // Save the contents of the options XDocument to the file. + xdocOptions.Save(PathOptionsFile); + + // Print to screen + Log.Information("Options file saved (" + PathOptionsFile + ")"); + + // Return a bool value. + return true; + } + catch (Exception ex) + { + // Print to screen + Log.Error("Saving options to file failed"); + Log.Error(ex.Message); + + // Return a bool value. + return false; + } + } + + /// + /// Loads and sets the options variables passed from the CLI. + /// + /// + /// + public bool LoadOptionsFromCLI(string[] strArgs) + { + try + { + foreach (string strArg in strArgs) + { + if (Regex.IsMatch(strArg, "^-", RegexOptions.IgnoreCase) == true) + { + // Set the command. + CommandSwitch = strArg; + } + if (Regex.IsMatch(strArg, "^DE:", RegexOptions.IgnoreCase) == true) + { + // Set whether to delete empty folders. + DeleteEmptyFolders = Convert.ToBoolean(Convert.ToInt32(strArg.Substring(3))); + } + if (Regex.IsMatch(strArg, "^DP:", RegexOptions.IgnoreCase) == true) + { + // Set the directory path. + DirectoryPath = strArg.Substring(3); + } + if (Regex.IsMatch(strArg, "^RA:", RegexOptions.IgnoreCase) == true) + { + // Set the registration info. + RegisterAppUsername = strArg.Substring(3); + } + if (Regex.IsMatch(strArg, "^RB:", RegexOptions.IgnoreCase) == true) + { + // Set the registration info. + RegisterAppEmailAddress = strArg.Substring(3); + } + if (Regex.IsMatch(strArg, "^RC:", RegexOptions.IgnoreCase) == true) + { + // Set the registration info. + RegisterAppPassword = strArg.Substring(3); + } + } + + // Return a bool value. + return true; + } + catch (Exception ex) + { + // Print to screen + Log.Error("Loading options from CLI failed"); + Log.Error(ex.Message); + + // Return a bool value. + return false; + } + } + + #endregion + + #region Log + + /// + /// Saves the log to a text file. + /// + /// + /// + public bool SaveLogToFile(string strPath = null) + { + try + { + if (strPath != null) + { + PathLogFile = strPath; + } + + // Determine if the user selected a log filename. + if (PathLogFile.Length == 0) + { + // Return a bool value. + return false; + } + else + { + // Print to screen + Log.Information("Saving log file ..."); + + // Create log file directory if it doesn't exist. + if (Directory.Exists(Path.GetDirectoryName(PathLogFile)) == false) Directory.CreateDirectory(Path.GetDirectoryName(PathLogFile)); + + // Save the contents of the log to a text file. + File.WriteAllLines(PathLogFile, LogLines); + + // Print to screen + Log.Information("Log file saved (" + PathLogFile + ")"); + + // Return a bool value. + return true; + } + } + catch (Exception ex) + { + // Print to screen + Log.Error("Saving log file failed"); + Log.Error(ex.Message); + + // Return a bool value. + return false; + } + } + + #endregion + + #region Startup Tasks + + /// + /// Check for the latest version from the WWW. + /// + /// + /// + private bool CheckForLatestVersionFromWWW(string strSettingsPage = null) + { + try + { + // Print to screen + // Log.Information("Checking for latest version ..."); + + // Return a bool value. + return true; + } + catch (Exception ex) + { + // Print to screen + Log.Error("Checking for latest version failed"); + Log.Error(ex.Message); + + // Return a bool value. + return false; + } + } + + /// + /// Perform the startup tasks. + /// + public void StartupTasks() + { + // Check if the app is registered. + if (AppIsRegistered == true || AppIsRegistered == false) + { + // Check latest version from the WWW. + // CheckForLatestVersionFromWWW(); + } + } + + #endregion + + #region CLI Commands + + /// + /// Updates/Sets the application title. + /// + /// + /// + public bool UpdateTitle(string strTitle = "") + { + try + { + Console.Title = AppName + " v" + AppVersion + strTitle; + return true; + } + catch (Exception ex) + { + // Print to screen + Log.Error("Updating the title failed"); + Log.Error(ex.Message); + + // Return a bool value. + return false; + } + } + + /// + /// Processes the command switch. + /// + public void ProcessCommandSwitch() + { + switch (CommandSwitch) + { + case "-files2folders": + StartupTasks(); // Performs the application startup tasks. + BuildFiles2Folders(); // Builds a datafile. + break; + case "-folders2files": + StartupTasks(); // Performs the application startup tasks. + BuildFolders2Files(); // Builds a datafile. + break; + case "-saveoptions": + SaveOptionsToFile(); // Saves a new options file. + break; + case "-license": + PrintLicense(); // Prints the license text. + break; + case "-donations": + PrintDonationInfo(); // Prints the donation information. + break; + case "-registerapp": + RegisterApp(); // Registers the app. + break; + case "-diagnostics": + StartupTasks(); // Performs the application startup tasks. + PrintDiagnosticsInfo(); // Prints the diagnostics information. + break; + case "-version": + // // Does nothing. + break; + default: + PrintHelp(); // Prints the help text. + break; + } + + // Print to screen + Log.Information("Ready"); + } + + #endregion + + #region Builders + + /// + /// Build folders from files. + /// + /// + /// + public void BuildFiles2Folders(object sender = null, DoWorkEventArgs e = null) + { + try + { + if (e != null && e.Cancel == true) + { + // Do nothing. + } + else + { + // Print to screen + Log.Information("Files 2 Folders started ..."); + + // Create and start a stopwatch. + var stopWatch = new Stopwatch(); + stopWatch.Start(); + + if (!String.IsNullOrEmpty(DirectoryPath)) + { + // Build the list of files array. + string[] arrPathsFiles = Directory.GetFiles(Path.Combine(DirectoryPath)); + int intTotal = arrPathsFiles.Length; + int intTotalCompleted = 0; + + // Declarations + BackgroundWorker worker = (e != null) ? sender as BackgroundWorker : null; + + // Loop through the list of files array. + foreach (string arrPathFile in arrPathsFiles) + { + if (worker != null && worker.CancellationPending == true) + { + e.Cancel = true; + break; + } + + // Create a new folder for the file. + Directory.CreateDirectory(Path.Combine(DirectoryPath, Path.GetFileNameWithoutExtension(arrPathFile))); + Log.Information("Info: Creating folder (" + Path.Combine(DirectoryPath, Path.GetFileNameWithoutExtension(arrPathFile)) + ")"); + + // Move the file into the folder. + File.Move(arrPathFile, Path.Combine(DirectoryPath, Path.GetFileNameWithoutExtension(arrPathFile), Path.GetFileName(arrPathFile))); + Log.Information("Info: Moving file (" + Path.GetFullPath(arrPathFile) + ")"); + + // Step the overall progress bar. + intTotalCompleted++; + if (worker != null) + { + worker.ReportProgress(intTotalCompleted * 100 / intTotal); + } + + // Log.Information("Info: Completed " + intTotalCompleted + " out of " + intTotal); + } + } + else + { + // Print to screen + Log.Information("Info: No directory path was selected"); + } + + // Print to screen + Log.Information("Files 2 Folders completed in " + stopWatch.Elapsed); + } + } + catch (Exception ex) + { + // Print to screen + Log.Error("Files2Folders failed"); + Log.Error(ex.Message); + // Log.Error(ex.StackTrace); + // Log.Error(ex.ToString()); + } + } + + /// + /// Build files from folders. + /// + /// + /// + public void BuildFolders2Files(object sender = null, DoWorkEventArgs e = null) + { + try + { + if (e != null && e.Cancel == true) + { + // Do nothing. + } + else + { + // Print to screen + Log.Information("Folders 2 Files started ..."); + + // Create and start a stopwatch. + var stopWatch = new Stopwatch(); + stopWatch.Start(); + + if (!String.IsNullOrEmpty(DirectoryPath)) + { + // Build the list of directories array. + string[] arrPathsDirectories = Directory.GetDirectories(Path.Combine(DirectoryPath)); + int intTotal = arrPathsDirectories.Length; + int intTotalCompleted = 0; + + // Declarations + BackgroundWorker worker = (e != null) ? sender as BackgroundWorker : null; + + // Loop through the list of directories array. + foreach (string strPathDirectory in arrPathsDirectories) + { + if (worker != null && worker.CancellationPending == true) + { + e.Cancel = true; + break; + } + + // Build the list of files array. + var arrPathsFiles = Directory.EnumerateFiles(strPathDirectory); + + // Loop through the list of files array. + foreach (string strPathFile in arrPathsFiles) + { + // Move the file into the directory. + Log.Information("Info: Moving file (" + Path.GetFullPath(strPathFile) + ")"); + File.Move(strPathFile, Path.Combine(DirectoryPath, Path.GetFileName(strPathFile))); + } + + // Optionally delete the empty directory. + if (DeleteEmptyFolders == true && Directory.GetFileSystemEntries(strPathDirectory).Length == 0) + { + // Delete the empty directory. + Log.Information("Info: Deleting folder (" + Path.GetFullPath(strPathDirectory) + ")"); + Directory.Delete(strPathDirectory); + } + + // Step the overall progress bar. + intTotalCompleted++; + if (worker != null) + { + worker.ReportProgress(intTotalCompleted * 100 / intTotal); + } + + // Log.Information("Info: Completed " + intTotalCompleted + " out of " + intTotal); + } + } + else + { + // Print to screen + Log.Information("Info: No directory path was selected"); + + } + + // Print to screen + Log.Information("Folders 2 Files completed in " + stopWatch.Elapsed); + } + } + catch (Exception ex) + { + // Print to screen + Log.Error("Folders2Files failed"); + Log.Error(ex.Message); + // Log.Error(ex.StackTrace); + // Log.Error(ex.ToString()); + } + } + + #endregion + + #region Printers + + /// + /// EnumerateLines + /// + /// + /// + public IEnumerable EnumerateLines(TextReader reader) + { + string line; + + while ((line = reader.ReadLine()) != null) + { + yield return line; + } + } + + /// + /// ReadAllResourceLines + /// + /// + /// + public string[] ReadAllResourceLines(string resourceText) + { + using (StringReader reader = new StringReader(resourceText)) + { + return EnumerateLines(reader).ToArray(); + } + } + + /// + /// Prints the help text. + /// + public void PrintHelp() + { + // Read all of the lines of the file into an array. + string[] arrLines = ReadAllResourceLines(Properties.Resources.Files2Folders2Files_HELP_CMD); + + // Loop through each line of the array. + foreach (string strLine in arrLines) + { + // Print to screen. + Log.Information(strLine); + } + } + + /// + /// Prints the license text. + /// + public void PrintLicense() + { + // Read all of the lines of the file into an array. + string[] arrLines = ReadAllResourceLines(Properties.Resources.Files2Folders2Files_LICENSE); + + // Loop through each line of the array. + foreach (string strLine in arrLines) + { + // Print to screen. + Log.Information(strLine); + } + } + + /// + /// Prints the donation information. + /// + public void PrintDonationInfo() + { + // Read all of the lines of the file into an array. + string[] arrLines = ReadAllResourceLines(Properties.Resources.Files2Folders2Files_DONATIONS); + + // Loop through each line of the array. + foreach (string strLine in arrLines) + { + // Print to screen. + Log.Information(strLine); + } + } + + /// + /// Prints the version and copyright notice texts. + /// + public void PrintVersion() + { + // Print to screen + Log.Information("------------------------------------------------------------------"); + Log.Information(AppName + " v" + AppVersion); + Log.Information(AppCopyright); + Log.Debug("Lib: " + LibName + " v" + LibVersion); + Log.Debug("Lib: " + LibCopyright); + Log.Information("------------------------------------------------------------------"); + } + + /// + /// Prints the diagnostics information + /// + public void PrintDiagnosticsInfo() + { + try + { + // Print to screen + Log.Information("-Diagnostics Info"); + + // Print to screen + Log.Information("-Environment.OSVersion Detaiils"); + Log.Information("OS Version: " + Environment.OSVersion.Version.ToString()); + Log.Information("OS Platoform: " + Environment.OSVersion.Platform.ToString()); + Log.Information("OS SP: " + Environment.OSVersion.ServicePack.ToString()); + Log.Information("OS Version String: " + Environment.OSVersion.VersionString.ToString()); + + // Print to screen + Log.Information("-Environment.OSVersion.Version Detaiils"); + Log.Information("Major version: " + Environment.OSVersion.Version.Major.ToString()); + Log.Information("Major Revision: " + Environment.OSVersion.Version.MajorRevision.ToString()); + Log.Information("Minor version: " + Environment.OSVersion.Version.Minor.ToString()); + Log.Information("Minor Revision: " + Environment.OSVersion.Version.MinorRevision.ToString()); + Log.Information("Build: " + Environment.OSVersion.Version.Build.ToString()); + + // Print to screen + Log.Information("-Runtime.InteropServices.RuntimeInformation Detaiils"); + Log.Information("Framework Description: " + RuntimeInformation.FrameworkDescription.ToString()); + Log.Information("OS Architecture: " + RuntimeInformation.OSArchitecture.ToString()); + Log.Information("OS Description: " + RuntimeInformation.OSDescription.ToString()); + Log.Information("Process Architecture: " + RuntimeInformation.ProcessArchitecture.ToString()); + + // Print to screen + Log.Information("-Assembly.GetEntryAssembly Detaiils"); + Log.Information("Product Name: " + FileVersionInfo.GetVersionInfo(Assembly.GetEntryAssembly().Location).ProductName); + Log.Information("Product Version: " + FileVersionInfo.GetVersionInfo(Assembly.GetEntryAssembly().Location).ProductVersion); + Log.Information("Legal Copyright: " + FileVersionInfo.GetVersionInfo(Assembly.GetEntryAssembly().Location).LegalCopyright); + + // Print to screen + Log.Information("-Assembly.GetExecutingAssembly Detaiils"); + Log.Information("Product Name: " + FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).ProductName); + Log.Information("Product Version: " + FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).ProductVersion); + Log.Information("Legal Copyright: " + FileVersionInfo.GetVersionInfo(Assembly.GetExecutingAssembly().Location).LegalCopyright); + + // Print to screen + Log.Information("-Environment Detaiils"); + Log.Information("Processor Count: " + Environment.ProcessorCount.ToString()); + Log.Information("Is 64 Bit OS: " + Environment.Is64BitOperatingSystem.ToString()); + // Log.Information("Machine Name: " + Environment.MachineName.ToString()); + // Log.Information("User Name: " + Environment.UserName.ToString()); + + // Print to screen + // Log.Information("-App Details"); + // Log.Information(""); + } + catch (Exception ex) + { + // Print to screen + Log.Error("Test failed"); + Log.Error(ex.Message); + Log.Error(ex.StackTrace); + Log.Error(ex.ToString()); + } + } + + #endregion + } +} diff --git a/Files2Folders2Files/Files2Folders2Files.csproj b/Files2Folders2Files/Files2Folders2Files.csproj new file mode 100644 index 0000000..3a0cc65 --- /dev/null +++ b/Files2Folders2Files/Files2Folders2Files.csproj @@ -0,0 +1,86 @@ + + + + + Debug + AnyCPU + {CBAD4D51-B8D5-4F07-8C71-B152F284FDF2} + Library + Properties + Files2Folders2Files + Files2Folders2Files + v4.8 + 512 + true + + + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + bin\Debug\Files2Folders2Files.xml + + + none + true + bin\Release\ + TRACE + prompt + 4 + + + false + + + Files2Folders2Files.snk + + + + ..\packages\Serilog.2.12.0\lib\net47\Serilog.dll + + + ..\packages\Serilog.Sinks.Console.4.1.0\lib\net45\Serilog.Sinks.Console.dll + + + ..\packages\Serilog.Sinks.LogEmAll.0.0.7\lib\net461\Serilog.Sinks.LogEmAll.dll + + + + + + + + + + + + True + True + Resources.resx + + + + + PublicResXFileCodeGenerator + Resources.Designer.cs + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Files2Folders2Files/Files2Folders2Files.snk b/Files2Folders2Files/Files2Folders2Files.snk new file mode 100644 index 0000000..e582cd1 Binary files /dev/null and b/Files2Folders2Files/Files2Folders2Files.snk differ diff --git a/Files2Folders2Files/Properties/AssemblyInfo.cs b/Files2Folders2Files/Properties/AssemblyInfo.cs new file mode 100644 index 0000000..7e9fec3 --- /dev/null +++ b/Files2Folders2Files/Properties/AssemblyInfo.cs @@ -0,0 +1,36 @@ +using System.Reflection; +using System.Runtime.CompilerServices; +using System.Runtime.InteropServices; + +// General Information about an assembly is controlled through the following +// set of attributes. Change these attribute values to modify the information +// associated with an assembly. +[assembly: AssemblyTitle("Files2Folders2Files")] +[assembly: AssemblyDescription("The Original Automated Files 2 Folders 2 Files")] +[assembly: AssemblyConfiguration("")] +[assembly: AssemblyCompany("Files 2 Folders 2 Files")] +[assembly: AssemblyProduct("Files2Folders2Files")] +[assembly: AssemblyCopyright("Copyright (c) 2016-2025 Files 2 Folders 2 Files - All Rights Reserved")] +[assembly: AssemblyTrademark("Files 2 Folders 2 Files - The Original Automated Files 2 Folders 2 Files")] +[assembly: AssemblyCulture("")] + +// Setting ComVisible to false makes the types in this assembly not visible +// to COM components. If you need to access a type in this assembly from +// COM, set the ComVisible attribute to true on that type. +[assembly: ComVisible(false)] + +// The following GUID is for the ID of the typelib if this project is exposed to COM +[assembly: Guid("cbad4d51-b8d5-4f07-8c71-b152f284fdf2")] + +// Version information for an assembly consists of the following four values: +// +// Major Version +// Minor Version +// Build Number +// Revision +// +// You can specify all the values or you can default the Build and Revision Numbers +// by using the '*' as shown below: +// [assembly: AssemblyVersion("1.0.*")] +[assembly: AssemblyVersion("0.1.2")] +[assembly: AssemblyFileVersion("0.1.2")] diff --git a/Files2Folders2Files/Properties/Resources.Designer.cs b/Files2Folders2Files/Properties/Resources.Designer.cs new file mode 100644 index 0000000..f98c705 --- /dev/null +++ b/Files2Folders2Files/Properties/Resources.Designer.cs @@ -0,0 +1,146 @@ +//------------------------------------------------------------------------------ +// +// This code was generated by a tool. +// Runtime Version:4.0.30319.42000 +// +// Changes to this file may cause incorrect behavior and will be lost if +// the code is regenerated. +// +//------------------------------------------------------------------------------ + +namespace Files2Folders2Files.Properties { + using System; + + + /// + /// A strongly-typed resource class, for looking up localized strings, etc. + /// + // This class was auto-generated by the StronglyTypedResourceBuilder + // class via a tool like ResGen or Visual Studio. + // To add or remove a member, edit your .ResX file then rerun ResGen + // with the /str option, or rebuild your VS project. + [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")] + [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] + [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] + public class Resources { + + private static global::System.Resources.ResourceManager resourceMan; + + private static global::System.Globalization.CultureInfo resourceCulture; + + [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] + internal Resources() { + } + + /// + /// Returns the cached ResourceManager instance used by this class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + public static global::System.Resources.ResourceManager ResourceManager { + get { + if (object.ReferenceEquals(resourceMan, null)) { + global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Files2Folders2Files.Properties.Resources", typeof(Resources).Assembly); + resourceMan = temp; + } + return resourceMan; + } + } + + /// + /// Overrides the current thread's CurrentUICulture property for all + /// resource lookups using this strongly typed resource class. + /// + [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] + public static global::System.Globalization.CultureInfo Culture { + get { + return resourceCulture; + } + set { + resourceCulture = value; + } + } + + /// + /// Looks up a localized string similar to ------------------------------------------------------------------ + ///DownloadEmAll - Donations version 20240901 + ///Copyright (c) 2016-2024 DownloadEmAll - All Rights Reserved + ///------------------------------------------------------------------ + /// + ///As you may know, a lot of time, effort and hard work goes into the + ///development and maintenance of a world class automated dat + ///downloader. Likewise, a lot of time, effort and hard work goes + ///into the development and maintenance of a world class datafile + ///database. If [rest of string was truncated]";. + /// + public static string Files2Folders2Files_DONATIONS { + get { + return ResourceManager.GetString("Files2Folders2Files_DONATIONS", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to --------------------------------------------------------------- + ///Files 2 Folders 2 Files - Help version 20240901 + ///Copyright (c) 2016-2024 Files 2 Folders 2 Files - All Rights Reserved + ///--------------------------------------------------------------- + /// + ///[I] About + ///[II] Contributing + ///[III] Contact + ///[IV] Disclaimer + /// + ///[I] About + ///--------------------------------------------------------------- + ///Files 2 Folders 2 Files, or F2F2F is the original automated file s to folder and folder 2 files converter. This is usefu [rest of string was truncated]";. + /// + public static string Files2Folders2Files_HELP { + get { + return ResourceManager.GetString("Files2Folders2Files_HELP", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to ------------------------------------------------------------------ + ///DownloadEmAll - Help - CMD version 20240901 + ///Copyright (c) 2016-2024 DownloadEmAll - All Rights Reserved + ///------------------------------------------------------------------ + /// + ///Usage: + /// DownloadEmAll-CLI.exe [-command] [option:] + /// Options that contain spaces must be enclosed in quotations + /// Options may be specified in any order + /// Only one command may be used + /// If no command is passed then -all will be used + /// + ///-------------------------------- [rest of string was truncated]";. + /// + public static string Files2Folders2Files_HELP_CMD { + get { + return ResourceManager.GetString("Files2Folders2Files_HELP_CMD", resourceCulture); + } + } + + /// + /// Looks up a localized string similar to *************************************************************** + ///Files 2 Folders 2 Files - License version 20240901 + ///Copyright (c) 2000-2024 Files 2 Folders 2 Files + ///All Rights Reserved + ///*************************************************************** + /// + ///TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + /// + ///1. Redistributions in any form are not permitted whatsoever, + /// under any conditions. + /// + ///2. This software may not be reverse engineered, decompiled, + /// or disassembled. + /// + ///3. Files 2 Folders [rest of string was truncated]";. + /// + public static string Files2Folders2Files_LICENSE { + get { + return ResourceManager.GetString("Files2Folders2Files_LICENSE", resourceCulture); + } + } + } +} diff --git a/Files2Folders2Files/Properties/Resources.resx b/Files2Folders2Files/Properties/Resources.resx new file mode 100644 index 0000000..6087c2f --- /dev/null +++ b/Files2Folders2Files/Properties/Resources.resx @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text/microsoft-resx + + + 2.0 + + + System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 + + + + ..\Resources\Docs\Files2Folders2Files-DONATIONS.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + ..\Resources\Docs\Files2Folders2Files-HELP.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + ..\Resources\Docs\Files2Folders2Files-HELP-CMD.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + + ..\Resources\Docs\Files2Folders2Files-LICENSE.txt;System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252 + + \ No newline at end of file diff --git a/Files2Folders2Files/Resources/Docs/Files2Folders2Files-DONATIONS.txt b/Files2Folders2Files/Resources/Docs/Files2Folders2Files-DONATIONS.txt new file mode 100644 index 0000000..e647c07 --- /dev/null +++ b/Files2Folders2Files/Resources/Docs/Files2Folders2Files-DONATIONS.txt @@ -0,0 +1,16 @@ +------------------------------------------------------------------ +Files 2 Folders 2 Files - Donations version 20250729 +Copyright (c) 2016-2025 Files 2 Folders 2 Files +All Rights Reserved +------------------------------------------------------------------ + +As you may know, a lot of time, effort and hard work goes into the +development and maintenance of a world class automated files 2 +folders 2 files app. If you like or use this software regularly, +maybe you would like to make a donation. + +Please use the following donation link to make a donation: + +https://www.devemall.int.eu.org/index.php?action=donations + +Home Page: https://www.devemall.int.eu.org/ diff --git a/Files2Folders2Files/Resources/Docs/Files2Folders2Files-HELP-CMD.txt b/Files2Folders2Files/Resources/Docs/Files2Folders2Files-HELP-CMD.txt new file mode 100644 index 0000000..83139d7 --- /dev/null +++ b/Files2Folders2Files/Resources/Docs/Files2Folders2Files-HELP-CMD.txt @@ -0,0 +1,55 @@ +------------------------------------------------------------------ +Files 2 Folders 2 Files - Help - CMD version 20250729 +Copyright (c) 2016-2025 Files 2 Folders 2 Files +All Rights Reserved +------------------------------------------------------------------ + +Usage: + Files2Folders2Files-CLI.exe [-command] [option:] + Options that contain spaces must be enclosed in quotations + Options may be specified in any order + Only one command may be used + If no command is passed then -help will be used + +------------------------------------------------------------------ + +Folders 2 Files Example: + Files2Folders2Files-CLI.exe -folders2files + +Files 2 Folders Example: + Files2Folders2Files-CLI.exe -files2folders + +------------------------------------------------------------------ + +WARNING: + Using invalid options values may cause this app to crash! + +------------------------------------------------------------------ + +Standard Commands: + -folders2files Builds files from folders + -files2folders Builds folders from files + -help Print the help + -donations Print the donations information + -license Print the license + -version Print the version + -registerapp Registers the app + +------------------------------------------------------------------ + +Output Options: + DE: Delete Empty Folders + 0 No + 1 Yes - DEFAULT + +------------------------------------------------------------------ + +Path Options: + DP: Path to the directory path + +------------------------------------------------------------------ + +Registration Options: + RA: Register app username + RB: Register app email address + RC: Register app password diff --git a/Files2Folders2Files/Resources/Docs/Files2Folders2Files-HELP.txt b/Files2Folders2Files/Resources/Docs/Files2Folders2Files-HELP.txt new file mode 100644 index 0000000..5ebdbf3 --- /dev/null +++ b/Files2Folders2Files/Resources/Docs/Files2Folders2Files-HELP.txt @@ -0,0 +1,44 @@ +--------------------------------------------------------------- +Files 2 Folders 2 Files - Help version 20250729 +Copyright (c) 2016-2025 Files 2 Folders 2 Files +All Rights Reserved +--------------------------------------------------------------- + +[I] About +[II] Contributing +[III] Contact +[IV] Disclaimer + +[I] About +--------------------------------------------------------------- +Files 2 Folders 2 Files, or F2F2F is the original automated files to folders and folders to files converter. This is useful for converting back and forth between organizing your Gamecube games for playing them on a modded Wii and organizing them for sharing. + +Files 2 Folders 2 Files can perform the following tasks: +* Files 2 Folders - Moves all the files from a single directory into folders of matching names. +* Folders 2 Files - Moves all the files from all the folders into a single directory. + +[II] Contributing +--------------------------------------------------------------- +Let's work better together. We are looking to collaborate with like-minded people who want to contribute in any capacity. Collaboration is open to everyone and we need your help if you are a: +* Collector +* Database Administrator +* Datter +* Developer +* Dumper +* Graphic Artist +* Translator +* Player +* Tester + +Feel free to: +* Fork the repository +* Branch your repository with a meaningful name related to the changes you are making +* Create a pull request + +[III] Contact +--------------------------------------------------------------- +GitEmAll: https://gitemall.devemall.int.eu.org/TommySalami/Files2Folders2Files + +[IV] Disclaimer +--------------------------------------------------------------- +This software may only be used and/or distributed in accordance with the license with which it is distributed. diff --git a/Files2Folders2Files/Resources/Docs/Files2Folders2Files-LICENSE.rtf b/Files2Folders2Files/Resources/Docs/Files2Folders2Files-LICENSE.rtf new file mode 100644 index 0000000..a28e39d Binary files /dev/null and b/Files2Folders2Files/Resources/Docs/Files2Folders2Files-LICENSE.rtf differ diff --git a/Files2Folders2Files/Resources/Docs/Files2Folders2Files-LICENSE.txt b/Files2Folders2Files/Resources/Docs/Files2Folders2Files-LICENSE.txt new file mode 100644 index 0000000..89ea039 --- /dev/null +++ b/Files2Folders2Files/Resources/Docs/Files2Folders2Files-LICENSE.txt @@ -0,0 +1,40 @@ +*************************************************************** +Files 2 Folders 2 Files - License version 20250729 +Copyright (c) 2000-2025 Files 2 Folders 2 Files +All Rights Reserved +*************************************************************** + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Redistributions in any form are not permitted whatsoever, + under any conditions. + +2. This software may not be reverse engineered, decompiled, + or disassembled. + +3. Files 2 Folders 2 Files may publish revised and/or new + versions of the license from time to time. Each version + will be given a distinguishing version number. No one other + than Files 2 Folders 2 Files has the right to modify the + terms applicable to covered code created under this + License. + +4. It is your responsibility to use this software in accordance + with all applicable laws. + +*************************************************************** + +THIS SOFTWARE IS PROVIDED BY THE FILES 2 FOLDERS 2 FILES +DEVELOPMENT TEAM 'AS IS' AND ANY EXPRESSED OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +FILES 2 FOLDERS 2 FILES DEVELOPMENT TEAM OR ITS CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +THE POSSIBILITY OF SUCH DAMAGE. diff --git a/Files2Folders2Files/Resources/Options/put your options files in this directory.txt b/Files2Folders2Files/Resources/Options/put your options files in this directory.txt new file mode 100644 index 0000000..6d78808 --- /dev/null +++ b/Files2Folders2Files/Resources/Options/put your options files in this directory.txt @@ -0,0 +1 @@ +This file can be deleted. \ No newline at end of file diff --git a/Files2Folders2Files/packages.config b/Files2Folders2Files/packages.config new file mode 100644 index 0000000..b927374 --- /dev/null +++ b/Files2Folders2Files/packages.config @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..89ea039 --- /dev/null +++ b/LICENSE @@ -0,0 +1,40 @@ +*************************************************************** +Files 2 Folders 2 Files - License version 20250729 +Copyright (c) 2000-2025 Files 2 Folders 2 Files +All Rights Reserved +*************************************************************** + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Redistributions in any form are not permitted whatsoever, + under any conditions. + +2. This software may not be reverse engineered, decompiled, + or disassembled. + +3. Files 2 Folders 2 Files may publish revised and/or new + versions of the license from time to time. Each version + will be given a distinguishing version number. No one other + than Files 2 Folders 2 Files has the right to modify the + terms applicable to covered code created under this + License. + +4. It is your responsibility to use this software in accordance + with all applicable laws. + +*************************************************************** + +THIS SOFTWARE IS PROVIDED BY THE FILES 2 FOLDERS 2 FILES +DEVELOPMENT TEAM 'AS IS' AND ANY EXPRESSED OR IMPLIED +WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +FILES 2 FOLDERS 2 FILES DEVELOPMENT TEAM OR ITS CONTRIBUTORS BE +LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, +EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING +IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +THE POSSIBILITY OF SUCH DAMAGE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..b15b1b6 --- /dev/null +++ b/README.md @@ -0,0 +1,42 @@ +# @Files2Folders2Files +### The Original Automated Files 2 Folders 2 Files +## About +Files 2 Folders 2 Files, or F2F2F is the original automated files to folders and folders to files converter. This is useful for converting back and forth between organizing your Gamecube games for playing them on a modded Wii and organizing them for sharing. + +Files 2 Folders 2 Files can perform the following tasks: +* Files 2 Folders - Moves all the files from a single directory into folders of matching names. +* Folders 2 Files - Moves all the files from all the folders into a single directory. +## Dependencies +.NET Framework 4.8 + +The following tools, extensions and external programs are required to be installed: +* Microsoft Visual Studio Installer Projects +## Projects +* Files2Folders2Files - Class Library +* Files2Folders2Files-CLI - Console App +* Files2Folders2Files-GUI - Windows Forms App +* Files2Folders2Files-Installer - Installer Project +* Files2Folders2Files-Release - Release Project +## Contributing +Let's work better together. We are looking to collaborate with like-minded people who want to contribute in any capacity. Collaboration is open to everyone and we need your help if you are a: +* Collector +* Database Administrator +* Datter +* Developer +* Dumper +* Graphic Artist +* Translator +* Player +* Tester + +Feel free to: +* Fork the repository +* Create an issue +* Branch your repository with the issue number and a meaningful name related to the changes you are making +* Create a pull request + +## Contact +GitEmAll: [https://gitemall.devemall.int.eu.org/TommySalami/Files2Folders2Files](https://gitemall.devemall.int.eu.org/TommySalami/Files2Folders2Files "GitEmAll") + +--- +###### Copyright (c) 2016-2025 Files 2 Folders 2 Files - All Rights Reserved v2025-07-29-00 diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..a38578c --- /dev/null +++ b/TODO.md @@ -0,0 +1,5 @@ +### To Do +* Nothing to do + +### Completed Tasks +* Develop initial release