mirror of
https://github.com/PredatH0r/ChanSort.git
synced 2026-03-03 18:50:44 +01:00
- unified handling for deleting channels (action based on file format support either mark-as-deleted, remove-from-file, append-at-end)
- added unit tests - internal code cleanup
This commit is contained in:
@@ -1,4 +1,7 @@
|
||||
using System.Text;
|
||||
using System.IO;
|
||||
using System.IO.Compression;
|
||||
using System.Text;
|
||||
using System.Windows.Forms;
|
||||
|
||||
namespace ChanSort.Api
|
||||
{
|
||||
@@ -6,21 +9,34 @@ namespace ChanSort.Api
|
||||
{
|
||||
#region class SupportedFeatures
|
||||
|
||||
public enum DeleteMode
|
||||
{
|
||||
NotSupported = 0,
|
||||
Physically = 1,
|
||||
FlagWithoutPrNr = 2,
|
||||
FlagWithPrNr = 3
|
||||
}
|
||||
|
||||
public class SupportedFeatures
|
||||
{
|
||||
public ChannelNameEditMode ChannelNameEdit { get; set; }
|
||||
public bool CleanUpChannelData { get; set; }
|
||||
public bool DeviceSettings { get; set; }
|
||||
public bool CanDeleteChannels { get; set; }
|
||||
public bool CanSkipChannels { get; set; } = true;
|
||||
public bool CanHaveGaps { get; set; }
|
||||
public bool CanHaveGaps { get; set; } = true;
|
||||
public bool EncryptedFlagEdit { get; set; }
|
||||
public DeleteMode DeleteMode { get; set; } = DeleteMode.NotSupported;
|
||||
|
||||
|
||||
public Favorites SupportedFavorites { get; set; } = Favorites.A | Favorites.B | Favorites.C | Favorites.D;
|
||||
public bool SortedFavorites { get; set; }
|
||||
public bool MixedSourceFavorites { get; set; }
|
||||
public bool AllowGapsInFavNumbers { get; set; }
|
||||
|
||||
public bool CanDeleteChannelsWithFlag => this.DeleteMode == DeleteMode.FlagWithPrNr || this.DeleteMode == DeleteMode.FlagWithoutPrNr;
|
||||
public bool CanDeleteChannelsFromFile => this.DeleteMode == DeleteMode.Physically;
|
||||
public bool DeletedChannelsNeedNumbers => this.DeleteMode == DeleteMode.FlagWithPrNr;
|
||||
|
||||
public SupportedFeatures()
|
||||
{
|
||||
this.CanDeleteChannels = true;
|
||||
this.CanHaveGaps = true;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
|
||||
@@ -28,17 +44,15 @@ namespace ChanSort.Api
|
||||
|
||||
public string FileName { get; set; }
|
||||
public DataRoot DataRoot { get; protected set; }
|
||||
public SupportedFeatures Features { get; private set; }
|
||||
public SupportedFeatures Features { get; } = new SupportedFeatures();
|
||||
|
||||
protected SerializerBase(string inputFile)
|
||||
{
|
||||
this.Features = new SupportedFeatures();
|
||||
this.FileName = inputFile;
|
||||
this.DataRoot = new DataRoot();
|
||||
this.defaultEncoding = Encoding.GetEncoding("iso-8859-9");
|
||||
this.DataRoot = new DataRoot(this);
|
||||
}
|
||||
|
||||
public abstract string DisplayName { get; }
|
||||
public abstract void Load();
|
||||
public abstract void Save(string tvOutputFile);
|
||||
|
||||
@@ -48,8 +62,7 @@ namespace ChanSort.Api
|
||||
set { this.defaultEncoding = value; }
|
||||
}
|
||||
|
||||
public virtual void EraseChannelData() { }
|
||||
|
||||
#region GetFileInformation()
|
||||
public virtual string GetFileInformation()
|
||||
{
|
||||
StringBuilder sb = new StringBuilder();
|
||||
@@ -85,9 +98,52 @@ namespace ChanSort.Api
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
#endregion
|
||||
|
||||
public virtual void ShowDeviceSettingsForm(object parentWindow) { }
|
||||
|
||||
public virtual string CleanUpChannelData() { return ""; }
|
||||
|
||||
|
||||
// common implementation helper methods
|
||||
|
||||
protected string UnzipFileToTempFolder()
|
||||
{
|
||||
var tempDir = this.FileName + ".tmp";
|
||||
|
||||
if (Directory.Exists(tempDir))
|
||||
Directory.Delete(tempDir, true);
|
||||
Directory.CreateDirectory(tempDir);
|
||||
ZipFile.ExtractToDirectory(this.FileName, tempDir);
|
||||
this.DeleteOnExit(tempDir);
|
||||
return tempDir;
|
||||
}
|
||||
|
||||
protected void ZipToOutputFile(string tvOutputFile)
|
||||
{
|
||||
var tempDir = this.FileName + ".tmp";
|
||||
File.Delete(tvOutputFile);
|
||||
ZipFile.CreateFromDirectory(tempDir, tvOutputFile);
|
||||
this.FileName = tvOutputFile;
|
||||
}
|
||||
|
||||
// TODO: replace this with a SerializerBase implementing IDisposable
|
||||
protected virtual void DeleteOnExit(string fileOrFolder)
|
||||
{
|
||||
Application.ApplicationExit += (sender, args) =>
|
||||
{
|
||||
try
|
||||
{
|
||||
if (Directory.Exists(fileOrFolder))
|
||||
Directory.Delete(fileOrFolder, true);
|
||||
else if (File.Exists(fileOrFolder))
|
||||
File.Delete(fileOrFolder);
|
||||
}
|
||||
catch
|
||||
{
|
||||
// ignore
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user