5ea9a814d6
Pdf Import rewritten to greatly improve QR Code detection, reduce reliance on iTextSharp and improve thumbnails. Fixes #50
93 lines
2.8 KiB
C#
93 lines
2.8 KiB
C#
using Quartz;
|
|
using Quartz.Impl;
|
|
using Quartz.Impl.Triggers;
|
|
using System;
|
|
using System.IO;
|
|
|
|
namespace Disco.Services.Documents.AttachmentImport
|
|
{
|
|
public class ImportDirectoryMonitor : IDisposable
|
|
{
|
|
private FileSystemWatcher watcher;
|
|
|
|
public const string WatcherFilter = "*.pdf";
|
|
public string MonitorLocation { get; private set; }
|
|
public IScheduler Scheduler { get; private set; }
|
|
public int ImportDelay { get; private set; }
|
|
|
|
public ImportDirectoryMonitor(string MonitorLocation, IScheduler Scheduler, int ImportDelay)
|
|
{
|
|
if (MonitorLocation == null)
|
|
throw new ArgumentNullException(nameof(MonitorLocation));
|
|
if (Scheduler == null)
|
|
throw new ArgumentNullException(nameof(Scheduler));
|
|
|
|
this.MonitorLocation = MonitorLocation.EndsWith(@"\") ? MonitorLocation : $@"{MonitorLocation}\";
|
|
this.Scheduler = Scheduler;
|
|
this.ImportDelay = Math.Max(0, ImportDelay);
|
|
}
|
|
|
|
public void Start()
|
|
{
|
|
if (watcher == null)
|
|
{
|
|
if (!Directory.Exists(MonitorLocation))
|
|
{
|
|
Directory.CreateDirectory(MonitorLocation);
|
|
}
|
|
|
|
watcher = new FileSystemWatcher(MonitorLocation, WatcherFilter);
|
|
watcher.Created += OnFileCreated;
|
|
}
|
|
|
|
watcher.EnableRaisingEvents = true;
|
|
}
|
|
|
|
public void Stop()
|
|
{
|
|
if (watcher != null)
|
|
{
|
|
watcher.EnableRaisingEvents = false;
|
|
}
|
|
}
|
|
|
|
private void OnFileCreated(object sender, FileSystemEventArgs e)
|
|
{
|
|
if (!e.ChangeType.HasFlag(WatcherChangeTypes.Deleted))
|
|
{
|
|
ScheduleImport(e.FullPath, ImportDelay);
|
|
}
|
|
}
|
|
|
|
private void ScheduleImport(string Filename, int ImportDelay)
|
|
{
|
|
var startTime = new DateTimeOffset(DateTime.Now.AddMilliseconds(ImportDelay));
|
|
var jobTrigger = new SimpleTriggerImpl(Guid.NewGuid().ToString(), startTime);
|
|
|
|
var jobDetails = new JobDetailImpl(Guid.NewGuid().ToString(), typeof(ImporterJob));
|
|
jobDetails.JobDataMap.Add("Filename", Filename);
|
|
jobDetails.JobDataMap.Add("RetryCount", 0);
|
|
|
|
Scheduler.ScheduleJob(jobDetails, jobTrigger);
|
|
}
|
|
|
|
public void ScheduleCurrentFiles(int ImportDelay)
|
|
{
|
|
foreach (var filename in Directory.GetFiles(this.MonitorLocation, "*.pdf"))
|
|
{
|
|
ScheduleImport(filename, ImportDelay);
|
|
}
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
if (watcher != null)
|
|
{
|
|
watcher.EnableRaisingEvents = false;
|
|
watcher.Dispose();
|
|
watcher = null;
|
|
}
|
|
}
|
|
}
|
|
}
|