DiscordMediaLoader/Discord Media Loader.Application/Classes/MediaData.cs
2018-02-01 21:36:38 +01:00

96 lines
3 KiB
C#

using System;
using System.IO;
using System.Linq;
using System.Net;
using System.Threading.Tasks;
using DML.Client;
using SweetLib.Utils.Logger;
using static SweetLib.Utils.Logger.Logger;
namespace DML.Application.Classes
{
public class MediaData
{
public ulong Id { get; set; }
public string DownloadSource { get; set; }
public ulong GuildId { get; set; }
public ulong ChannelId { get; set; }
public double TimeStamp { get; set; }
public string Filename { get; set; }
public int FileSize { get; set; }
internal void Store()
{
Debug("Storing job to database...");
Trace("Getting jobs collection...");
var db = Core.Database.GetCollection<MediaData>("media");
Trace("Adding new value...");
if (db.Find(x => x.Id == Id).Any())
{
db.Update(this);
}
else
{
db.Insert(this);
}
}
internal void Delete()
{
Debug("Deleting job from database...");
Trace("Getting jobs collection...");
var db = Core.Database.GetCollection<MediaData>("media");
Trace("Deleting value...");
db.Delete(Id);
}
internal async Task Download()
{
Trace("Beginning attachment download...");
Debug("Building filename...");
var fileName = Path.Combine(Core.Settings.OperatingFolder, Core.Settings.FileNameScheme);
Debug($"Base filename: {fileName}");
Trace("Determining if extension is required");
var extensionRequired = !fileName.EndsWith("%name%");
Trace($"Extension required: {extensionRequired}");
Trace("Replacing filename placeholders...");
var guildName = DMLClient.Client.GetGuild(GuildId)?.Name ?? GuildId.ToString();
var channelName = DMLClient.Client.GetGuild(GuildId)?.GetChannel(ChannelId)?.Name ?? ChannelId.ToString();
fileName =
fileName.Replace("%guild%", guildName)
.Replace("%channel%", channelName)
.Replace("%timestamp%", TimeStamp.ToString("####"))
.Replace("%name%", Filename)
.Replace("%id%", Id.ToString());
Trace("Adding extension if required");
if (extensionRequired)
fileName += Path.GetExtension(Filename);
Debug($"Final filename: {fileName}");
if (File.Exists(fileName) && new FileInfo(fileName).Length == FileSize)
{
Logger.Debug($"{fileName} already existing with its estimated size. Skipping...");
return;
}
var wc = new WebClient();
Logger.Debug($"Starting downloading of attachment {Id}...");
wc.DownloadFile(new Uri(DownloadSource), fileName);
Logger.Debug($"Downloaded attachment {Id}.");
Core.Scheduler.AttachmentsDownloaded++;
}
}
}