Pdf Import Rewrite
Pdf Import rewritten to greatly improve QR Code detection, reduce reliance on iTextSharp and improve thumbnails. Fixes #50
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user