mirror of
https://github.com/streetwriters/notesnook-sync-server.git
synced 2026-02-12 19:22:45 +00:00
64 lines
2.4 KiB
C#
64 lines
2.4 KiB
C#
using System;
|
|
using System.IO;
|
|
using System.Threading.Tasks;
|
|
using Quartz;
|
|
|
|
namespace Notesnook.API.Jobs
|
|
{
|
|
public class DeviceCleanupJob : IJob
|
|
{
|
|
public async Task Execute(IJobExecutionContext context)
|
|
{
|
|
ParallelOptions parallelOptions = new()
|
|
{
|
|
MaxDegreeOfParallelism = 100,
|
|
CancellationToken = context.CancellationToken,
|
|
};
|
|
Parallel.ForEach(Directory.EnumerateDirectories("sync"), parallelOptions, (userDir, ct) =>
|
|
{
|
|
foreach (var device in Directory.EnumerateDirectories(userDir))
|
|
{
|
|
string lastAccessFile = Path.Combine(device, "LastAccessTime");
|
|
|
|
try
|
|
{
|
|
if (!File.Exists(lastAccessFile))
|
|
{
|
|
Directory.Delete(device, true);
|
|
continue;
|
|
}
|
|
|
|
string content = File.ReadAllText(lastAccessFile);
|
|
if (!long.TryParse(content, out long lastAccessTime) || lastAccessTime <= 0)
|
|
{
|
|
Directory.Delete(device, true);
|
|
continue;
|
|
}
|
|
|
|
DateTimeOffset accessTime;
|
|
try
|
|
{
|
|
accessTime = DateTimeOffset.FromUnixTimeMilliseconds(lastAccessTime);
|
|
}
|
|
catch (Exception)
|
|
{
|
|
Directory.Delete(device, true);
|
|
continue;
|
|
}
|
|
|
|
// If the device hasn't been accessed for more than one month, delete it.
|
|
if (accessTime.AddMonths(1) < DateTimeOffset.UtcNow)
|
|
{
|
|
Directory.Delete(device, true);
|
|
}
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
// Log the error and continue processing other directories.
|
|
Console.Error.WriteLine($"Error processing device '{device}': {ex.Message}");
|
|
}
|
|
}
|
|
});
|
|
}
|
|
}
|
|
} |