1
0
mirror of https://github.com/chylex/TweetDuck.git synced 2025-05-04 08:34:07 +02:00

Cleanup FileSerializer Write/Read calls & change exception for empty files

This commit is contained in:
chylex 2017-11-07 18:10:38 +01:00
parent 18f8d5b269
commit 9a6b615174
4 changed files with 18 additions and 15 deletions
Configuration
Core/Other/Analytics
Data/Serialization

View File

@ -1,6 +1,5 @@
using System; using System;
using System.IO; using System.IO;
using TweetDuck.Core.Utils;
using TweetDuck.Data.Serialization; using TweetDuck.Data.Serialization;
namespace TweetDuck.Configuration{ namespace TweetDuck.Configuration{
@ -34,7 +33,6 @@ private SystemConfig(string file){
public bool Save(){ public bool Save(){
try{ try{
WindowsUtils.CreateDirectoryForFile(file);
Serializer.Write(file, this); Serializer.Write(file, this);
return true; return true;
}catch(Exception e){ }catch(Exception e){
@ -47,9 +45,7 @@ public static SystemConfig Load(string file){
SystemConfig config = new SystemConfig(file); SystemConfig config = new SystemConfig(file);
try{ try{
Serializer.Read(file, config); Serializer.ReadIfExists(file, config);
}catch(FileNotFoundException){
}catch(DirectoryNotFoundException){
}catch(Exception e){ }catch(Exception e){
Program.Reporter.HandleException("Configuration Error", "Could not open the system configuration file. If you continue, you will lose system specific configuration such as Hardware Acceleration.", true, e); Program.Reporter.HandleException("Configuration Error", "Could not open the system configuration file. If you continue, you will lose system specific configuration such as Hardware Acceleration.", true, e);
} }

View File

@ -142,8 +142,6 @@ private UserConfig(string file){
public bool Save(){ public bool Save(){
try{ try{
WindowsUtils.CreateDirectoryForFile(file);
if (File.Exists(file)){ if (File.Exists(file)){
string backupFile = GetBackupFile(file); string backupFile = GetBackupFile(file);
File.Delete(backupFile); File.Delete(backupFile);

View File

@ -1,6 +1,4 @@
using System; using System;
using System.IO;
using TweetDuck.Core.Utils;
using TweetDuck.Data.Serialization; using TweetDuck.Data.Serialization;
namespace TweetDuck.Core.Other.Analytics{ namespace TweetDuck.Core.Other.Analytics{
@ -30,7 +28,6 @@ private AnalyticsFile(string file){
public bool Save(){ public bool Save(){
try{ try{
WindowsUtils.CreateDirectoryForFile(file);
Serializer.Write(file, this); Serializer.Write(file, this);
return true; return true;
}catch(Exception e){ }catch(Exception e){
@ -43,9 +40,7 @@ public static AnalyticsFile Load(string file){
AnalyticsFile config = new AnalyticsFile(file); AnalyticsFile config = new AnalyticsFile(file);
try{ try{
Serializer.Read(file, config); Serializer.ReadIfExists(file, config);
}catch(FileNotFoundException){
}catch(DirectoryNotFoundException){
}catch(Exception e){ }catch(Exception e){
Program.Reporter.HandleException("Analytics File Error", "Could not open the analytics file.", true, e); Program.Reporter.HandleException("Analytics File Error", "Could not open the analytics file.", true, e);
} }

View File

@ -4,6 +4,7 @@
using System.Linq; using System.Linq;
using System.Reflection; using System.Reflection;
using System.Runtime.Serialization; using System.Runtime.Serialization;
using TweetDuck.Core.Utils;
namespace TweetDuck.Data.Serialization{ namespace TweetDuck.Data.Serialization{
sealed class FileSerializer<T>{ sealed class FileSerializer<T>{
@ -28,6 +29,8 @@ public void RegisterTypeConverter(Type type, ITypeConverter converter){
} }
public void Write(string file, T obj){ public void Write(string file, T obj){
WindowsUtils.CreateDirectoryForFile(file);
using(StreamWriter writer = new StreamWriter(new FileStream(file, FileMode.Create, FileAccess.Write, FileShare.None))){ using(StreamWriter writer = new StreamWriter(new FileStream(file, FileMode.Create, FileAccess.Write, FileShare.None))){
foreach(KeyValuePair<string, PropertyInfo> prop in props){ foreach(KeyValuePair<string, PropertyInfo> prop in props){
Type type = prop.Value.PropertyType; Type type = prop.Value.PropertyType;
@ -54,8 +57,12 @@ public void Read(string file, T obj){
Dictionary<string, string> unknownProperties = new Dictionary<string, string>(4); Dictionary<string, string> unknownProperties = new Dictionary<string, string>(4);
using(StreamReader reader = new StreamReader(new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read))){ using(StreamReader reader = new StreamReader(new FileStream(file, FileMode.Open, FileAccess.Read, FileShare.Read))){
if (reader.Peek() <= 1){ switch(reader.Peek()){
throw new FormatException("Input appears to be a binary file."); case -1:
throw new FormatException("File is empty.");
case 0:
case 1:
throw new FormatException("Input appears to be a binary file.");
} }
foreach(string line in reader.ReadToEnd().Split(new string[]{ NewLineReal }, StringSplitOptions.RemoveEmptyEntries)){ foreach(string line in reader.ReadToEnd().Split(new string[]{ NewLineReal }, StringSplitOptions.RemoveEmptyEntries)){
@ -95,6 +102,13 @@ public void Read(string file, T obj){
} }
} }
public void ReadIfExists(string file, T obj){
try{
Read(file, obj);
}catch(FileNotFoundException){
}catch(DirectoryNotFoundException){}
}
private sealed class BasicTypeConverter : ITypeConverter{ private sealed class BasicTypeConverter : ITypeConverter{
bool ITypeConverter.TryWriteType(Type type, object value, out string converted){ bool ITypeConverter.TryWriteType(Type type, object value, out string converted){
switch(Type.GetTypeCode(type)){ switch(Type.GetTypeCode(type)){