Skip to content

Commit 3596572

Browse files
committed
Implement the possiblity to enter the file extension for each name association and make the configuration file upgradeable
This is the first step to expand the program's usability and remove the limitation to PDF. See #1
1 parent fe4ce3b commit 3596572

6 files changed

Lines changed: 116 additions & 18 deletions

File tree

PatternFileMover/Form1.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ public partial class Form1 : Form
1010
{
1111
private FolderBrowserDialog sourceFolderBrowserDialog = new FolderBrowserDialog();
1212
private string sourceDirectory;
13-
private List<NameAssociationsData> nameAssociations = new List<NameAssociationsData>();
13+
private List<NameAssociationsData_v2> nameAssociations = new List<NameAssociationsData_v2>();
1414
private int processedFileCount = 0;
1515

1616
public Form1()
@@ -23,13 +23,17 @@ public Form1()
2323
dataGridView1.Columns[0].Name = "Dateiname";
2424

2525
// ensure the existance of the necessary config file
26-
if (!File.Exists(NameAssociations.configPath))
26+
if (!File.Exists(NameAssociations.configManifestPath))
2727
{
2828
// file not found
2929
// typically at the first usage of the program
3030
// create an empty config file
3131
NameAssociations.CreateEmptyConfigFile();
3232
}
33+
else
34+
{
35+
NameAssociations.checkAndUpgradeConfigurationFile();
36+
}
3337

3438
// background worker
3539
backgroundWorker1.DoWork += new DoWorkEventHandler(backgroundWorker1_DoWork);
@@ -89,7 +93,7 @@ void backgroundWorker1_DoWork(object sender, DoWorkEventArgs eventArgs)
8993
{
9094
for (int i = 0; i <= dataGridView1.RowCount - 1; i++)
9195
{
92-
foreach (NameAssociationsData data in this.nameAssociations)
96+
foreach (NameAssociationsData_v2 data in this.nameAssociations)
9397
{
9498
if (dataGridView1.Rows[i].Cells[0].Value.ToString().Contains(data.SearchPattern))
9599
{
Lines changed: 78 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using Newtonsoft.Json;
2+
using System;
23
using System.Collections.Generic;
34
using System.IO;
45
using System.Windows.Forms;
@@ -7,15 +8,17 @@ namespace PatternFileMover
78
{
89
class NameAssociations
910
{
10-
public static string _configPath = Application.StartupPath + Path.DirectorySeparatorChar + "nameAssociations.json";
11-
12-
public static string configPath { get => _configPath; }
11+
public static string _legacyConfigPath = Application.StartupPath + Path.DirectorySeparatorChar + "nameAssociations.json";
12+
public static string _configManifestPath = Application.StartupPath + Path.DirectorySeparatorChar + "manifest.json";
13+
public static string legacyConfigPath { get => _legacyConfigPath; }
14+
public static string configManifestPath { get => _configManifestPath; }
1315

1416
public static bool CreateEmptyConfigFile()
1517
{
1618
try
1719
{
18-
File.WriteAllText(configPath, JsonConvert.SerializeObject(new List<NameAssociationsData>()));
20+
File.WriteAllText(configManifestPath, "v2");
21+
File.WriteAllText(GetConfigFilePath(), JsonConvert.SerializeObject(new List<NameAssociationsData_v2>()));
1922
}
2023
catch (System.ArgumentException)
2124
{
@@ -25,14 +28,81 @@ public static bool CreateEmptyConfigFile()
2528
return true;
2629
}
2730

28-
public static List<NameAssociationsData> LoadFromExistingConfigFile()
31+
public static string GetConfigFilePath()
32+
{
33+
return Application.StartupPath +
34+
Path.DirectorySeparatorChar +
35+
"nameAssociation_" +
36+
File.ReadAllText(Path.GetFullPath(configManifestPath)) +
37+
".json";
38+
}
39+
40+
public static void checkAndUpgradeConfigurationFile() {
41+
string manifestVersion = File.ReadAllText(Path.GetFullPath(configManifestPath));
42+
43+
if (!File.Exists(Path.GetFullPath(GetConfigFilePath())))
44+
{
45+
// we could not find a configuration file that matches the config manifest
46+
// lets check if we find an outdated file that should be updated
47+
48+
// version 1 (before implementing the file manifest)
49+
if (File.Exists(Path.GetFullPath(legacyConfigPath)))
50+
{
51+
List<NameAssociationsData_v1> legacyValues = LoadFromExistingConfigFile_v1(legacyConfigPath);
52+
List<NameAssociationsData_v2> convertedValues = new List<NameAssociationsData_v2>();
53+
54+
foreach (NameAssociationsData_v1 value in legacyValues) {
55+
convertedValues.Add(new NameAssociationsData_v2()
56+
{
57+
Name = value.Name,
58+
SearchPattern = value.SearchPattern,
59+
TargetDirectory = value.TargetDirectory,
60+
// version 1 only allows the processing of .pdf files
61+
FileExtension = ".pdf"
62+
});
63+
}
64+
65+
WriteByList(convertedValues);
66+
}
67+
}
68+
}
69+
70+
public static List<NameAssociationsData_v2> LoadFromExistingConfigFile() {
71+
return LoadFromExistingConfigFile_v2();
72+
}
73+
74+
public static List<NameAssociationsData_v1> LoadFromExistingConfigFile_v1(string path = "")
2975
{
30-
return JsonConvert.DeserializeObject<List<NameAssociationsData>>(File.ReadAllText(Path.GetFullPath(configPath)));
76+
if (String.IsNullOrEmpty(path))
77+
{
78+
path = GetConfigFilePath();
79+
}
80+
81+
return JsonConvert.DeserializeObject<List<NameAssociationsData_v1>>(File.ReadAllText(Path.GetFullPath(path)));
82+
}
83+
84+
public static List<NameAssociationsData_v2> LoadFromExistingConfigFile_v2(string path = "")
85+
{
86+
if (String.IsNullOrEmpty(path))
87+
{
88+
path = GetConfigFilePath();
89+
}
90+
91+
return JsonConvert.DeserializeObject<List<NameAssociationsData_v2>>(File.ReadAllText(Path.GetFullPath(path)));
3192
}
3293

33-
public static void WriteByList(List<NameAssociationsData> list)
94+
public static void WriteByList(List<NameAssociationsData_v2> list)
3495
{
35-
File.WriteAllText(configPath, JsonConvert.SerializeObject(list));
96+
File.WriteAllText(
97+
GetConfigFilePath(),
98+
JsonConvert.SerializeObject(
99+
list,
100+
Formatting.None,
101+
new JsonSerializerSettings {
102+
DefaultValueHandling = DefaultValueHandling.Include,
103+
}
104+
)
105+
);
36106
}
37107
}
38108
}

PatternFileMover/NameAssociationsData.cs renamed to PatternFileMover/NameAssociationsData_v1.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1-
namespace PatternFileMover
1+
using Newtonsoft.Json;
2+
using System.ComponentModel;
3+
4+
namespace PatternFileMover
25
{
3-
internal class NameAssociationsData
6+
internal class NameAssociationsData_v1
47
{
58
[System.ComponentModel.DisplayName("Name")]
69
public string Name { get; set; }
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
using Newtonsoft.Json;
2+
using System.ComponentModel;
3+
4+
namespace PatternFileMover
5+
{
6+
internal class NameAssociationsData_v2
7+
{
8+
[System.ComponentModel.DisplayName("Name")]
9+
public string Name { get; set; }
10+
[System.ComponentModel.DisplayName("Suchmuster")]
11+
public string SearchPattern { get; set; }
12+
[System.ComponentModel.DisplayName("Ziel-Pfad")]
13+
public string TargetDirectory { get; set; }
14+
[System.ComponentModel.DisplayName("Dateiendung")]
15+
[JsonProperty(PropertyName = "FileExtension", DefaultValueHandling = DefaultValueHandling.IgnoreAndPopulate)]
16+
[DefaultValue("*.*")]
17+
public string FileExtension { get; set; }
18+
}
19+
}

PatternFileMover/NameAssociationsForm.cs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ public NameAssociationsForm()
1616

1717
private void NameAssociationsForm_Load(object sender, EventArgs e)
1818
{
19-
var dataList = new BindingList<NameAssociationsData>(NameAssociations.LoadFromExistingConfigFile()).OrderBy(x => x.Name).ToList();
19+
var dataList = new BindingList<NameAssociationsData_v2>(NameAssociations.LoadFromExistingConfigFile()).OrderBy(x => x.Name).ToList();
2020
var dataSource = new BindingSource(dataList, null);
2121

2222
panel1.Controls.Add(dataGridView1);
@@ -113,7 +113,7 @@ private void dataGridView1_UserDeletedRow(object sender, DataGridViewRowEventArg
113113

114114
private void button1_Click(object sender, EventArgs e)
115115
{
116-
List<NameAssociationsData> nameAssociationsData = new List<NameAssociationsData>();
116+
List<NameAssociationsData_v2> nameAssociationsData = new List<NameAssociationsData_v2>();
117117
foreach (DataGridViewRow dataGridViewRow in dataGridView1.Rows)
118118
{
119119
if (dataGridViewRow.Index == (dataGridView1.Rows.Count -1))
@@ -123,10 +123,11 @@ private void button1_Click(object sender, EventArgs e)
123123
continue;
124124
}
125125

126-
nameAssociationsData.Add(new NameAssociationsData() {
126+
nameAssociationsData.Add(new NameAssociationsData_v2() {
127127
Name = dataGridViewRow.Cells[0].Value?.ToString() ?? "",
128128
SearchPattern = dataGridViewRow.Cells[1].Value.ToString(),
129-
TargetDirectory = dataGridViewRow.Cells[2].Value.ToString()
129+
TargetDirectory = dataGridViewRow.Cells[2].Value.ToString(),
130+
FileExtension = dataGridViewRow.Cells[3].Value.ToString()
130131
});
131132
}
132133

PatternFileMover/PatternFileMover.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,14 @@
4949
<Reference Include="System.Xml" />
5050
</ItemGroup>
5151
<ItemGroup>
52+
<Compile Include="NameAssociationsData_v2.cs" />
5253
<Compile Include="NameAssociationsForm.cs">
5354
<SubType>Form</SubType>
5455
</Compile>
5556
<Compile Include="NameAssociationsForm.Designer.cs">
5657
<DependentUpon>NameAssociationsForm.cs</DependentUpon>
5758
</Compile>
58-
<Compile Include="NameAssociationsData.cs" />
59+
<Compile Include="NameAssociationsData_v1.cs" />
5960
<Compile Include="NameAssociations.cs" />
6061
<Compile Include="Form1.cs">
6162
<SubType>Form</SubType>

0 commit comments

Comments
 (0)