Compare commits
No commits in common. "master" and "v0.2.99.0" have entirely different histories.
8
.github/dependabot.yml
vendored
8
.github/dependabot.yml
vendored
|
@ -1,8 +0,0 @@
|
||||||
version: 2
|
|
||||||
updates:
|
|
||||||
- package-ecosystem: nuget
|
|
||||||
directory: "/"
|
|
||||||
schedule:
|
|
||||||
interval: daily
|
|
||||||
time: "04:00"
|
|
||||||
open-pull-requests-limit: 10
|
|
14
.github/workflows/auto-merge.yml
vendored
14
.github/workflows/auto-merge.yml
vendored
|
@ -1,14 +0,0 @@
|
||||||
name: auto-merge
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
auto-merge:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2.3.3
|
|
||||||
- uses: ahmadnassri/action-dependabot-auto-merge@v2.1.2
|
|
||||||
with:
|
|
||||||
target: minor
|
|
||||||
github-token: ${{ secrets.PR_AUTO_MERGE }}
|
|
70
.github/workflows/codeql-analysis.yml
vendored
70
.github/workflows/codeql-analysis.yml
vendored
|
@ -1,70 +0,0 @@
|
||||||
# For most projects, this workflow file will not need changing; you simply need
|
|
||||||
# to commit it to your repository.
|
|
||||||
#
|
|
||||||
# You may wish to alter this file to override the set of languages analyzed,
|
|
||||||
# or to provide custom queries or build logic.
|
|
||||||
#
|
|
||||||
# ******** NOTE ********
|
|
||||||
# We have attempted to detect the languages in your repository. Please check
|
|
||||||
# the `language` matrix defined below to confirm you have the correct set of
|
|
||||||
# supported CodeQL languages.
|
|
||||||
#
|
|
||||||
name: "CodeQL"
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [ master ]
|
|
||||||
pull_request:
|
|
||||||
# The branches below must be a subset of the branches above
|
|
||||||
branches: [ master ]
|
|
||||||
schedule:
|
|
||||||
- cron: '43 14 * * 4'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
analyze:
|
|
||||||
name: Analyze
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
actions: read
|
|
||||||
contents: read
|
|
||||||
security-events: write
|
|
||||||
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
language: [ 'csharp' ]
|
|
||||||
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ]
|
|
||||||
# Learn more about CodeQL language support at https://git.io/codeql-language-support
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
|
|
||||||
# Initializes the CodeQL tools for scanning.
|
|
||||||
- name: Initialize CodeQL
|
|
||||||
uses: github/codeql-action/init@v1
|
|
||||||
with:
|
|
||||||
languages: ${{ matrix.language }}
|
|
||||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
|
||||||
# By default, queries listed here will override any specified in a config file.
|
|
||||||
# Prefix the list here with "+" to use these queries and those in the config file.
|
|
||||||
# queries: ./path/to/local/query, your-org/your-repo/queries@main
|
|
||||||
|
|
||||||
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
|
|
||||||
# If this step fails, then you should remove it and run the build manually (see below)
|
|
||||||
- name: Autobuild
|
|
||||||
uses: github/codeql-action/autobuild@v1
|
|
||||||
|
|
||||||
# ℹ️ Command-line programs to run using the OS shell.
|
|
||||||
# 📚 https://git.io/JvXDl
|
|
||||||
|
|
||||||
# ✏️ If the Autobuild fails above, remove it and uncomment the following three lines
|
|
||||||
# and modify them (or add more) to build your code if your project
|
|
||||||
# uses a compiled language
|
|
||||||
|
|
||||||
#- run: |
|
|
||||||
# make bootstrap
|
|
||||||
# make release
|
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
|
||||||
uses: github/codeql-action/analyze@v1
|
|
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -250,4 +250,3 @@ paket-files/
|
||||||
# JetBrains Rider
|
# JetBrains Rider
|
||||||
.idea/
|
.idea/
|
||||||
*.sln.iml
|
*.sln.iml
|
||||||
install/Discord_Media_Loader_Setup.exe
|
|
||||||
|
|
3
.gitmodules
vendored
3
.gitmodules
vendored
|
@ -1,3 +0,0 @@
|
||||||
[submodule "libs/Discord.Net"]
|
|
||||||
path = libs/Discord.Net
|
|
||||||
url = https://github.com/Serraniel/Discord.Net.git
|
|
|
@ -1,17 +0,0 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<TargetFramework>netstandard1.4</TargetFramework>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<PackageReference Include="Discord.Net" Version="1.0.2" />
|
|
||||||
<PackageReference Include="Discord.Net.Commands" Version="1.0.2" />
|
|
||||||
<PackageReference Include="LiteDB" Version="3.1.0" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<ProjectReference Include="..\..\SweetLib\SweetLib\SweetLib.csproj" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
</Project>
|
|
|
@ -1,15 +0,0 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<TargetFramework>netstandard2.0</TargetFramework>
|
|
||||||
<AssemblyVersion>1.1.0.0</AssemblyVersion>
|
|
||||||
<FileVersion>1.1.0.0</FileVersion>
|
|
||||||
<Version>1.1.0</Version>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<ProjectReference Include="..\libs\Discord.Net\src\Discord.Net.Core\Discord.Net.Core.csproj" />
|
|
||||||
<ProjectReference Include="..\libs\Discord.Net\src\Discord.Net.WebSocket\Discord.Net.WebSocket.csproj" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
</Project>
|
|
|
@ -1,25 +0,0 @@
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Discord;
|
|
||||||
using Discord.WebSocket;
|
|
||||||
|
|
||||||
namespace DML.Client
|
|
||||||
{
|
|
||||||
public static class DMLClient
|
|
||||||
{
|
|
||||||
public static DiscordSocketClient Client { get; set; } = new DiscordSocketClient(new DiscordSocketConfig() { DefaultRetryMode = RetryMode.RetryRatelimit | RetryMode.RetryTimeouts });
|
|
||||||
|
|
||||||
public static async Task<bool> Login(string token)
|
|
||||||
{
|
|
||||||
await Client.LoginAsync(TokenType.User, token);
|
|
||||||
await Client.StartAsync();
|
|
||||||
await Task.Delay(1000);
|
|
||||||
|
|
||||||
while (Client.LoginState == LoginState.LoggingIn || Client.ConnectionState == ConnectionState.Connecting)
|
|
||||||
{
|
|
||||||
// wait
|
|
||||||
}
|
|
||||||
|
|
||||||
return Client.LoginState == LoginState.LoggedIn && Client.ConnectionState == ConnectionState.Connected;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,158 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Discord;
|
|
||||||
using Discord.WebSocket;
|
|
||||||
|
|
||||||
namespace DML.Core.Classes
|
|
||||||
{
|
|
||||||
public class Job
|
|
||||||
{
|
|
||||||
public int Id { get; set; }
|
|
||||||
public ulong GuildId { get; set; }
|
|
||||||
public ulong ChannelId { get; set; }
|
|
||||||
public double KnownTimestamp { get; set; } = 0;
|
|
||||||
private double StopTimestamp { get; set; } = 0;
|
|
||||||
private bool IsValid { get; set; } = true;
|
|
||||||
|
|
||||||
internal void Store()
|
|
||||||
{
|
|
||||||
Debug("Storing job to database...");
|
|
||||||
Trace("Getting jobs collection...");
|
|
||||||
var jobDb = DML.Core.Core.Database.GetCollection<Job>("jobs");
|
|
||||||
|
|
||||||
Trace("Adding new value...");
|
|
||||||
|
|
||||||
if (jobDb.Find(x => x.ChannelId == ChannelId && x.GuildId == GuildId).Any())
|
|
||||||
{
|
|
||||||
jobDb.Update(this);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
jobDb.Insert(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal void Delete()
|
|
||||||
{
|
|
||||||
Debug("Deleting job from database...");
|
|
||||||
Trace("Getting jobs collection...");
|
|
||||||
var jobDb = DML.Core.Core.Database.GetCollection<Job>("jobs");
|
|
||||||
|
|
||||||
Trace("Deleting value...");
|
|
||||||
jobDb.Delete(Id);
|
|
||||||
}
|
|
||||||
|
|
||||||
private SocketGuild FindServerById(ulong id)
|
|
||||||
{
|
|
||||||
Trace($"Trying to find server by Id: {id}");
|
|
||||||
return (from s in DML.Core.Core.Client.Guilds where s.Id == id select s).FirstOrDefault();
|
|
||||||
}
|
|
||||||
|
|
||||||
private SocketTextChannel FindChannelById(SocketGuild server, ulong id)
|
|
||||||
{
|
|
||||||
Trace($"Trying to find channel in {server} by id: {id}");
|
|
||||||
return (from c in server.TextChannels where c.Id == id select c).FirstOrDefault();
|
|
||||||
}
|
|
||||||
|
|
||||||
internal async Task<List<SocketMessage>> Scan()
|
|
||||||
{
|
|
||||||
Debug($"Starting scan of guild {GuildId} channel {ChannelId}...");
|
|
||||||
var result = new List<SocketMessage>();
|
|
||||||
|
|
||||||
var limit = 100;
|
|
||||||
var lastId = ulong.MaxValue;
|
|
||||||
var isFirst = true;
|
|
||||||
var finished = false;
|
|
||||||
|
|
||||||
var guild = FindServerById(GuildId);
|
|
||||||
var channel = FindChannelById(guild, ChannelId);
|
|
||||||
|
|
||||||
if (Math.Abs(StopTimestamp) < 0.4)
|
|
||||||
StopTimestamp = KnownTimestamp;
|
|
||||||
Trace("Initialized scanning parameters.");
|
|
||||||
|
|
||||||
while (!finished)
|
|
||||||
{
|
|
||||||
Trace("Entering scanning loop...");
|
|
||||||
SocketMessage[] messages;
|
|
||||||
|
|
||||||
Trace($"Downloading next {limit} messages...");
|
|
||||||
if (isFirst)
|
|
||||||
{
|
|
||||||
messages = await channel.GetMessagesAsync(limit).ToArray() as SocketMessage[];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
messages = await channel.GetMessagesAsync(lastId, Direction.Before, limit).ToArray() as SocketMessage[];
|
|
||||||
}
|
|
||||||
Trace($"Downloaded {messages.Length} messages.");
|
|
||||||
|
|
||||||
isFirst = false;
|
|
||||||
|
|
||||||
foreach (var m in messages)
|
|
||||||
{
|
|
||||||
if (!IsValid)
|
|
||||||
return null;
|
|
||||||
|
|
||||||
Debug($"Processing message {m.Id}");
|
|
||||||
if (m.Id < lastId)
|
|
||||||
{
|
|
||||||
Trace($"Updating lastId ({lastId}) to {m.Id}");
|
|
||||||
lastId = m.Id;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (SweetUtils.DateTimeToUnixTimeStamp(m.CreatedAt.UtcDateTime) <= StopTimestamp)
|
|
||||||
{
|
|
||||||
Debug("Found a message with a known timestamp...Stopping scan.");
|
|
||||||
finished = true;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
Trace($"Message {m.Id} has {m.Attachments.Count} attachments.");
|
|
||||||
if (m.Attachments.Count > 0)
|
|
||||||
{
|
|
||||||
result.Add(m);
|
|
||||||
DML.Core.Core.Scheduler.TotalAttachments++;
|
|
||||||
Trace($"Added message {m.Id}");
|
|
||||||
}
|
|
||||||
Debug($"Finished message {m.Id}");
|
|
||||||
|
|
||||||
DML.Core.Core.Scheduler.MessagesScanned++;
|
|
||||||
}
|
|
||||||
|
|
||||||
finished = finished || messages.Length < limit;
|
|
||||||
}
|
|
||||||
Trace($"Downloaded all messages for guild {GuildId} channel {ChannelId}.");
|
|
||||||
|
|
||||||
Trace("Sorting messages...");
|
|
||||||
result.Sort((a, b) => DateTime.Compare(a.CreatedAt.UtcDateTime, b.CreatedAt.UtcDateTime));
|
|
||||||
|
|
||||||
if (result.Count > 0)
|
|
||||||
{
|
|
||||||
Trace("Updating StopTimestamp for next scan...");
|
|
||||||
StopTimestamp = SweetUtils.DateTimeToUnixTimeStamp(result[result.Count - 1].CreatedAt.UtcDateTime);
|
|
||||||
}
|
|
||||||
|
|
||||||
Debug($"Fisnished scan of guild {GuildId} channel {ChannelId}.");
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
internal void Stop()
|
|
||||||
{
|
|
||||||
IsValid = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
internal static IEnumerable<Job> RestoreJobs()
|
|
||||||
{
|
|
||||||
Debug("Restoring jobs...");
|
|
||||||
Trace("Getting jobs collection...");
|
|
||||||
var jobDb = DML.Core.Core.Database.GetCollection<Job>("jobs");
|
|
||||||
|
|
||||||
Trace("Creating new empty job list");
|
|
||||||
return jobDb.FindAll();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,290 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Discord.WebSocket;
|
|
||||||
|
|
||||||
namespace DML.Core.Classes
|
|
||||||
{
|
|
||||||
internal class JobScheduler
|
|
||||||
{
|
|
||||||
private ulong messageScanned = 0;
|
|
||||||
private ulong totalAttachments = 0;
|
|
||||||
private ulong attachmentsDownloaded = 0;
|
|
||||||
|
|
||||||
private bool Run { get; set; } = false;
|
|
||||||
internal List<Job> JobList { get; set; } = new List<Job>();
|
|
||||||
internal Dictionary<int, Queue<SocketMessage>> RunningJobs = new Dictionary<int, Queue<SocketMessage>>();
|
|
||||||
internal int RunningThreads { get; set; } = 0;
|
|
||||||
|
|
||||||
internal ulong MessagesScanned
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
lock (this)
|
|
||||||
{
|
|
||||||
return messageScanned;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
lock (this)
|
|
||||||
{
|
|
||||||
messageScanned = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal ulong TotalAttachments
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
lock (this)
|
|
||||||
{
|
|
||||||
return totalAttachments;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
lock (this)
|
|
||||||
{
|
|
||||||
totalAttachments = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal ulong AttachmentsDownloaded
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
lock (this)
|
|
||||||
{
|
|
||||||
return attachmentsDownloaded;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
lock (this)
|
|
||||||
{
|
|
||||||
attachmentsDownloaded = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal ulong AttachmentsToDownload => TotalAttachments - AttachmentsDownloaded;
|
|
||||||
|
|
||||||
internal void Stop()
|
|
||||||
{
|
|
||||||
Run = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
internal void Start()
|
|
||||||
{
|
|
||||||
Run = true;
|
|
||||||
|
|
||||||
Task.Run(async () =>
|
|
||||||
{
|
|
||||||
Info("Started JobScheduler...");
|
|
||||||
while (Run)
|
|
||||||
{
|
|
||||||
Debug("Entering job list handler loop...");
|
|
||||||
//foreach (var job in JobList)
|
|
||||||
for (var i = JobList.Count - 1; i >= 0; i--)
|
|
||||||
{
|
|
||||||
var job = JobList[i];
|
|
||||||
Debug($"Checking job {job}");
|
|
||||||
var hasJob = false;
|
|
||||||
|
|
||||||
Trace("Locking scheduler...");
|
|
||||||
lock (this)
|
|
||||||
{
|
|
||||||
Trace("Checking if job is already performed...");
|
|
||||||
hasJob = RunningJobs.ContainsKey(job.Id);
|
|
||||||
}
|
|
||||||
Trace("Unlocked scheduler.");
|
|
||||||
|
|
||||||
if (!hasJob)
|
|
||||||
{
|
|
||||||
Debug("Job is not performed yet...Performing job...");
|
|
||||||
var queue = new Queue<SocketMessage>();
|
|
||||||
|
|
||||||
Trace("Locking scheduler...");
|
|
||||||
lock (this)
|
|
||||||
{
|
|
||||||
Trace("Adding job to running jobs.");
|
|
||||||
RunningJobs.Add(job.Id, queue);
|
|
||||||
}
|
|
||||||
Trace("Unlocked scheduler.");
|
|
||||||
|
|
||||||
Trace("Issuing job message scan...");
|
|
||||||
var messages = await job.Scan();
|
|
||||||
|
|
||||||
if (messages == null)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
Trace($"Adding {messages.Count} messages to queue...");
|
|
||||||
foreach (var msg in messages)
|
|
||||||
{
|
|
||||||
queue.Enqueue(msg);
|
|
||||||
}
|
|
||||||
Trace($"Added {queue.Count} messages to queue.");
|
|
||||||
|
|
||||||
if (messages.Count != queue.Count)
|
|
||||||
Warn("Not all messages have been added into the queue.");
|
|
||||||
|
|
||||||
var startedDownload = false;
|
|
||||||
|
|
||||||
while (!startedDownload)
|
|
||||||
{
|
|
||||||
Debug("Entering loop to check thread availability");
|
|
||||||
Trace("Locking scheduler...");
|
|
||||||
lock (this)
|
|
||||||
{
|
|
||||||
Trace($"Checking thread limit. Running: {RunningThreads}, Max: {DML.Core.Core.Settings.ThreadLimit}");
|
|
||||||
if (RunningThreads >= DML.Core.Core.Settings.ThreadLimit)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
RunningThreads++;
|
|
||||||
startedDownload = true;
|
|
||||||
}
|
|
||||||
Trace("Unlocked scheduler.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Trace("Start downloading job async.");
|
|
||||||
Task.Run(() => WorkQueue(job.Id)); // do not await to work parallel
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private void WorkQueue(int jobId)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Debug("Beginning job download...");
|
|
||||||
Trace("Finding job...");
|
|
||||||
var job = (from j in JobList where j.Id == jobId select j).FirstOrDefault();
|
|
||||||
|
|
||||||
if (job == null)
|
|
||||||
{
|
|
||||||
Warn($"Associating job not found! JobId: {jobId}");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Trace("Found job.");
|
|
||||||
|
|
||||||
Queue<SocketMessage> queue;
|
|
||||||
Trace("Locking scheduler...");
|
|
||||||
lock (this)
|
|
||||||
{
|
|
||||||
Trace("Finiding queue...");
|
|
||||||
if (!RunningJobs.TryGetValue(jobId, out queue))
|
|
||||||
{
|
|
||||||
Warn($"Queue for job {jobId} not found!");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Trace("Queue found.");
|
|
||||||
}
|
|
||||||
Trace("Unlocked scheduler.");
|
|
||||||
|
|
||||||
Debug($"Messages to process for job {jobId}: {queue.Count}");
|
|
||||||
while (queue.Count > 0)
|
|
||||||
{
|
|
||||||
Trace("Locking scheduler...");
|
|
||||||
lock (this)
|
|
||||||
{
|
|
||||||
Trace("Checking if still a job...");
|
|
||||||
if (!RunningJobs.ContainsKey(jobId))
|
|
||||||
{
|
|
||||||
Warn($"Queue for job {jobId} not found!");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
Trace("Continue working...");
|
|
||||||
}
|
|
||||||
Trace("Unlocked scheduler.");
|
|
||||||
|
|
||||||
Trace("Dequeueing message...");
|
|
||||||
var message = queue.Dequeue();
|
|
||||||
|
|
||||||
Debug($"Attachments for message {message.Id}: {message.Attachments.Count}");
|
|
||||||
foreach (var a in message.Attachments)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var fileName = Path.Combine(DML.Core.Core.Settings.OperatingFolder, DML.Core.Core.Settings.FileNameScheme);
|
|
||||||
|
|
||||||
Trace("Replacing filename placeholders...");
|
|
||||||
|
|
||||||
var extensionRequired = !fileName.EndsWith("%name%");
|
|
||||||
|
|
||||||
var serverName = "unknown";
|
|
||||||
|
|
||||||
var socketTextChannel = message.Channel as SocketTextChannel;
|
|
||||||
if (socketTextChannel != null)
|
|
||||||
{
|
|
||||||
serverName = socketTextChannel.Guild.Name.Replace(":", "").Replace("/", "")
|
|
||||||
.Replace("\\", "");
|
|
||||||
}
|
|
||||||
|
|
||||||
fileName =
|
|
||||||
fileName.Replace("%guild%", serverName)
|
|
||||||
.Replace("%channel%", message.Channel.Name)
|
|
||||||
.Replace("%timestamp%", SweetUtils.DateTimeToUnixTimeStamp(message.CreatedAt.UtcDateTime).ToString())
|
|
||||||
.Replace("%name%", a.Filename)
|
|
||||||
.Replace("%id%", a.Id.ToString());
|
|
||||||
|
|
||||||
if (extensionRequired)
|
|
||||||
fileName += Path.GetExtension(a.Filename);
|
|
||||||
|
|
||||||
Trace($"Detemined file name: {fileName}.");
|
|
||||||
|
|
||||||
|
|
||||||
if (File.Exists(fileName) && new FileInfo(fileName).Length == a.Size)
|
|
||||||
{
|
|
||||||
Debug($"{fileName} already existing with its estimated size. Skipping...");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
Trace("Determining directory...");
|
|
||||||
var fileDirectory = Path.GetDirectoryName(fileName);
|
|
||||||
|
|
||||||
if (!Directory.Exists(fileDirectory))
|
|
||||||
{
|
|
||||||
Info($"Directory {fileDirectory} does not exist. Creating directory...");
|
|
||||||
Directory.CreateDirectory(fileDirectory);
|
|
||||||
Debug("Created directory.");
|
|
||||||
}
|
|
||||||
|
|
||||||
var wc = new WebClient();
|
|
||||||
Debug($"Starting downloading of attachment {a.Id}...");
|
|
||||||
|
|
||||||
wc.DownloadFile(new Uri(a.Url), fileName);
|
|
||||||
Debug($"Downloaded attachment {a.Id}.");
|
|
||||||
|
|
||||||
Trace("Updating known timestamp for job...");
|
|
||||||
job.KnownTimestamp = SweetUtils.DateTimeToUnixTimeStamp(message.CreatedAt.UtcDateTime);
|
|
||||||
job.Store();
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
AttachmentsDownloaded++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
Trace("Locking scheduler...");
|
|
||||||
lock (this)
|
|
||||||
{
|
|
||||||
Trace($"Removing {jobId} from running jobs...");
|
|
||||||
RunningJobs.Remove(jobId);
|
|
||||||
Trace("Decreasing thread count...");
|
|
||||||
RunningThreads--;
|
|
||||||
}
|
|
||||||
Trace("Unlocked scheduler.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,38 +0,0 @@
|
||||||
using System.Diagnostics;
|
|
||||||
|
|
||||||
namespace DML.Core.Classes
|
|
||||||
{
|
|
||||||
internal class Settings
|
|
||||||
{
|
|
||||||
public int Id { get; } = 1; // using always unique ID
|
|
||||||
public string Email { get; set; }
|
|
||||||
public string Password { get; set; }
|
|
||||||
public string LoginToken { get; set; }
|
|
||||||
public bool UseUserData { get; set; } = false;
|
|
||||||
public bool SavePassword { get; set; } = false;
|
|
||||||
public LogLevel ApplicactionLogLevel { get; set; } = LogLevel.Info | LogLevel.Warn | LogLevel.Error;
|
|
||||||
public string OperatingFolder { get; set; }
|
|
||||||
public string FileNameScheme { get; set; } = @"%guild%\%channel%\%id%";
|
|
||||||
public bool SkipExistingFiles { get; set; } = true;
|
|
||||||
public int ThreadLimit { get; set; } = 50;
|
|
||||||
|
|
||||||
internal void Store()
|
|
||||||
{
|
|
||||||
Trace("Getting settings collection...");
|
|
||||||
var settingsDB = DML.Core.Core.Database.GetCollection<Settings>("settings");
|
|
||||||
|
|
||||||
Debug("Storing settings to database...");
|
|
||||||
|
|
||||||
if (settingsDB.Exists(_setting => _setting.Id == Id))
|
|
||||||
{
|
|
||||||
Trace("Updating existing value...");
|
|
||||||
settingsDB.Update(this);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Trace("Adding new value...");
|
|
||||||
settingsDB.Insert(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
260
DML.Core/Core.cs
260
DML.Core/Core.cs
|
@ -1,260 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.Globalization;
|
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Discord;
|
|
||||||
using Discord.Net;
|
|
||||||
using Discord.WebSocket;
|
|
||||||
using DML.Core.Classes;
|
|
||||||
|
|
||||||
namespace DML.Core
|
|
||||||
{
|
|
||||||
public static class Core
|
|
||||||
{
|
|
||||||
internal static DiscordSocketClient Client { get; set; }
|
|
||||||
internal static LiteDatabase Database { get; set; }
|
|
||||||
internal static Settings Settings { get; set; }
|
|
||||||
internal static JobScheduler Scheduler { get; } = new JobScheduler();
|
|
||||||
|
|
||||||
internal static string DataDirectory
|
|
||||||
=> Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), @"Serraniel\Discord Media Loader");
|
|
||||||
|
|
||||||
public static async Task Run(string[] paramStrings)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var splash = new FrmInternalSplash();
|
|
||||||
splash.Show();
|
|
||||||
System.Windows.Forms.Application.DoEvents();
|
|
||||||
|
|
||||||
Info("Starting up Discord Media Loader application...");
|
|
||||||
var useTrace = false;
|
|
||||||
#if DEBUG
|
|
||||||
//temporary add debug log level if debugging...
|
|
||||||
GlobalLogLevel |= LogLevel.Debug;
|
|
||||||
Debug("Running in debug configuartion. Added log level debug.");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
Debug($"Parameters: {string.Join(", ", paramStrings)}");
|
|
||||||
if (paramStrings.Contains("--trace") || paramStrings.Contains("-t"))
|
|
||||||
{
|
|
||||||
useTrace = true;
|
|
||||||
GlobalLogLevel |= LogLevel.Trace;
|
|
||||||
Trace("Trace parameter found. Added log level trace.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Debug($"Application data folder: {DataDirectory}");
|
|
||||||
|
|
||||||
Trace("Checking application data folder...");
|
|
||||||
if (!Directory.Exists(DataDirectory))
|
|
||||||
{
|
|
||||||
Debug("Creating application data folder...");
|
|
||||||
Directory.CreateDirectory(DataDirectory);
|
|
||||||
Trace("Creating application data folder.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Trace("Initializing profile optimizations...");
|
|
||||||
ProfileOptimization.SetProfileRoot(System.Windows.Forms.Application.UserAppDataPath);
|
|
||||||
ProfileOptimization.StartProfile("profile.opt");
|
|
||||||
Trace("Finished initializing profile optimizations.");
|
|
||||||
|
|
||||||
Trace("Trying to identify log memory...");
|
|
||||||
var logMemory = DefaultLogMemory as ArchivableConsoleLogMemory;
|
|
||||||
if (logMemory != null)
|
|
||||||
{
|
|
||||||
var logFolder = Path.Combine(DataDirectory, "logs");
|
|
||||||
if (!Directory.Exists(logFolder))
|
|
||||||
{
|
|
||||||
Debug("Creating log folder...");
|
|
||||||
Directory.CreateDirectory(logFolder);
|
|
||||||
Trace("Created log folder.");
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
var logFile = Path.Combine(logFolder,
|
|
||||||
SweetUtils.LegalizeFilename($"{DateTime.Now.ToString(CultureInfo.CurrentCulture.DateTimeFormat.SortableDateTimePattern)}.log.zip"));
|
|
||||||
|
|
||||||
Trace($"Setting log file: {logFile}");
|
|
||||||
logMemory.AutoArchiveOnDispose = true;
|
|
||||||
logMemory.ArchiveFile = logFile;
|
|
||||||
}
|
|
||||||
|
|
||||||
Debug("Loading database...");
|
|
||||||
Database = new LiteDatabase(Path.Combine(DataDirectory, "config.db"));
|
|
||||||
Database.Log.Logging += (message) => Trace($"LiteDB: {message}");
|
|
||||||
|
|
||||||
Debug("Loading settings collection out of database...");
|
|
||||||
var settingsDB = Database.GetCollection<Settings>("settings");
|
|
||||||
if (settingsDB.Count() > 1)
|
|
||||||
{
|
|
||||||
Warn("Found more than one setting. Loading first one...");
|
|
||||||
}
|
|
||||||
Settings = settingsDB.FindAll().FirstOrDefault();
|
|
||||||
if (Settings == null)
|
|
||||||
{
|
|
||||||
Warn("Settings not found. Creating new one. This is normal on first start up...");
|
|
||||||
Settings = new Settings();
|
|
||||||
Settings.Store();
|
|
||||||
}
|
|
||||||
|
|
||||||
Debug("Loading jobs collection out of database...");
|
|
||||||
Scheduler.JobList = Job.RestoreJobs().ToList();
|
|
||||||
|
|
||||||
Info("Loaded settings.");
|
|
||||||
Debug(
|
|
||||||
$"Settings: Email: {Settings.Email}, password: {(string.IsNullOrEmpty(Settings.Password) ? "not set" : "is set")}, use username: {Settings.UseUserData}, loginToken: {Settings.LoginToken}");
|
|
||||||
|
|
||||||
Trace("Updating log level...");
|
|
||||||
GlobalLogLevel = Settings.ApplicactionLogLevel;
|
|
||||||
#if DEBUG
|
|
||||||
//temporary add debug log level if debugging...
|
|
||||||
GlobalLogLevel |= LogLevel.Debug;
|
|
||||||
Debug("Running in debug configuartion. Added log level debug.");
|
|
||||||
#endif
|
|
||||||
if (useTrace)
|
|
||||||
{
|
|
||||||
GlobalLogLevel |= LogLevel.Trace;
|
|
||||||
Trace("Creating application data folder.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Debug("Creating discord client...");
|
|
||||||
|
|
||||||
Client = new DiscordSocketClient();
|
|
||||||
Client.Log += (arg) =>
|
|
||||||
{
|
|
||||||
var logMessage = $"DiscordClient: {arg.Message}";
|
|
||||||
switch (arg.Severity)
|
|
||||||
{
|
|
||||||
case LogSeverity.Verbose:
|
|
||||||
Trace(logMessage);
|
|
||||||
break;
|
|
||||||
case LogSeverity.Debug:
|
|
||||||
Trace(logMessage);
|
|
||||||
break;
|
|
||||||
case LogSeverity.Info:
|
|
||||||
Info(logMessage);
|
|
||||||
break;
|
|
||||||
case LogSeverity.Warning:
|
|
||||||
Warn(logMessage);
|
|
||||||
break;
|
|
||||||
case LogSeverity.Error:
|
|
||||||
Error(logMessage);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return Task.CompletedTask;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
Info("Trying to log into discord...");
|
|
||||||
var abort = false;
|
|
||||||
|
|
||||||
Client.Connected += Client_Connected;
|
|
||||||
|
|
||||||
while (Client.LoginState != LoginState.LoggedIn && !abort)
|
|
||||||
{
|
|
||||||
Debug(Client.ConnectionState.ToString());
|
|
||||||
Debug(Client.LoginState.ToString());
|
|
||||||
|
|
||||||
Trace("Entering login loop.");
|
|
||||||
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (Client.ConnectionState == ConnectionState.Connecting)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(Settings.LoginToken))
|
|
||||||
{
|
|
||||||
Debug("Trying to login with last known token...");
|
|
||||||
await Client.LoginAsync(TokenType.User, Settings.LoginToken);
|
|
||||||
await Task.Delay(1000);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
catch (HttpException ex)
|
|
||||||
{
|
|
||||||
Warn($"Login seems to have failed or gone wrong: {ex.GetType().Name} - {ex.Message}");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Client.LoginState == LoginState.LoggedOut)
|
|
||||||
{
|
|
||||||
Settings.Password = string.Empty;
|
|
||||||
Debug("Showing dialog for username and password...");
|
|
||||||
var loginDlg = new LoginDialog();
|
|
||||||
loginDlg.ShowDialog();
|
|
||||||
Trace("Dialog closed.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Debug("Start checking for invalid jobs...");
|
|
||||||
|
|
||||||
//Client
|
|
||||||
|
|
||||||
while (Client.Guilds.Count==0)
|
|
||||||
{
|
|
||||||
// wait until guilds are loaded
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var i = Scheduler.JobList.Count - 1; i >= 0; i--)
|
|
||||||
{
|
|
||||||
var job = Scheduler.JobList[i];
|
|
||||||
var isError = false;
|
|
||||||
var guild = FindServerById(job.GuildId);
|
|
||||||
if (guild == null)
|
|
||||||
isError = true;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var channel = FindChannelById(guild, job.ChannelId);
|
|
||||||
if (channel == null)
|
|
||||||
isError = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isError)
|
|
||||||
{
|
|
||||||
MessageBox.Show($"Invalid job for guild {job.GuildId}, channel {job.ChannelId} found. Guild or channel may not exist any more. This job will be deleted...", "Invalid job",
|
|
||||||
MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
||||||
|
|
||||||
Scheduler.JobList.Remove(job);
|
|
||||||
Scheduler.RunningJobs.Remove(job.Id);
|
|
||||||
job.Stop();
|
|
||||||
job.Delete();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
splash.Close();
|
|
||||||
|
|
||||||
Info("Starting scheduler...");
|
|
||||||
Scheduler.Start();
|
|
||||||
|
|
||||||
System.Windows.Forms.Application.Run(new MainForm());
|
|
||||||
|
|
||||||
Info("Stopping scheduler...");
|
|
||||||
Scheduler.Stop();
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Error($"{ex.Message} occured at: {ex.StackTrace}");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Task Client_Connected()
|
|
||||||
{
|
|
||||||
Debug("Connected");
|
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
|
||||||
|
|
||||||
//TODO: this is thrid time we implement this.....this has to be fixed!!!
|
|
||||||
private static SocketGuild FindServerById(ulong id)
|
|
||||||
{
|
|
||||||
Trace($"Trying to find server by Id: {id}");
|
|
||||||
return (from s in Core.Client.Guilds where s.Id == id select s).FirstOrDefault();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static SocketTextChannel FindChannelById(SocketGuild server, ulong id)
|
|
||||||
{
|
|
||||||
Trace($"Trying to find channel in {server} by id: {id}");
|
|
||||||
return (from c in server.TextChannels where c.Id == id select c).FirstOrDefault();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,15 +0,0 @@
|
||||||
<Project Sdk="Microsoft.NET.Sdk">
|
|
||||||
|
|
||||||
<PropertyGroup>
|
|
||||||
<TargetFramework>netcoreapp1.1</TargetFramework>
|
|
||||||
</PropertyGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<PackageReference Include="Discord.Net" Version="1.0.2" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<ProjectReference Include="..\..\SweetLib\SweetLib\SweetLib.csproj" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
</Project>
|
|
|
@ -1,289 +0,0 @@
|
||||||
using Discord;
|
|
||||||
using Discord.Net;
|
|
||||||
using Discord.WebSocket;
|
|
||||||
using DML.AppCore.Classes;
|
|
||||||
using DML.Application.Dialogs;
|
|
||||||
using DML.Client;
|
|
||||||
using LiteDB;
|
|
||||||
using SharpRaven;
|
|
||||||
using SharpRaven.Data;
|
|
||||||
using SweetLib.Utils;
|
|
||||||
using SweetLib.Utils.Logger;
|
|
||||||
using SweetLib.Utils.Logger.Memory;
|
|
||||||
using System;
|
|
||||||
using System.Globalization;
|
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Runtime;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Windows.Forms;
|
|
||||||
using Logger = SweetLib.Utils.Logger.Logger;
|
|
||||||
|
|
||||||
namespace DML.Application.Classes
|
|
||||||
{
|
|
||||||
public static class Core
|
|
||||||
{
|
|
||||||
//internal static DiscordSocketClient Client { get; set; }
|
|
||||||
internal static LiteDatabase Database { get; set; }
|
|
||||||
internal static Settings Settings { get; set; }
|
|
||||||
internal static JobScheduler Scheduler { get; } = new JobScheduler();
|
|
||||||
internal static RavenClient Raven = new RavenClient("https://0de964231669473e9098b9f6cc1d6278:79d9f2eb24034de199b2a37cc058e0f2@sentry.io/257114");
|
|
||||||
|
|
||||||
internal static string DataDirectory
|
|
||||||
=> Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), @"Serraniel\Discord Media Loader");
|
|
||||||
|
|
||||||
public static async Task Run(string[] paramStrings)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var splash = new FrmInternalSplash();
|
|
||||||
splash.Show();
|
|
||||||
System.Windows.Forms.Application.DoEvents();
|
|
||||||
|
|
||||||
Logger.Info("Starting up Discord Media Loader application...");
|
|
||||||
var useTrace = false;
|
|
||||||
#if DEBUG
|
|
||||||
//temporary add debug log level if debugging...
|
|
||||||
Logger.GlobalLogLevel |= LogLevel.Debug;
|
|
||||||
Logger.Debug("Running in debug configuartion. Added log level debug.");
|
|
||||||
#endif
|
|
||||||
|
|
||||||
Logger.Debug($"Parameters: {string.Join(", ", paramStrings)}");
|
|
||||||
if (paramStrings.Contains("--trace") || paramStrings.Contains("-t"))
|
|
||||||
{
|
|
||||||
useTrace = true;
|
|
||||||
Logger.GlobalLogLevel |= LogLevel.Trace;
|
|
||||||
Logger.Trace("Trace parameter found. Added log level trace.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Logger.Debug($"Application data folder: {DataDirectory}");
|
|
||||||
|
|
||||||
Logger.Trace("Checking application data folder...");
|
|
||||||
if (!Directory.Exists(DataDirectory))
|
|
||||||
{
|
|
||||||
Logger.Debug("Creating application data folder...");
|
|
||||||
Directory.CreateDirectory(DataDirectory);
|
|
||||||
Logger.Trace("Creating application data folder.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Logger.Trace("Initializing profile optimizations...");
|
|
||||||
ProfileOptimization.SetProfileRoot(System.Windows.Forms.Application.UserAppDataPath);
|
|
||||||
ProfileOptimization.StartProfile("profile.opt");
|
|
||||||
Logger.Trace("Finished initializing profile optimizations.");
|
|
||||||
|
|
||||||
Logger.Trace("Trying to identify log memory...");
|
|
||||||
var logMemory = Logger.DefaultLogMemory as ArchivableConsoleLogMemory;
|
|
||||||
if (logMemory != null)
|
|
||||||
{
|
|
||||||
var logFolder = Path.Combine(DataDirectory, "logs");
|
|
||||||
if (!Directory.Exists(logFolder))
|
|
||||||
{
|
|
||||||
Logger.Debug("Creating log folder...");
|
|
||||||
Directory.CreateDirectory(logFolder);
|
|
||||||
Logger.Trace("Created log folder.");
|
|
||||||
}
|
|
||||||
|
|
||||||
var logFile = Path.Combine(logFolder,
|
|
||||||
SweetUtils.LegalizeFilename($"{DateTime.Now.ToString(CultureInfo.CurrentCulture.DateTimeFormat.SortableDateTimePattern)}.log.zip"));
|
|
||||||
|
|
||||||
Logger.Trace($"Setting log file: {logFile}");
|
|
||||||
logMemory.AutoArchiveOnDispose = true;
|
|
||||||
logMemory.ArchiveFile = logFile;
|
|
||||||
}
|
|
||||||
|
|
||||||
Logger.Debug("Loading database...");
|
|
||||||
Database = new LiteDatabase(Path.Combine(DataDirectory, "config.db"));
|
|
||||||
Database.Log.Logging += (message) => Logger.Trace($"LiteDB: {message}");
|
|
||||||
|
|
||||||
Logger.Debug("Loading settings collection out of database...");
|
|
||||||
var settingsDB = Database.GetCollection<Settings>("settings");
|
|
||||||
if (settingsDB.Count() > 1)
|
|
||||||
{
|
|
||||||
Logger.Warn("Found more than one setting. Loading first one...");
|
|
||||||
}
|
|
||||||
Settings = settingsDB.FindAll().FirstOrDefault();
|
|
||||||
if (Settings == null)
|
|
||||||
{
|
|
||||||
Logger.Warn("Settings not found. Creating new one. This is normal on first start up...");
|
|
||||||
Settings = new Settings();
|
|
||||||
Settings.Store();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Settings.ShowStartUpHints)
|
|
||||||
{
|
|
||||||
if (MessageBox.Show(splash, "This tool is considered as a selfbot which may violate the Discord TOS. By using this tool you take the risk to get your account banned. Although this never happened yet (as far as I know) you have to confirm to this.\n\r\n\rDo you wish to continue?", "HOLD UP!!", MessageBoxButtons.YesNo) != DialogResult.Yes)
|
|
||||||
{
|
|
||||||
splash.Close();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Settings.ShowStartUpHints = false;
|
|
||||||
Settings.Store();
|
|
||||||
}
|
|
||||||
|
|
||||||
Logger.Debug("Loading jobs collection out of database...");
|
|
||||||
Scheduler.JobList = Job.RestoreJobs().ToList();
|
|
||||||
|
|
||||||
Logger.Info("Loaded settings.");
|
|
||||||
Logger.Debug(
|
|
||||||
$"Settings: Email: {Settings.Email}, password: {(string.IsNullOrEmpty(Settings.Password) ? "not set" : "is set")}, use username: {Settings.UseUserData}, loginToken: {Settings.LoginToken}");
|
|
||||||
|
|
||||||
Logger.Trace("Updating log level...");
|
|
||||||
Logger.GlobalLogLevel = Settings.ApplicactionLogLevel;
|
|
||||||
#if DEBUG
|
|
||||||
//temporary add debug log level if debugging...
|
|
||||||
Logger.GlobalLogLevel |= LogLevel.Debug;
|
|
||||||
Logger.Debug("Running in debug configuartion. Added log level debug.");
|
|
||||||
#endif
|
|
||||||
if (useTrace)
|
|
||||||
{
|
|
||||||
Logger.GlobalLogLevel |= LogLevel.Trace;
|
|
||||||
Logger.Trace("Creating application data folder.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Logger.Debug("Creating discord client...");
|
|
||||||
|
|
||||||
var config = new DiscordSocketConfig()
|
|
||||||
{
|
|
||||||
DefaultRetryMode = RetryMode.AlwaysRetry,
|
|
||||||
};
|
|
||||||
|
|
||||||
//Client = new DiscordSocketClient(config);
|
|
||||||
DMLClient.Client.Log += (arg) =>
|
|
||||||
{
|
|
||||||
var logMessage = $"DiscordClient: {arg.Message}";
|
|
||||||
switch (arg.Severity)
|
|
||||||
{
|
|
||||||
case LogSeverity.Verbose:
|
|
||||||
Logger.Trace(logMessage);
|
|
||||||
break;
|
|
||||||
case LogSeverity.Debug:
|
|
||||||
Logger.Trace(logMessage);
|
|
||||||
break;
|
|
||||||
case LogSeverity.Info:
|
|
||||||
Logger.Info(logMessage);
|
|
||||||
break;
|
|
||||||
case LogSeverity.Warning:
|
|
||||||
Logger.Warn(logMessage);
|
|
||||||
break;
|
|
||||||
case LogSeverity.Error:
|
|
||||||
Logger.Error(logMessage);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return Task.CompletedTask;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
Logger.Info("Trying to log into discord...");
|
|
||||||
|
|
||||||
DMLClient.Client.Connected += Client_Connected;
|
|
||||||
|
|
||||||
var loggedIn = false;
|
|
||||||
|
|
||||||
while (!loggedIn)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
if (!string.IsNullOrEmpty(Settings.LoginToken))
|
|
||||||
{
|
|
||||||
Logger.Debug("Trying to login with last known token...");
|
|
||||||
loggedIn = await DMLClient.Login(Settings.LoginToken);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
catch (HttpException)
|
|
||||||
{
|
|
||||||
Logger.Warn("HTTPException occured during login. Probably from login token.");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!loggedIn)
|
|
||||||
{
|
|
||||||
Logger.Debug("Showing dialog for username and password...");
|
|
||||||
var loginDlg = new LoginDialog();
|
|
||||||
if (loginDlg.ShowDialog() != DialogResult.OK)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Logger.Debug("Start checking for invalid jobs...");
|
|
||||||
|
|
||||||
//Client
|
|
||||||
|
|
||||||
while (DMLClient.Client.Guilds.Count == 0)
|
|
||||||
{
|
|
||||||
// wait until guilds are loaded
|
|
||||||
}
|
|
||||||
|
|
||||||
for (var i = Scheduler.JobList.Count - 1; i >= 0; i--)
|
|
||||||
{
|
|
||||||
var job = Scheduler.JobList[i];
|
|
||||||
var isError = false;
|
|
||||||
var guild = FindServerById(job.GuildId);
|
|
||||||
if (guild == null)
|
|
||||||
{
|
|
||||||
isError = true;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var channel = FindChannelById(guild, job.ChannelId);
|
|
||||||
if (channel == null)
|
|
||||||
{
|
|
||||||
isError = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (isError)
|
|
||||||
{
|
|
||||||
MessageBox.Show($"Invalid job for guild {job.GuildId}, channel {job.ChannelId} found. Guild or channel may not exist any more. This job will be deleted...", "Invalid job",
|
|
||||||
MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
||||||
|
|
||||||
Scheduler.JobList.Remove(job);
|
|
||||||
Scheduler.RunningJobs.Remove(job.Id);
|
|
||||||
job.Stop();
|
|
||||||
job.Delete();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
splash.Close();
|
|
||||||
|
|
||||||
Logger.Info("Starting scheduler...");
|
|
||||||
Scheduler.Start();
|
|
||||||
|
|
||||||
System.Windows.Forms.Application.Run(new MainForm());
|
|
||||||
|
|
||||||
Logger.Info("Stopping scheduler...");
|
|
||||||
Scheduler.Stop();
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Logger.Error($"{ex.Message} [{ex.GetType().Name}] occured at: {ex.StackTrace}");
|
|
||||||
if (MessageBox.Show($"An error occured while running Discord Media Loader:\n{ex.GetType().Name}: {ex.Message}\n\nDo you aggree to sending the error report to the creator of the tool?", "Discord Media Loader", MessageBoxButtons.YesNo) == DialogResult.Yes)
|
|
||||||
{
|
|
||||||
Raven.Capture(new SentryEvent(ex));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Task Client_Connected()
|
|
||||||
{
|
|
||||||
Logger.Debug("Connected");
|
|
||||||
return Task.CompletedTask;
|
|
||||||
}
|
|
||||||
|
|
||||||
//TODO: this is thrid time we implement this.....this has to be fixed!!!
|
|
||||||
private static SocketGuild FindServerById(ulong id)
|
|
||||||
{
|
|
||||||
Logger.Trace($"Trying to find server by Id: {id}");
|
|
||||||
return (from s in DMLClient.Client.Guilds where s.Id == id select s).FirstOrDefault();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static SocketTextChannel FindChannelById(SocketGuild server, ulong id)
|
|
||||||
{
|
|
||||||
Logger.Trace($"Trying to find channel in {server} by id: {id}");
|
|
||||||
return (from c in server.TextChannels where c.Id == id select c).FirstOrDefault();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,180 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Discord;
|
|
||||||
using Discord.WebSocket;
|
|
||||||
using DML.Application.Classes;
|
|
||||||
using DML.Client;
|
|
||||||
using SweetLib.Utils.Extensions;
|
|
||||||
using static SweetLib.Utils.Logger.Logger;
|
|
||||||
|
|
||||||
namespace DML.AppCore.Classes
|
|
||||||
{
|
|
||||||
public class Job
|
|
||||||
{
|
|
||||||
public int Id { get; set; }
|
|
||||||
public ulong GuildId { get; set; }
|
|
||||||
public ulong ChannelId { get; set; }
|
|
||||||
public double KnownTimestamp { get; set; } = 0;
|
|
||||||
private double StopTimestamp { get; set; }
|
|
||||||
private bool IsValid { get; set; } = true;
|
|
||||||
|
|
||||||
internal void Store()
|
|
||||||
{
|
|
||||||
Debug("Storing job to database...");
|
|
||||||
Trace("Getting jobs collection...");
|
|
||||||
var jobDb = Core.Database.GetCollection<Job>("jobs");
|
|
||||||
|
|
||||||
Trace("Adding new value...");
|
|
||||||
|
|
||||||
if (jobDb.Find(x => x.ChannelId == ChannelId && x.GuildId == GuildId).Any())
|
|
||||||
jobDb.Update(this);
|
|
||||||
else
|
|
||||||
jobDb.Insert(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Delete()
|
|
||||||
{
|
|
||||||
Debug("Deleting job from database...");
|
|
||||||
Trace("Getting jobs collection...");
|
|
||||||
var jobDb = Core.Database.GetCollection<Job>("jobs");
|
|
||||||
|
|
||||||
Trace("Deleting value...");
|
|
||||||
jobDb.Delete(Id);
|
|
||||||
}
|
|
||||||
|
|
||||||
private SocketGuild FindServerById(ulong id)
|
|
||||||
{
|
|
||||||
Trace($"Trying to find server by Id: {id}");
|
|
||||||
return (from s in DMLClient.Client.Guilds where s.Id == id select s).FirstOrDefault();
|
|
||||||
}
|
|
||||||
|
|
||||||
private SocketTextChannel FindChannelById(SocketGuild server, ulong id)
|
|
||||||
{
|
|
||||||
Trace($"Trying to find channel in {server} by id: {id}");
|
|
||||||
return (from c in server.TextChannels where c.Id == id select c).FirstOrDefault();
|
|
||||||
}
|
|
||||||
|
|
||||||
internal async Task<List<IMessage>> Scan()
|
|
||||||
{
|
|
||||||
Debug($"Starting scan of guild {GuildId} channel {ChannelId}...");
|
|
||||||
var result = new List<IMessage>();
|
|
||||||
|
|
||||||
var limit = 100;
|
|
||||||
var lastId = ulong.MaxValue;
|
|
||||||
var isFirst = true;
|
|
||||||
var finished = false;
|
|
||||||
|
|
||||||
var guild = FindServerById(GuildId);
|
|
||||||
var channel = FindChannelById(guild, ChannelId);
|
|
||||||
|
|
||||||
Debug("Checking channel access");
|
|
||||||
//channel.GetUser(channel.Guild.CurrentUser.Id);
|
|
||||||
if (channel.GetUser(channel.Guild.CurrentUser.Id) == null)
|
|
||||||
{
|
|
||||||
Info("Skipping channel without access");
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Math.Abs(StopTimestamp) < 0.4)
|
|
||||||
StopTimestamp = KnownTimestamp;
|
|
||||||
Trace("Initialized scanning parameters.");
|
|
||||||
|
|
||||||
while (!finished)
|
|
||||||
{
|
|
||||||
Trace("Entering scanning loop...");
|
|
||||||
var messages = new List<IMessage>();
|
|
||||||
|
|
||||||
Trace($"Downloading next {limit} messages...");
|
|
||||||
if (isFirst)
|
|
||||||
{
|
|
||||||
//messages = await channel.GetMessagesAsync(limit).ToArray() as SocketMessage[];
|
|
||||||
var realMessages = await channel.GetMessagesAsync(limit).ToArrayAsync();
|
|
||||||
|
|
||||||
foreach (var realMessageArray in realMessages)
|
|
||||||
foreach (var realMessage in realMessageArray)
|
|
||||||
messages.Add(realMessage);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
var realMessages = await channel.GetMessagesAsync(lastId, Direction.Before, limit).ToArrayAsync();
|
|
||||||
|
|
||||||
foreach (var realMessageArray in realMessages)
|
|
||||||
foreach (var realMessage in realMessageArray)
|
|
||||||
messages.Add(realMessage);
|
|
||||||
|
|
||||||
//messages = await channel.GetMessagesAsync(lastId, Direction.Before, limit).ToArray() as SocketMessage[];
|
|
||||||
}
|
|
||||||
|
|
||||||
Trace($"Downloaded {messages.Count} messages.");
|
|
||||||
|
|
||||||
isFirst = false;
|
|
||||||
|
|
||||||
foreach (var m in messages)
|
|
||||||
{
|
|
||||||
if (!IsValid)
|
|
||||||
return null;
|
|
||||||
|
|
||||||
Core.Scheduler.MessagesScanned++;
|
|
||||||
|
|
||||||
Debug($"Processing message {m.Id}");
|
|
||||||
if (m.Id < lastId)
|
|
||||||
{
|
|
||||||
Trace($"Updating lastId ({lastId}) to {m.Id}");
|
|
||||||
lastId = m.Id;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m.CreatedAt.UtcDateTime.ToUnixTimeStamp() <= StopTimestamp)
|
|
||||||
{
|
|
||||||
Debug("Found a message with a known timestamp...Stopping scan.");
|
|
||||||
finished = true;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
Trace($"Message {m.Id} has {m.Attachments.Count} attachments.");
|
|
||||||
if (m.Attachments.Count > 0)
|
|
||||||
{
|
|
||||||
result.Add(m);
|
|
||||||
Core.Scheduler.TotalAttachments += (ulong) m.Attachments.Count;
|
|
||||||
Trace($"Added message {m.Id}");
|
|
||||||
}
|
|
||||||
|
|
||||||
Debug($"Finished message {m.Id}");
|
|
||||||
}
|
|
||||||
|
|
||||||
finished = finished || messages.Count < limit;
|
|
||||||
}
|
|
||||||
|
|
||||||
Trace($"Downloaded all messages for guild {GuildId} channel {ChannelId}.");
|
|
||||||
|
|
||||||
Trace("Sorting messages...");
|
|
||||||
result.Sort((a, b) => DateTime.Compare(a.CreatedAt.UtcDateTime, b.CreatedAt.UtcDateTime));
|
|
||||||
|
|
||||||
if (result.Count > 0)
|
|
||||||
{
|
|
||||||
Trace("Updating StopTimestamp for next scan...");
|
|
||||||
StopTimestamp = result[result.Count - 1].CreatedAt.UtcDateTime.ToUnixTimeStamp();
|
|
||||||
}
|
|
||||||
|
|
||||||
Debug($"Fisnished scan of guild {GuildId} channel {ChannelId}.");
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Stop()
|
|
||||||
{
|
|
||||||
IsValid = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static IEnumerable<Job> RestoreJobs()
|
|
||||||
{
|
|
||||||
Debug("Restoring jobs...");
|
|
||||||
Trace("Getting jobs collection...");
|
|
||||||
var jobDb = Core.Database.GetCollection<Job>("jobs");
|
|
||||||
|
|
||||||
Trace("Creating new empty job list");
|
|
||||||
return jobDb.FindAll();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,340 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Net;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Discord;
|
|
||||||
using Discord.WebSocket;
|
|
||||||
using DML.Application.Classes;
|
|
||||||
using SweetLib.Utils.Extensions;
|
|
||||||
using SweetLib.Utils.Logger;
|
|
||||||
|
|
||||||
namespace DML.AppCore.Classes
|
|
||||||
{
|
|
||||||
public class JobScheduler
|
|
||||||
{
|
|
||||||
private ulong attachmentsDownloaded;
|
|
||||||
private ulong messageScanned;
|
|
||||||
public Dictionary<int, Queue<IMessage>> RunningJobs = new Dictionary<int, Queue<IMessage>>();
|
|
||||||
private ulong totalAttachments;
|
|
||||||
|
|
||||||
private bool Run { get; set; }
|
|
||||||
public List<Job> JobList { get; set; } = new List<Job>();
|
|
||||||
internal int RunningThreads { get; set; }
|
|
||||||
|
|
||||||
internal ulong MessagesScanned
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
lock (this)
|
|
||||||
{
|
|
||||||
return messageScanned;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
lock (this)
|
|
||||||
{
|
|
||||||
messageScanned = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal ulong TotalAttachments
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
lock (this)
|
|
||||||
{
|
|
||||||
return totalAttachments;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
lock (this)
|
|
||||||
{
|
|
||||||
totalAttachments = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
internal ulong AttachmentsDownloaded
|
|
||||||
{
|
|
||||||
get
|
|
||||||
{
|
|
||||||
lock (this)
|
|
||||||
{
|
|
||||||
return attachmentsDownloaded;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
set
|
|
||||||
{
|
|
||||||
lock (this)
|
|
||||||
{
|
|
||||||
attachmentsDownloaded = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Stop()
|
|
||||||
{
|
|
||||||
Run = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void Start()
|
|
||||||
{
|
|
||||||
Run = true;
|
|
||||||
|
|
||||||
Task.Run(async () =>
|
|
||||||
{
|
|
||||||
Logger.Info("Started JobScheduler...");
|
|
||||||
while (Run)
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Logger.Debug("Entering job list handler loop...");
|
|
||||||
//foreach (var job in JobList)
|
|
||||||
for (var i = JobList.Count - 1; i >= 0; i--)
|
|
||||||
{
|
|
||||||
var job = JobList[i];
|
|
||||||
Logger.Debug($"Checking job {job}");
|
|
||||||
var hasJob = false;
|
|
||||||
|
|
||||||
Logger.Trace("Locking scheduler...");
|
|
||||||
lock (this)
|
|
||||||
{
|
|
||||||
Logger.Trace("Checking if job is already performed...");
|
|
||||||
hasJob = RunningJobs.ContainsKey(job.Id);
|
|
||||||
}
|
|
||||||
|
|
||||||
Logger.Trace("Unlocked scheduler.");
|
|
||||||
|
|
||||||
if (!hasJob)
|
|
||||||
{
|
|
||||||
Logger.Debug("Job is not performed yet...Performing job...");
|
|
||||||
var queue = new Queue<IMessage>();
|
|
||||||
|
|
||||||
Logger.Trace("Locking scheduler...");
|
|
||||||
lock (this)
|
|
||||||
{
|
|
||||||
Logger.Trace("Adding job to running jobs.");
|
|
||||||
RunningJobs.Add(job.Id, queue);
|
|
||||||
}
|
|
||||||
|
|
||||||
Logger.Trace("Unlocked scheduler.");
|
|
||||||
|
|
||||||
Logger.Trace("Issuing job message scan...");
|
|
||||||
var messages = await job.Scan();
|
|
||||||
|
|
||||||
if (messages == null)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
Logger.Trace($"Adding {messages.Count} messages to queue...");
|
|
||||||
foreach (var msg in messages) queue.Enqueue(msg);
|
|
||||||
Logger.Trace($"Added {queue.Count} messages to queue.");
|
|
||||||
|
|
||||||
if (messages.Count != queue.Count)
|
|
||||||
Logger.Warn("Not all messages have been added into the queue.");
|
|
||||||
|
|
||||||
var startedDownload = false;
|
|
||||||
|
|
||||||
while (!startedDownload)
|
|
||||||
{
|
|
||||||
Logger.Debug("Entering loop to check thread availability");
|
|
||||||
Logger.Trace("Locking scheduler...");
|
|
||||||
lock (this)
|
|
||||||
{
|
|
||||||
Logger.Trace(
|
|
||||||
$"Checking thread limit. Running: {RunningThreads}, Max: {Core.Settings.ThreadLimit}");
|
|
||||||
if (RunningThreads >= Core.Settings.ThreadLimit)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
RunningThreads++;
|
|
||||||
startedDownload = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
Logger.Trace("Unlocked scheduler.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Logger.Trace("Start downloading job async.");
|
|
||||||
Task.Run(() => WorkQueue(job.Id)); // do not await to work parallel
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
Logger.Error(ex.Message);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private void WorkQueue(int jobId)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
Logger.Debug("Beginning job download...");
|
|
||||||
Logger.Trace("Finding job...");
|
|
||||||
var job = (from j in JobList where j.Id == jobId select j).FirstOrDefault();
|
|
||||||
|
|
||||||
if (job == null)
|
|
||||||
{
|
|
||||||
Logger.Warn($"Associating job not found! JobId: {jobId}");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Logger.Trace("Found job.");
|
|
||||||
|
|
||||||
Queue<IMessage> queue;
|
|
||||||
Logger.Trace("Locking scheduler...");
|
|
||||||
lock (this)
|
|
||||||
{
|
|
||||||
Logger.Trace("Finiding queue...");
|
|
||||||
if (!RunningJobs.TryGetValue(jobId, out queue))
|
|
||||||
{
|
|
||||||
Logger.Warn($"Queue for job {jobId} not found!");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Logger.Trace("Queue found.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Logger.Trace("Unlocked scheduler.");
|
|
||||||
|
|
||||||
Logger.Debug($"Messages to process for job {jobId}: {queue.Count}");
|
|
||||||
while (queue.Count > 0)
|
|
||||||
{
|
|
||||||
Logger.Trace("Locking scheduler...");
|
|
||||||
lock (this)
|
|
||||||
{
|
|
||||||
Logger.Trace("Checking if still a job...");
|
|
||||||
if (!RunningJobs.ContainsKey(jobId))
|
|
||||||
{
|
|
||||||
Logger.Warn($"Queue for job {jobId} not found!");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Logger.Trace("Continue working...");
|
|
||||||
}
|
|
||||||
|
|
||||||
Logger.Trace("Unlocked scheduler.");
|
|
||||||
|
|
||||||
Logger.Trace("Dequeueing message...");
|
|
||||||
var message = queue.Dequeue();
|
|
||||||
|
|
||||||
Logger.Debug($"Attachments for message {message.Id}: {message.Attachments.Count}");
|
|
||||||
foreach (var a in message.Attachments)
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var fileName = Path.Combine(Core.Settings.OperatingFolder, Core.Settings.FileNameScheme);
|
|
||||||
|
|
||||||
Logger.Trace("Replacing filename placeholders...");
|
|
||||||
|
|
||||||
var extensionRequired = !fileName.EndsWith("%name%");
|
|
||||||
|
|
||||||
var serverName = "unknown";
|
|
||||||
string nickname = null;
|
|
||||||
|
|
||||||
if (fileName.Contains("%guild%") || fileName.Contains("%nickname%"))
|
|
||||||
{
|
|
||||||
var socketTextChannel = message.Channel as SocketTextChannel;
|
|
||||||
if (socketTextChannel != null)
|
|
||||||
{
|
|
||||||
// fetch servername
|
|
||||||
serverName = socketTextChannel.Guild.Name;
|
|
||||||
serverName = Path.GetInvalidFileNameChars()
|
|
||||||
.Aggregate(serverName, (current, c) => current.Replace(c, ' '));
|
|
||||||
|
|
||||||
// fetch nickname
|
|
||||||
if (fileName.Contains("%nickname%"))
|
|
||||||
{
|
|
||||||
var serverUser =
|
|
||||||
socketTextChannel.GetUser(message.Author
|
|
||||||
.Id); // can be null if user left the server
|
|
||||||
if (serverUser != null)
|
|
||||||
{
|
|
||||||
nickname = serverUser.Nickname;
|
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(nickname))
|
|
||||||
nickname = Path.GetInvalidFileNameChars()
|
|
||||||
.Aggregate(nickname, (current, c) => current.Replace(c, ' '));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// fetch channelname
|
|
||||||
var channelName = message.Channel.Name;
|
|
||||||
channelName = Path.GetInvalidFileNameChars()
|
|
||||||
.Aggregate(channelName, (current, c) => current.Replace(c, ' '));
|
|
||||||
|
|
||||||
// fetch username
|
|
||||||
var username = message.Author.Username;
|
|
||||||
username = Path.GetInvalidFileNameChars()
|
|
||||||
.Aggregate(username, (current, c) => current.Replace(c, ' '));
|
|
||||||
|
|
||||||
|
|
||||||
fileName =
|
|
||||||
fileName.Replace("%guild%", serverName)
|
|
||||||
.Replace("%channel%", channelName)
|
|
||||||
.Replace("%timestamp%", message.CreatedAt.UtcDateTime.ToUnixTimeStamp().ToString())
|
|
||||||
.Replace("%name%", a.Filename)
|
|
||||||
.Replace("%id%", a.Id.ToString())
|
|
||||||
.Replace("%userid%", message.Author.Id.ToString())
|
|
||||||
.Replace("%username%", username)
|
|
||||||
.Replace("%nickname%",
|
|
||||||
!string.IsNullOrEmpty(nickname) ? nickname : username);
|
|
||||||
|
|
||||||
if (extensionRequired)
|
|
||||||
fileName += Path.GetExtension(a.Filename);
|
|
||||||
|
|
||||||
Logger.Trace($"Detemined file name: {fileName}.");
|
|
||||||
|
|
||||||
|
|
||||||
if (File.Exists(fileName) && new FileInfo(fileName).Length == a.Size)
|
|
||||||
{
|
|
||||||
Logger.Debug($"{fileName} already existing with its estimated size. Skipping...");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
Logger.Trace("Determining directory...");
|
|
||||||
var fileDirectory = Path.GetDirectoryName(fileName);
|
|
||||||
|
|
||||||
if (!Directory.Exists(fileDirectory))
|
|
||||||
{
|
|
||||||
Logger.Info($"Directory {fileDirectory} does not exist. Creating directory...");
|
|
||||||
Directory.CreateDirectory(fileDirectory);
|
|
||||||
Logger.Debug("Created directory.");
|
|
||||||
}
|
|
||||||
|
|
||||||
var wc = new WebClient();
|
|
||||||
Logger.Debug($"Starting downloading of attachment {a.Id}...");
|
|
||||||
|
|
||||||
wc.DownloadFile(new Uri(a.Url), fileName);
|
|
||||||
Logger.Debug($"Downloaded attachment {a.Id}.");
|
|
||||||
|
|
||||||
Logger.Trace("Updating known timestamp for job...");
|
|
||||||
job.KnownTimestamp = message.CreatedAt.UtcDateTime.ToUnixTimeStamp();
|
|
||||||
job.Store();
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
AttachmentsDownloaded++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
Logger.Trace("Locking scheduler...");
|
|
||||||
lock (this)
|
|
||||||
{
|
|
||||||
Logger.Trace($"Removing {jobId} from running jobs...");
|
|
||||||
RunningJobs.Remove(jobId);
|
|
||||||
Logger.Trace("Decreasing thread count...");
|
|
||||||
RunningThreads--;
|
|
||||||
}
|
|
||||||
|
|
||||||
Logger.Trace("Unlocked scheduler.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,39 +0,0 @@
|
||||||
using SweetLib.Utils.Logger;
|
|
||||||
|
|
||||||
namespace DML.Application.Classes
|
|
||||||
{
|
|
||||||
public class Settings
|
|
||||||
{
|
|
||||||
public int Id { get; } = 1; // using always unique ID
|
|
||||||
public string Email { get; set; }
|
|
||||||
public string Password { get; set; }
|
|
||||||
public string LoginToken { get; set; }
|
|
||||||
public bool UseUserData { get; set; } = false;
|
|
||||||
public bool SavePassword { get; set; } = false;
|
|
||||||
public LogLevel ApplicactionLogLevel { get; set; } = LogLevel.Info | LogLevel.Warn | LogLevel.Error;
|
|
||||||
public string OperatingFolder { get; set; }
|
|
||||||
public string FileNameScheme { get; set; } = @"%guild%\%channel%\%id%";
|
|
||||||
public bool SkipExistingFiles { get; set; } = true;
|
|
||||||
public int ThreadLimit { get; set; } = 50;
|
|
||||||
public bool ShowStartUpHints { get; set; } = true;
|
|
||||||
|
|
||||||
public void Store()
|
|
||||||
{
|
|
||||||
Logger.Trace("Getting settings collection...");
|
|
||||||
var settingsDB = Core.Database.GetCollection<Settings>("settings");
|
|
||||||
|
|
||||||
Logger.Debug("Storing settings to database...");
|
|
||||||
|
|
||||||
if (settingsDB.Exists(_setting => _setting.Id == Id))
|
|
||||||
{
|
|
||||||
Logger.Trace("Updating existing value...");
|
|
||||||
settingsDB.Update(this);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Logger.Trace("Adding new value...");
|
|
||||||
settingsDB.Insert(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,311 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<Project ToolsVersion="14.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
|
||||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
|
||||||
<PropertyGroup>
|
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
|
||||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
|
||||||
<ProjectGuid>{C130DE6A-3237-42B5-BE9F-783D1CD104C6}</ProjectGuid>
|
|
||||||
<OutputType>Library</OutputType>
|
|
||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
|
||||||
<RootNamespace>DML.Application</RootNamespace>
|
|
||||||
<AssemblyName>Discord Media Loader.Application</AssemblyName>
|
|
||||||
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
|
||||||
<FileAlignment>512</FileAlignment>
|
|
||||||
<TargetFrameworkProfile />
|
|
||||||
<NuGetPackageImportStamp>
|
|
||||||
</NuGetPackageImportStamp>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
|
||||||
<DebugSymbols>true</DebugSymbols>
|
|
||||||
<DebugType>full</DebugType>
|
|
||||||
<Optimize>false</Optimize>
|
|
||||||
<OutputPath>bin\Debug\</OutputPath>
|
|
||||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
<LangVersion>8</LangVersion>
|
|
||||||
</PropertyGroup>
|
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
|
||||||
<DebugType>pdbonly</DebugType>
|
|
||||||
<Optimize>true</Optimize>
|
|
||||||
<OutputPath>bin\Release\</OutputPath>
|
|
||||||
<DefineConstants>TRACE</DefineConstants>
|
|
||||||
<ErrorReport>prompt</ErrorReport>
|
|
||||||
<WarningLevel>4</WarningLevel>
|
|
||||||
<LangVersion>8</LangVersion>
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Reference Include="LiteDB, Version=4.1.4.0, Culture=neutral, PublicKeyToken=4ee40123013c9f27, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\LiteDB.4.1.4\lib\net40\LiteDB.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\Microsoft.Bcl.AsyncInterfaces.6.0.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Microsoft.Extensions.DependencyInjection, Version=3.1.6.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\Microsoft.Extensions.DependencyInjection.3.1.6\lib\net461\Microsoft.Extensions.DependencyInjection.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Microsoft.Extensions.DependencyInjection.Abstractions, Version=3.1.6.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.3.1.6\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Microsoft.Win32.Primitives, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\Microsoft.Win32.Primitives.4.3.0\lib\net46\Microsoft.Win32.Primitives.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Microsoft.Win32.Registry, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\Microsoft.Win32.Registry.4.7.0\lib\net461\Microsoft.Win32.Registry.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Nito.AsyncEx.Context, Version=5.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\Nito.AsyncEx.Context.5.0.0\lib\netstandard2.0\Nito.AsyncEx.Context.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Nito.AsyncEx.Coordination, Version=5.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\Nito.AsyncEx.Coordination.5.0.0\lib\netstandard2.0\Nito.AsyncEx.Coordination.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Nito.AsyncEx.Interop.WaitHandles, Version=5.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\Nito.AsyncEx.Interop.WaitHandles.5.0.0\lib\netstandard2.0\Nito.AsyncEx.Interop.WaitHandles.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Nito.AsyncEx.Oop, Version=5.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\Nito.AsyncEx.Oop.5.0.0\lib\netstandard2.0\Nito.AsyncEx.Oop.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Nito.AsyncEx.Tasks, Version=5.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\Nito.AsyncEx.Tasks.5.0.0\lib\netstandard2.0\Nito.AsyncEx.Tasks.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Nito.Cancellation, Version=1.0.5.0, Culture=neutral, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\Nito.Cancellation.1.0.5\lib\netstandard2.0\Nito.Cancellation.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Nito.Collections.Deque, Version=1.0.4.0, Culture=neutral, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\Nito.Collections.Deque.1.0.4\lib\netstandard2.0\Nito.Collections.Deque.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Nito.Disposables, Version=2.1.0.0, Culture=neutral, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\Nito.Disposables.2.1.0\lib\net461\Nito.Disposables.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Octokit, Version=0.48.0.0, Culture=neutral, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\Octokit.0.48.0\lib\net46\Octokit.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="RestSharp, Version=106.11.4.0, Culture=neutral, PublicKeyToken=598062e77f915f75, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\RestSharp.106.11.4\lib\net452\RestSharp.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="SharpRaven, Version=2.4.0.0, Culture=neutral, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\SharpRaven.2.4.0\lib\net45\SharpRaven.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="SuperSocket.ClientEngine, Version=0.10.0.0, Culture=neutral, PublicKeyToken=ee9af13f57f00acc, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\SuperSocket.ClientEngine.Core.0.10.0\lib\net45\SuperSocket.ClientEngine.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="SweetLib, Version=0.2.1.0, Culture=neutral, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\SweetLib.0.2.1-alpha\lib\netstandard1.3\SweetLib.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System" />
|
|
||||||
<Reference Include="System.AppContext, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.AppContext.4.3.0\lib\net46\System.AppContext.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Collections.Immutable, Version=1.2.5.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Collections.Immutable.1.7.1\lib\net461\System.Collections.Immutable.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Collections.Specialized, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Collections.Specialized.4.3.0\lib\net46\System.Collections.Specialized.dll</HintPath>
|
|
||||||
<Private>True</Private>
|
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.ComponentModel.Composition" />
|
|
||||||
<Reference Include="System.Configuration" />
|
|
||||||
<Reference Include="System.Console, Version=4.0.1.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Console.4.3.1\lib\net46\System.Console.dll</HintPath>
|
|
||||||
<Private>True</Private>
|
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Core" />
|
|
||||||
<Reference Include="System.Diagnostics.DiagnosticSource, Version=4.0.5.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Diagnostics.DiagnosticSource.4.7.1\lib\net46\System.Diagnostics.DiagnosticSource.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Drawing" />
|
|
||||||
<Reference Include="System.Globalization.Calendars, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Globalization.Calendars.4.3.0\lib\net46\System.Globalization.Calendars.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Interactive.Async, Version=4.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Interactive.Async.4.0.0\lib\net461\System.Interactive.Async.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.IO.Compression, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll</HintPath>
|
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.IO.Compression.FileSystem" />
|
|
||||||
<Reference Include="System.IO.Compression.ZipFile, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.IO.Compression.ZipFile.4.3.0\lib\net46\System.IO.Compression.ZipFile.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.IO.FileSystem, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.IO.FileSystem.4.3.0\lib\net46\System.IO.FileSystem.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.IO.FileSystem.Primitives, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.IO.FileSystem.Primitives.4.3.0\lib\net46\System.IO.FileSystem.Primitives.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Linq.Async, Version=4.1.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Linq.Async.4.1.1\lib\net461\System.Linq.Async.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Net.Http, Version=4.1.1.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll</HintPath>
|
|
||||||
<Private>True</Private>
|
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Net.NameResolution, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Net.NameResolution.4.3.0\lib\net46\System.Net.NameResolution.dll</HintPath>
|
|
||||||
<Private>True</Private>
|
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Net.Security, Version=4.0.1.2, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Net.Security.4.3.2\lib\net46\System.Net.Security.dll</HintPath>
|
|
||||||
<Private>True</Private>
|
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Net.Sockets, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Net.Sockets.4.3.0\lib\net46\System.Net.Sockets.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Numerics" />
|
|
||||||
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Runtime, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL" />
|
|
||||||
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.6.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.7.1\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>
|
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Security.AccessControl, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Security.AccessControl.4.7.0\lib\net461\System.Security.AccessControl.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Security.Cryptography.Algorithms, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Security.Cryptography.Algorithms.4.3.1\lib\net461\System.Security.Cryptography.Algorithms.dll</HintPath>
|
|
||||||
<Private>True</Private>
|
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Security.Cryptography.Encoding, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Security.Cryptography.Primitives, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Security.Cryptography.X509Certificates, Version=4.1.1.2, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Security.Cryptography.X509Certificates.4.3.2\lib\net461\System.Security.Cryptography.X509Certificates.dll</HintPath>
|
|
||||||
<Private>True</Private>
|
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Security.Principal.Windows, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Security.Principal.Windows.4.7.0\lib\net461\System.Security.Principal.Windows.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Web" />
|
|
||||||
<Reference Include="System.Windows.Forms" />
|
|
||||||
<Reference Include="System.Xml.Linq" />
|
|
||||||
<Reference Include="System.Data.DataSetExtensions" />
|
|
||||||
<Reference Include="Microsoft.CSharp" />
|
|
||||||
<Reference Include="System.Data" />
|
|
||||||
<Reference Include="System.Xml" />
|
|
||||||
<Reference Include="System.Xml.ReaderWriter, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Xml.ReaderWriter.4.3.1\lib\net46\System.Xml.ReaderWriter.dll</HintPath>
|
|
||||||
<Private>True</Private>
|
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="WebSocket4Net, Version=0.15.2.11, Culture=neutral, PublicKeyToken=eb4e154b696bf72a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\WebSocket4Net.0.15.2\lib\net45\WebSocket4Net.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<Compile Include="Classes\Core.cs" />
|
|
||||||
<Compile Include="Classes\Job.cs" />
|
|
||||||
<Compile Include="Classes\JobScheduler.cs" />
|
|
||||||
<Compile Include="Dialogs\LoginDialog.cs">
|
|
||||||
<SubType>Form</SubType>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="Dialogs\LoginDialog.Designer.cs">
|
|
||||||
<DependentUpon>LoginDialog.cs</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="FrmInternalSplash.cs">
|
|
||||||
<SubType>Form</SubType>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="FrmInternalSplash.Designer.cs">
|
|
||||||
<DependentUpon>FrmInternalSplash.cs</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="Helper\IdentifiedString.cs" />
|
|
||||||
<Compile Include="MainForm.cs">
|
|
||||||
<SubType>Form</SubType>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="MainForm.Designer.cs">
|
|
||||||
<DependentUpon>MainForm.cs</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
|
||||||
<Compile Include="Properties\Resources.Designer.cs">
|
|
||||||
<AutoGen>True</AutoGen>
|
|
||||||
<DesignTime>True</DesignTime>
|
|
||||||
<DependentUpon>Resources.resx</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="Classes\Settings.cs" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<EmbeddedResource Include="Dialogs\LoginDialog.resx">
|
|
||||||
<DependentUpon>LoginDialog.cs</DependentUpon>
|
|
||||||
</EmbeddedResource>
|
|
||||||
<EmbeddedResource Include="FrmInternalSplash.resx">
|
|
||||||
<DependentUpon>FrmInternalSplash.cs</DependentUpon>
|
|
||||||
</EmbeddedResource>
|
|
||||||
<EmbeddedResource Include="MainForm.resx">
|
|
||||||
<DependentUpon>MainForm.cs</DependentUpon>
|
|
||||||
</EmbeddedResource>
|
|
||||||
<EmbeddedResource Include="Properties\Resources.resx">
|
|
||||||
<Generator>ResXFileCodeGenerator</Generator>
|
|
||||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
|
||||||
</EmbeddedResource>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<None Include="app.config" />
|
|
||||||
<None Include="packages.config" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ProjectReference Include="..\DML.Client\DML.Client.csproj">
|
|
||||||
<Project>{045eb4a1-34e7-47e0-867e-e10c40505095}</Project>
|
|
||||||
<Name>DML.Client</Name>
|
|
||||||
</ProjectReference>
|
|
||||||
<ProjectReference Include="..\libs\Discord.Net\src\Discord.Net.Core\Discord.Net.Core.csproj">
|
|
||||||
<Project>{8bd82fae-47f7-41fd-a862-892c8aff8c66}</Project>
|
|
||||||
<Name>Discord.Net.Core</Name>
|
|
||||||
</ProjectReference>
|
|
||||||
<ProjectReference Include="..\libs\Discord.Net\src\Discord.Net.Rest\Discord.Net.Rest.csproj">
|
|
||||||
<Project>{103472c3-834d-4561-9395-6febfeb165ac}</Project>
|
|
||||||
<Name>Discord.Net.Rest</Name>
|
|
||||||
</ProjectReference>
|
|
||||||
<ProjectReference Include="..\libs\Discord.Net\src\Discord.Net.WebSocket\Discord.Net.WebSocket.csproj">
|
|
||||||
<Project>{58009f12-b2d9-4f1c-954b-a7cfea17dbc7}</Project>
|
|
||||||
<Name>Discord.Net.WebSocket</Name>
|
|
||||||
</ProjectReference>
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<None Include="Resources\Serraniel-Logo4-NO-BG.png" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<None Include="Resources\info_icon.png" />
|
|
||||||
</ItemGroup>
|
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
|
||||||
<Import Project="..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets" Condition="Exists('..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets')" />
|
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
|
||||||
<PropertyGroup>
|
|
||||||
<ErrorText>Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Verwenden Sie die Wiederherstellung von NuGet-Paketen, um die fehlenden Dateien herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}".</ErrorText>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Error Condition="!Exists('..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets'))" />
|
|
||||||
</Target>
|
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
|
||||||
Other similar extension points exist, see Microsoft.Common.targets.
|
|
||||||
<Target Name="BeforeBuild">
|
|
||||||
</Target>
|
|
||||||
<Target Name="AfterBuild">
|
|
||||||
</Target>
|
|
||||||
-->
|
|
||||||
</Project>
|
|
|
@ -1,2 +0,0 @@
|
||||||
<wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
|
|
||||||
<s:String x:Key="/Default/CodeInspection/CSharpLanguageProject/LanguageLevel/@EntryValue">CSharp80</s:String></wpf:ResourceDictionary>
|
|
|
@ -1,131 +0,0 @@
|
||||||
namespace DML.Application.Dialogs
|
|
||||||
{
|
|
||||||
partial class LoginDialog
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Required designer variable.
|
|
||||||
/// </summary>
|
|
||||||
private System.ComponentModel.IContainer components = null;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Clean up any resources being used.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
|
||||||
protected override void Dispose(bool disposing)
|
|
||||||
{
|
|
||||||
if (disposing && (components != null))
|
|
||||||
{
|
|
||||||
components.Dispose();
|
|
||||||
}
|
|
||||||
base.Dispose(disposing);
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Windows Form Designer generated code
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Required method for Designer support - do not modify
|
|
||||||
/// the contents of this method with the code editor.
|
|
||||||
/// </summary>
|
|
||||||
private void InitializeComponent()
|
|
||||||
{
|
|
||||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LoginDialog));
|
|
||||||
this.pnlButtons = new System.Windows.Forms.Panel();
|
|
||||||
this.btnAbort = new System.Windows.Forms.Button();
|
|
||||||
this.btnOk = new System.Windows.Forms.Button();
|
|
||||||
this.lbHowToToken = new System.Windows.Forms.Label();
|
|
||||||
this.edToken = new System.Windows.Forms.TextBox();
|
|
||||||
this.lbToken = new System.Windows.Forms.Label();
|
|
||||||
this.pnlButtons.SuspendLayout();
|
|
||||||
this.SuspendLayout();
|
|
||||||
//
|
|
||||||
// pnlButtons
|
|
||||||
//
|
|
||||||
this.pnlButtons.BackColor = System.Drawing.SystemColors.ButtonShadow;
|
|
||||||
this.pnlButtons.Controls.Add(this.btnAbort);
|
|
||||||
this.pnlButtons.Controls.Add(this.btnOk);
|
|
||||||
this.pnlButtons.Dock = System.Windows.Forms.DockStyle.Bottom;
|
|
||||||
this.pnlButtons.Location = new System.Drawing.Point(0, 189);
|
|
||||||
this.pnlButtons.Name = "pnlButtons";
|
|
||||||
this.pnlButtons.Size = new System.Drawing.Size(426, 51);
|
|
||||||
this.pnlButtons.TabIndex = 0;
|
|
||||||
//
|
|
||||||
// btnAbort
|
|
||||||
//
|
|
||||||
this.btnAbort.Location = new System.Drawing.Point(348, 16);
|
|
||||||
this.btnAbort.Name = "btnAbort";
|
|
||||||
this.btnAbort.Size = new System.Drawing.Size(75, 23);
|
|
||||||
this.btnAbort.TabIndex = 1;
|
|
||||||
this.btnAbort.Text = "&Abort";
|
|
||||||
this.btnAbort.UseVisualStyleBackColor = true;
|
|
||||||
this.btnAbort.Click += new System.EventHandler(this.btnAbort_Click);
|
|
||||||
//
|
|
||||||
// btnOk
|
|
||||||
//
|
|
||||||
this.btnOk.Location = new System.Drawing.Point(267, 16);
|
|
||||||
this.btnOk.Name = "btnOk";
|
|
||||||
this.btnOk.Size = new System.Drawing.Size(75, 23);
|
|
||||||
this.btnOk.TabIndex = 0;
|
|
||||||
this.btnOk.Text = "&Ok";
|
|
||||||
this.btnOk.UseVisualStyleBackColor = true;
|
|
||||||
this.btnOk.Click += new System.EventHandler(this.btnOk_Click);
|
|
||||||
//
|
|
||||||
// lbHowToToken
|
|
||||||
//
|
|
||||||
this.lbHowToToken.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
|
||||||
| System.Windows.Forms.AnchorStyles.Left)));
|
|
||||||
this.lbHowToToken.Location = new System.Drawing.Point(7, 58);
|
|
||||||
this.lbHowToToken.Name = "lbHowToToken";
|
|
||||||
this.lbHowToToken.Size = new System.Drawing.Size(412, 128);
|
|
||||||
this.lbHowToToken.TabIndex = 5;
|
|
||||||
this.lbHowToToken.Text = resources.GetString("lbHowToToken.Text");
|
|
||||||
//
|
|
||||||
// edToken
|
|
||||||
//
|
|
||||||
this.edToken.Location = new System.Drawing.Point(79, 12);
|
|
||||||
this.edToken.Name = "edToken";
|
|
||||||
this.edToken.Size = new System.Drawing.Size(335, 20);
|
|
||||||
this.edToken.TabIndex = 4;
|
|
||||||
//
|
|
||||||
// lbToken
|
|
||||||
//
|
|
||||||
this.lbToken.AutoSize = true;
|
|
||||||
this.lbToken.Location = new System.Drawing.Point(7, 15);
|
|
||||||
this.lbToken.Name = "lbToken";
|
|
||||||
this.lbToken.Size = new System.Drawing.Size(66, 13);
|
|
||||||
this.lbToken.TabIndex = 3;
|
|
||||||
this.lbToken.Text = "Login token:";
|
|
||||||
//
|
|
||||||
// LoginDialog
|
|
||||||
//
|
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
|
||||||
this.ClientSize = new System.Drawing.Size(426, 240);
|
|
||||||
this.Controls.Add(this.lbHowToToken);
|
|
||||||
this.Controls.Add(this.edToken);
|
|
||||||
this.Controls.Add(this.lbToken);
|
|
||||||
this.Controls.Add(this.pnlButtons);
|
|
||||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
|
|
||||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
|
||||||
this.MaximizeBox = false;
|
|
||||||
this.MinimizeBox = false;
|
|
||||||
this.Name = "LoginDialog";
|
|
||||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
|
||||||
this.Text = "LoginForm";
|
|
||||||
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.LoginDialog_FormClosing);
|
|
||||||
this.Shown += new System.EventHandler(this.LoginDialog_Shown);
|
|
||||||
this.pnlButtons.ResumeLayout(false);
|
|
||||||
this.ResumeLayout(false);
|
|
||||||
this.PerformLayout();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
private System.Windows.Forms.Panel pnlButtons;
|
|
||||||
private System.Windows.Forms.Button btnAbort;
|
|
||||||
private System.Windows.Forms.Button btnOk;
|
|
||||||
private System.Windows.Forms.Label lbHowToToken;
|
|
||||||
private System.Windows.Forms.TextBox edToken;
|
|
||||||
private System.Windows.Forms.Label lbToken;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,45 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.Windows.Forms;
|
|
||||||
using DML.Application.Classes;
|
|
||||||
using static SweetLib.Utils.Logger.Logger;
|
|
||||||
|
|
||||||
namespace DML.Application.Dialogs
|
|
||||||
{
|
|
||||||
public partial class LoginDialog : Form
|
|
||||||
{
|
|
||||||
public LoginDialog()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void LoginDialog_Shown(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
Trace("Login dialog shown.");
|
|
||||||
edToken.Text = Core.Settings.LoginToken;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void LoginDialog_FormClosing(object sender, FormClosingEventArgs e)
|
|
||||||
{
|
|
||||||
Trace($"Closing login dialog. Result: {DialogResult}");
|
|
||||||
if (DialogResult != DialogResult.OK)
|
|
||||||
return;
|
|
||||||
|
|
||||||
Debug("Adjusting login settings...");
|
|
||||||
Core.Settings.LoginToken = edToken.Text;
|
|
||||||
|
|
||||||
Core.Settings.Store();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void btnOk_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
Trace("btnOk pressed.");
|
|
||||||
DialogResult = DialogResult.OK;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void btnAbort_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
Trace("btnAbort pressed.");
|
|
||||||
DialogResult = DialogResult.Abort;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,415 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<root>
|
|
||||||
<!--
|
|
||||||
Microsoft ResX Schema
|
|
||||||
|
|
||||||
Version 2.0
|
|
||||||
|
|
||||||
The primary goals of this format is to allow a simple XML format
|
|
||||||
that is mostly human readable. The generation and parsing of the
|
|
||||||
various data types are done through the TypeConverter classes
|
|
||||||
associated with the data types.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
... ado.net/XML headers & schema ...
|
|
||||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
|
||||||
<resheader name="version">2.0</resheader>
|
|
||||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
|
||||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
|
||||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
|
||||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
|
||||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
|
||||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
|
||||||
</data>
|
|
||||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
|
||||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
|
||||||
<comment>This is a comment</comment>
|
|
||||||
</data>
|
|
||||||
|
|
||||||
There are any number of "resheader" rows that contain simple
|
|
||||||
name/value pairs.
|
|
||||||
|
|
||||||
Each data row contains a name, and value. The row also contains a
|
|
||||||
type or mimetype. Type corresponds to a .NET class that support
|
|
||||||
text/value conversion through the TypeConverter architecture.
|
|
||||||
Classes that don't support this are serialized and stored with the
|
|
||||||
mimetype set.
|
|
||||||
|
|
||||||
The mimetype is used for serialized objects, and tells the
|
|
||||||
ResXResourceReader how to depersist the object. This is currently not
|
|
||||||
extensible. For a given mimetype the value must be set accordingly:
|
|
||||||
|
|
||||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
|
||||||
that the ResXResourceWriter will generate, however the reader can
|
|
||||||
read any of the formats listed below.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.binary.base64
|
|
||||||
value : The object must be serialized with
|
|
||||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.soap.base64
|
|
||||||
value : The object must be serialized with
|
|
||||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
|
||||||
value : The object must be serialized into a byte array
|
|
||||||
: using a System.ComponentModel.TypeConverter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
-->
|
|
||||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
|
||||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
|
||||||
<xsd:element name="root" msdata:IsDataSet="true">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:choice maxOccurs="unbounded">
|
|
||||||
<xsd:element name="metadata">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
|
||||||
<xsd:attribute name="type" type="xsd:string" />
|
|
||||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
|
||||||
<xsd:attribute ref="xml:space" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="assembly">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:attribute name="alias" type="xsd:string" />
|
|
||||||
<xsd:attribute name="name" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="data">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
|
||||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
|
||||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
|
||||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
|
||||||
<xsd:attribute ref="xml:space" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="resheader">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
</xsd:choice>
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
</xsd:schema>
|
|
||||||
<resheader name="resmimetype">
|
|
||||||
<value>text/microsoft-resx</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="version">
|
|
||||||
<value>2.0</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="reader">
|
|
||||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="writer">
|
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</resheader>
|
|
||||||
<data name="lbHowToToken.Text" xml:space="preserve">
|
|
||||||
<value>To find your login token please start Discord and press Ctrl + Shift + I shortcut. A browser inspector will open.
|
|
||||||
Navigate into the "Application" tab and select "Local Storage" / "https://discordapp.com". If the right site keeps blank use "Session Storage" instead.
|
|
||||||
Look for the token key and copy its value without the quotation marks.
|
|
||||||
|
|
||||||
IF YOU CANNOT FIND YOUR TOKEN you can try pressing Ctrl + R while having the inspector open. While reloading you still should be able to grab the token. It may disappear after discord has finished loading.</value>
|
|
||||||
</data>
|
|
||||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
|
||||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
|
||||||
<value>
|
|
||||||
AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
||||||
AAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8b////VP///3////+m////zP//
|
|
||||||
/+T////1//////////r////u////3f///8z///+m////f////1T///8b////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////M////5D////b////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/9v///+Q////M////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///w3///90////1v//
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
///////////////////////////////////////W////dP///w3///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A2K4AANiuAADYrgAA2K4AANiuAADfswAA////EP//
|
|
||||||
/4D////t////////////////////////////////////////////////9/zq/7XiQ/+340n/w+ho/9Pu
|
|
||||||
kf/m9b//+Pzt///////////////////////////////////////////////////////////t////gf//
|
|
||||||
/xCa2AAAmtgAAJrYAACa2AAAmtgAAJrYAAD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////ANiuAADYrgAA2K4AANiu
|
|
||||||
AAD///8B////Yf///+v//////////////////////////////////////////////////////////+z4
|
|
||||||
z/+a2AD/mtgA/5rYAP+a2AD/mtgA/6TcGf+65VL/3fKo//n98P//////////////////////////////
|
|
||||||
///////////////////////r////Yf///wGa2AAAmtgAAJrYAACa2AAA////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wDYrgAA2K4AANiuAAD///8k////xP//////////////////////////////////////////////////
|
|
||||||
///////////////////h87P/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+n3SD/zOt+//X7
|
|
||||||
5v/////////////////////////////////////////////////////E////I5rYAACa2AAAmtgAAP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A2K4AANiuAAD///9V////8f//////////////////////////////////
|
|
||||||
////////////////////////////////////////0+6Q/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+k3Bn/0e2K//v+9v//////////////////////////////////////////////
|
|
||||||
//H///9VmtgAAJrYAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wH///+M////////////////////////
|
|
||||||
/////////////////////////////////////////////////////////////8bpbv+a2AD/mtgA/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+u4DP/5/bD////////////////////
|
|
||||||
/////////////////////////////////4z///8B////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wb///+l////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
//+55E//mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5zZ
|
|
||||||
Bv/P7Ib/////////////////////////////////////////////////////pf///wb///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wb///+3////////////////////////////////////////////////////////////////////////
|
|
||||||
///////////////////+//3/rd8x/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+a2AD/mtgA/7zlV//5/fH/////////////////////////////////////////
|
|
||||||
//////+3////Bv///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wH///+k////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////+f3v/6PcF/+a2AD/mtgA/5rYAP+a2AD/mtgA/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/seE7//X75v//////////////
|
|
||||||
/////////////////////////////////6T///8B////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///+K////////////////////////////////////////
|
|
||||||
/////////////////////////////////////////////////////////////+751f+a2AD/mtgA/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rY
|
|
||||||
AP+s3y7/9Pvi////////////////////////////////////////////////i////wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///9V////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
///s+M//rd8w/6XcHf+c2Qb/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+a2AD/mtgA/6zfLv/1++f/////////////////////////////////////////
|
|
||||||
//////9V////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8j////8P//
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/////////////////////////////////v/6/fL/8PnZ/97yrP/E6Gv/qd4l/5rYAP+a2AD/mtgA/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/suE8//v99P//////////////
|
|
||||||
////////////////////////////8P///yP///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8B////xP//////////////////////////////////////////////////////////////////
|
|
||||||
//////////////////////////////////////////////////////////////////////////////v9
|
|
||||||
9f/e8qz/s+JA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rY
|
|
||||||
AP/A51/////////////////////////////////////////////////E////Af///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////Yf//////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
///////////////////////////////////f867/rN8t/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+a2AD/mtgA/9jwnP//////////////////////////////////////////////
|
|
||||||
/2H///8A////AP///wD///8A////AP///wD///8A////EP///+r/////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
//////////////////////////////////////////////////////////////r98//I6nX/mtgA/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+h2xL/8/rh////////////////////
|
|
||||||
///////////////////////q////Ev///wD///8A////AP///wD///8A////AP///3//////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/////////////9/yrf+h2xL/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/8Dn
|
|
||||||
X////////////////////////////////////////////////4D///8A////AP///wD///8A////AP//
|
|
||||||
/w3////u////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////7PjQ/6reKP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+c2QX/7vjT///////////////////////////////////////////u////Df//
|
|
||||||
/wD///8A////AP///wD///90////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
///////////////////////////////////////////////////////////////////0++L/qd4n/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/8PoaP//////////////////////////////
|
|
||||||
/////////////////3T///8A////AP///wD///8B////2///////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/////////////+360P+k4g3/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+j2xb/+Pzu////
|
|
||||||
///////////////////////////////////////b////Af///wD///8A////O///////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////wNCY/53dAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rY
|
|
||||||
AP+a2AD/mtgA/9/zr////////////////////////////////////////////////zv///8A////AP//
|
|
||||||
/5D/////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
//////////////////////////////////////////////////////////////f39/+Puin/n+AA/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP/F6W3/////////////////////////////////////////
|
|
||||||
//////+Q////AP///wD////Y////////////////////////////////////////////////////////
|
|
||||||
/////////////////////////////+3t7f+3t7f/jIyM/3Nzc/9oaGj/a2tr/35+fv+dnZ3/xsbG//Hx
|
|
||||||
8f//////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////iZNy/5zbAP+b2QD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/s+JA////////////////////
|
|
||||||
////////////////////////////2f///wD///8d////////////////////////////////////////
|
|
||||||
////////////////////////////////////////9fTx/46Pk/9BQUH/Li4u/y4uLv8uLi7/Li4u/y4u
|
|
||||||
Lv8uLi7/Li4u/y4uLv9ERET/fn5+/8rKyv//////////////////////////////////////////////
|
|
||||||
/////////////////////////////4iHjP98qA3/n+AA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/6ne
|
|
||||||
J/////////////////////////////////////////////////////8e////Vv//////////////////
|
|
||||||
////////////////////////////////////////////////////////+fDL/45/Qv8kJjH/Li4u/y4u
|
|
||||||
Lv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Xl5e/7e3t//+/v7/////////
|
|
||||||
//////////////////////////////////////////////////9vbXX/T2Ig/57fAP+a2QD/mtgA/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+l3Bz/////////////////////////////////////////////////////Vv//
|
|
||||||
/4T/////////////////////////////////////////////////////////////////////8+ax/+O5
|
|
||||||
D/92ZBv/JCYx/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4u
|
|
||||||
Lv8uLi7/YGBg/8jIyP/////////////////////////////////////////////////09PT/QkJE/zEz
|
|
||||||
Lf+Mwgb/nd0A/5rYAP+a2AD/mtgA/5rYAP+a2AD/pdwb////////////////////////////////////
|
|
||||||
/////////////////4T///+t////////////////////////////////////////////////////////
|
|
||||||
////////8+ez/9mwB//htQD/dWMb/yQnMf8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4u
|
|
||||||
Lv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/dHR0/97e3v//////////////////////////////
|
|
||||||
////////r6+v/y4uLv8nIzH/bZET/6HiAP+a2AD/mtgA/5rYAP+a2AD/mtgA/6neJv//////////////
|
|
||||||
//////////////////////////////////////+t////zP//////////////////////////////////
|
|
||||||
////////////////////////+PHS/9qyDv/YrgD/4rUA/3lmGf8kJjH/Li4u/y4uLv8uLi7/Li4u/y4u
|
|
||||||
Lv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Ozs7/1ZWVv90dHT/jo6O/5mZmf/Hx8f//v7+////
|
|
||||||
////////////////////////7+/v/0dHR/8uLi7/KCUw/1BkH/+f4AD/mtgA/5rYAP+a2AD/mtgA/5rY
|
|
||||||
AP+z4T7/////////////////////////////////////////////////////zP///+X/////////////
|
|
||||||
/////////////////////////////////////////v35/+C/N//YrgD/2K4A/+O2AP+Dbhf/IyYx/y4u
|
|
||||||
Lv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/1VVVf+QkJD/xsbG/+rq6v//////////////
|
|
||||||
////////////////////////////////////////+vr6/2tra/8uLi7/Li4u/yspL/86Qij/ltEC/5va
|
|
||||||
AP+a2AD/mtgA/5rYAP+a2AD/x+ly////////////////////////////////////////////////////
|
|
||||||
/+D////y//////////////////////////////////////////////////////Dfm//YrgD/2K4A/9iu
|
|
||||||
AP/itQD/k3oT/yUnMf8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/cHBw/8bGxv/8/Pz/////////
|
|
||||||
////////////////////////////////////////////////////////7+/v/3BwcP8uLi7/Li4u/y4u
|
|
||||||
Lv8tLC7/Ly8u/4e7CP+e3gD/mtgA/5rYAP+a2AD/mtgA/+X1vf//////////////////////////////
|
|
||||||
///////////////////////s//////////////////////////////////////////////////////79
|
|
||||||
+f/euyr/2K4A/9iuAP/YrgD/4LQA/6iKDf8oKTD/Li4u/y4uLv8uLi7/Li4u/y4uLv9QUFD/xMTE////
|
|
||||||
////////////////////////////////////////////////////////////////////////w8PD/1BQ
|
|
||||||
UP8uLi7/Li4u/y4uLv8uLi7/Li4u/yknMP95pA7/n+EA/5rYAP+a2AD/mtgA/6neJ//8/vj/////////
|
|
||||||
////////////////////////////////////////////+f//////////////////////////////////
|
|
||||||
///////////////////168D/2K4A/9iuAP/YrgD/2K4A/92yAP+/mwf/MTAt/ywtLv8uLi7/Li4u/y4u
|
|
||||||
Lv9wcHD/8PDw//////////////////////////////////////////////////////////////////r6
|
|
||||||
+v/ExMT/bm5u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8oJDH/a44U/6HiAP+a2AD/mtgA/5rY
|
|
||||||
AP/W75j///////////////////////////////////////////////////////////n////y////////
|
|
||||||
////////////////////////////////////////6tR3/9iuAP/YrgD/2K4A/9iuAP/arwD/06oB/0VA
|
|
||||||
J/8pKi//Li4u/y4uLv9ra2v/+vr6//////////////////////////////////////////////////39
|
|
||||||
/f/n5+f/wsLC/4yMjP9SUlL/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/JyMx/2F+
|
|
||||||
GP+h4wD/mtgA/5rYAP+v4DX//P74////////////////////////////////////////////////////
|
|
||||||
///////s////5f///////////////////////////////////////////////+LDQv/YrgD/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/+C0AP9oWh7/JCcx/y4uLv9GRkb/7u7u/////////////////////////////v7+/8fH
|
|
||||||
x/+VlZX/iYmJ/3BwcP9TU1P/OTk5/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4u
|
|
||||||
Lv8uLi7/Li4u/ygkMf9bdRv/oOEA/5rYAP+g2g7/7fjR////////////////////////////////////
|
|
||||||
////////////////////////////4P///8z/////////////////////////////////////////////
|
|
||||||
///euyj/2K4A/9iuAP/YrgD/2K4A/9iuAP/itQD/ln0S/yQnMf8uLi7/ra2t////////////////////
|
|
||||||
///////////////////i4uL/e3t7/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4u
|
|
||||||
Lv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8oJDH/WXEc/6DhAP+d2Qf/4fOy////////////////////
|
|
||||||
/////////////////////////////////////////////////8z///+t////////////////////////
|
|
||||||
////////////////////////3Lcc/9iuAP/YrgD/2K4A/9iuAP/YrgD/3LEA/8agBf82NCz/Pj9C//T0
|
|
||||||
9P/////////////////////////////////////////////////Ozs7/ZmZm/y4uLv8uLi7/Li4u/y4u
|
|
||||||
Lv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/KCQx/1pzHP+m4w//4POx////
|
|
||||||
//////////////////////////////////////////////////////////////////////+t////hP//
|
|
||||||
/////////////////////////////////////////////9y3Hf/YrgD/2K4A/9iuAP/YrgD/2K4A/9iu
|
|
||||||
AP/gtAD/Z1ke/2lrcv//////////////////////////////////////////////////////////////
|
|
||||||
//++vr7/ZGRk/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/ygk
|
|
||||||
Mf93i0X/7PnL////////////////////////////////////////////////////////////////////
|
|
||||||
////////////hP///1T////////////////////////////////////////////////euyr/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/9iuAP/YrgD/4LQA/66OC/+Dg4b/////////////////////////////////////////
|
|
||||||
///////////////////////////////////Pz8//hISE/0hISP8uLi7/Li4u/y4uLv8uLi7/Li4u/y4u
|
|
||||||
Lv8uLi7/Li4u/0JCQv+RkJX/9PXy////////////////////////////////////////////////////
|
|
||||||
/////////////////////////////////1b///8c////////////////////////////////////////
|
|
||||||
////////48RG/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9mvAP/dsgD/kopq////////////////////
|
|
||||||
///////////////////////////////////////////////////////////////////09PT/y8vL/6Ki
|
|
||||||
ov+Dg4P/cXFx/21tbf94eHj/kJCQ/7q6uv/v7+//////////////////////////////////////////
|
|
||||||
//////////////////////////////////////////////////////8d////AP///9f/////////////
|
|
||||||
/////////////////////////////+rTdP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/4LQA/72f
|
|
||||||
Iv/09PT/////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
///////////////////////////////////////////////////////////////////////Y////AP//
|
|
||||||
/wD///+P///////////////////////////////////////////06Lb/2K4A/9iuAP/YrgD/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/9iuAP/esgD/zsKO////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////kP///wD///8A////Ov///////////////////////////////////////////fvx/9y2
|
|
||||||
Gv/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/+G3Cf/578j/////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/////////////////////////////////zr///8A////AP///wH////a////////////////////////
|
|
||||||
///////////////////p0nD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/3bgh//r0
|
|
||||||
3P//////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/////////////////////////////////////////////////9v///8B////AP///wD///8A////dP//
|
|
||||||
////////////////////////////////////////+fPZ/9mxCP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/9iuAP/duCH/9+7I////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
//////////////////////////////////////////////////////////////////////90////AP//
|
|
||||||
/wD///8A////AP///wz////t///////////////////////////////////////////oz2n/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9qyDf/x4qT/////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
///////t////Df///wD///8A////AP///wD///8A////f///////////////////////////////////
|
|
||||||
////////+/fm/9u1Fv/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/+nQ
|
|
||||||
bP/8+u7/////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////f////wD///8A////AP///wD///8A////AP///xD////q////////
|
|
||||||
///////////////////////////////////x4qX/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/9iuAP/YrgD/3ron//Hipf///v3/////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////6v///xD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////YP///////////////////////////////////////////////+jPaf/YrgD/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/4cA5//HipP/9+/H/////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/////////////////////////////////////////////////////////////////2H///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wH////D////////////////////////////////////////
|
|
||||||
///+/fj/4sRE/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iu
|
|
||||||
AP/YrgD/3bgf/+fNY//x4qX/+PHT//367//+/vv////+////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/8P///8B////AP///wD///8A////AP///wD///8A////AP///wD///8A////Iv////D/////////////
|
|
||||||
//////////////////////////////z57f/gvzX/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9ivA//cthj/37wr//fuyv//////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
//////////////////D///8i////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///9U////////////////////////////////////////////////+/jo/+C/Nf/YrgD/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iu
|
|
||||||
AP/48NH/////////////////////////////////////////////////////////////////////////
|
|
||||||
//////////////////////////////////////9V////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///4j/////////////////////////////////////////////
|
|
||||||
///8+ev/4sND/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/9iuAP/btBP//Pns////////////////////////////////////////////////////
|
|
||||||
//////////////////////////////////////////////////////+J////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8B////pP//////////////////
|
|
||||||
//////////////////////////////789v/nzGD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/37wt///+/P//////////////////////////////
|
|
||||||
//////////////////////////////////////////////////////////////////////+k////Af//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wb///+3/////////////////////////////////////////////////////+7bj//asQr/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/+PGSv//////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
//////+3////Bv///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////Bv///6X/////////////////////////////////////////////
|
|
||||||
////////9+7K/+HBO//YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iu
|
|
||||||
AP/oz2n/////////////////////////////////////////////////////////////////////////
|
|
||||||
//////////////////////+l////Bv///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8B////jP//////////////////
|
|
||||||
///////////////////////////////////+/fr/7t2T/924Hv/YrgD/2K4A/9iuAP/YrgD/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/9iuAP/YrgD/7dqL////////////////////////////////////////////////////
|
|
||||||
//////////////////////////////////////+M////Af///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A2K4AANiu
|
|
||||||
AAD///9V////8f/////////////////////////////////////////////////////8+ev/7dmH/966
|
|
||||||
Jv/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A//Plrv//////////////////////////////
|
|
||||||
//////////////////////////////////////////////////H///9VmtgAAJrYAAD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////ANiuAADYrgAA2K4AAP///yT////E////////////////////////////////////////
|
|
||||||
///////////////////9/PT/8+av/+bLWv/duB7/2K4A/9iuAP/YrgD/2K4A/9iuAP/37sv/////////
|
|
||||||
/////////////////////////////////////////////////////////////////8T///8jmtgAAJrY
|
|
||||||
AACa2AAA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wDYrgAA2K4AANiuAADYrgAA////Af///2D////r////////
|
|
||||||
/////////////////////////////////////////////////////////fvx//btxv/v3pf/6dJw/+TH
|
|
||||||
T//jxEX/+/jo////////////////////////////////////////////////////////////////6///
|
|
||||||
/2D///8BmtgAAJrYAACa2AAAmtgAAP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////EP///3/////t////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
///////t////f////xD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////Df///3T////V////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/////////////////9X///90////Df///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/zP///+N////1///////////////////////////////////////////////////////////////////
|
|
||||||
///////////////////////X////jf///zP///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8b////VP///33///+l////y////+P////y////////
|
|
||||||
///////y////4////8v///+l////ff///1T///8b////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////4Af///////wAAD//////8AAAD/////+AAAAB/////wAAAAD////8AAAAAD////gAAAAA
|
|
||||||
H///4AAAAAAH///AAAAAAAP//4AAAAAAAf//AAAAAAAA//4AAAAAAAB//gAAAAAAAH/8AAAAAAAAP/gA
|
|
||||||
AAAAAAAf+AAAAAAAAB/wAAAAAAAAD/AAAAAAAAAH4AAAAAAAAAfgAAAAAAAAB8AAAAAAAAADwAAAAAAA
|
|
||||||
AAOAAAAAAAAAAYAAAAAAAAABgAAAAAAAAAGAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
||||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
||||||
AAAAAAAAAAAAAIAAAAAAAAABgAAAAAAAAAGAAAAAAAAAAYAAAAAAAAABwAAAAAAAAAPAAAAAAAAAA+AA
|
|
||||||
AAAAAAAH4AAAAAAAAAfwAAAAAAAAD/AAAAAAAAAP+AAAAAAAAB/4AAAAAAAAH/wAAAAAAAA//gAAAAAA
|
|
||||||
AH/+AAAAAAAAf/8AAAAAAAD//4AAAAAAAf//wAAAAAAD///gAAAAAAf///gAAAAAH////AAAAAA/////
|
|
||||||
AAAAAP/////AAAAD//////AAAA///////AAAP///////4Af///8=
|
|
||||||
</value>
|
|
||||||
</data>
|
|
||||||
</root>
|
|
|
@ -1,80 +0,0 @@
|
||||||
namespace DML.Application
|
|
||||||
{
|
|
||||||
partial class FrmInternalSplash
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Required designer variable.
|
|
||||||
/// </summary>
|
|
||||||
private System.ComponentModel.IContainer components = null;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Clean up any resources being used.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
|
||||||
protected override void Dispose(bool disposing)
|
|
||||||
{
|
|
||||||
if (disposing && (components != null))
|
|
||||||
{
|
|
||||||
components.Dispose();
|
|
||||||
}
|
|
||||||
base.Dispose(disposing);
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Windows Form Designer generated code
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Required method for Designer support - do not modify
|
|
||||||
/// the contents of this method with the code editor.
|
|
||||||
/// </summary>
|
|
||||||
private void InitializeComponent()
|
|
||||||
{
|
|
||||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmInternalSplash));
|
|
||||||
this.lblName = new System.Windows.Forms.Label();
|
|
||||||
this.pbLogo = new System.Windows.Forms.PictureBox();
|
|
||||||
((System.ComponentModel.ISupportInitialize)(this.pbLogo)).BeginInit();
|
|
||||||
this.SuspendLayout();
|
|
||||||
//
|
|
||||||
// lblName
|
|
||||||
//
|
|
||||||
this.lblName.Font = new System.Drawing.Font("Microsoft Sans Serif", 21.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
|
||||||
this.lblName.Location = new System.Drawing.Point(11, 129);
|
|
||||||
this.lblName.Name = "lblName";
|
|
||||||
this.lblName.Size = new System.Drawing.Size(379, 35);
|
|
||||||
this.lblName.TabIndex = 3;
|
|
||||||
this.lblName.Text = "Discord Media Loader";
|
|
||||||
this.lblName.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
|
||||||
//
|
|
||||||
// pbLogo
|
|
||||||
//
|
|
||||||
this.pbLogo.Image = global::DML.Application.Properties.Resources.Serraniel_Logo4_NO_BG;
|
|
||||||
this.pbLogo.Location = new System.Drawing.Point(14, 10);
|
|
||||||
this.pbLogo.Name = "pbLogo";
|
|
||||||
this.pbLogo.Size = new System.Drawing.Size(376, 116);
|
|
||||||
this.pbLogo.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
|
|
||||||
this.pbLogo.TabIndex = 2;
|
|
||||||
this.pbLogo.TabStop = false;
|
|
||||||
//
|
|
||||||
// FrmInternalSplash
|
|
||||||
//
|
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
|
||||||
this.BackColor = System.Drawing.Color.White;
|
|
||||||
this.ClientSize = new System.Drawing.Size(400, 175);
|
|
||||||
this.Controls.Add(this.lblName);
|
|
||||||
this.Controls.Add(this.pbLogo);
|
|
||||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
|
|
||||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
|
||||||
this.Name = "FrmInternalSplash";
|
|
||||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
|
||||||
this.Text = "Discord Media Loader";
|
|
||||||
((System.ComponentModel.ISupportInitialize)(this.pbLogo)).EndInit();
|
|
||||||
this.ResumeLayout(false);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
private System.Windows.Forms.Label lblName;
|
|
||||||
private System.Windows.Forms.PictureBox pbLogo;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,12 +0,0 @@
|
||||||
using System.Windows.Forms;
|
|
||||||
|
|
||||||
namespace DML.Application
|
|
||||||
{
|
|
||||||
public partial class FrmInternalSplash : Form
|
|
||||||
{
|
|
||||||
public FrmInternalSplash()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,19 +0,0 @@
|
||||||
namespace DML.Application.Helper
|
|
||||||
{
|
|
||||||
internal class IdentifiedString<T>
|
|
||||||
{
|
|
||||||
internal IdentifiedString(T id, string caption)
|
|
||||||
{
|
|
||||||
Id = id;
|
|
||||||
Caption = caption;
|
|
||||||
}
|
|
||||||
|
|
||||||
internal T Id { get; set; }
|
|
||||||
internal string Caption { get; set; }
|
|
||||||
|
|
||||||
public override string ToString()
|
|
||||||
{
|
|
||||||
return Caption;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
484
Discord Media Loader.Application/MainForm.Designer.cs
generated
484
Discord Media Loader.Application/MainForm.Designer.cs
generated
|
@ -1,484 +0,0 @@
|
||||||
namespace DML.Application
|
|
||||||
{
|
|
||||||
partial class MainForm
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Required designer variable.
|
|
||||||
/// </summary>
|
|
||||||
private System.ComponentModel.IContainer components = null;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Clean up any resources being used.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
|
||||||
protected override void Dispose(bool disposing)
|
|
||||||
{
|
|
||||||
if (disposing && (components != null))
|
|
||||||
{
|
|
||||||
components.Dispose();
|
|
||||||
}
|
|
||||||
base.Dispose(disposing);
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Windows Form Designer generated code
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Required method for Designer support - do not modify
|
|
||||||
/// the contents of this method with the code editor.
|
|
||||||
/// </summary>
|
|
||||||
private void InitializeComponent()
|
|
||||||
{
|
|
||||||
this.components = new System.ComponentModel.Container();
|
|
||||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
|
|
||||||
this.pnlSettings = new System.Windows.Forms.GroupBox();
|
|
||||||
this.btnFileNameHelp = new System.Windows.Forms.Button();
|
|
||||||
this.lbThreadLimit = new System.Windows.Forms.Label();
|
|
||||||
this.edThreadLimit = new System.Windows.Forms.NumericUpDown();
|
|
||||||
this.cbSkipExisting = new System.Windows.Forms.CheckBox();
|
|
||||||
this.edNameScheme = new System.Windows.Forms.TextBox();
|
|
||||||
this.lbNameScheme = new System.Windows.Forms.Label();
|
|
||||||
this.btnSearchFolders = new System.Windows.Forms.Button();
|
|
||||||
this.edOperatingFolder = new System.Windows.Forms.TextBox();
|
|
||||||
this.lbOperatingFolder = new System.Windows.Forms.Label();
|
|
||||||
this.groupBox1 = new System.Windows.Forms.GroupBox();
|
|
||||||
this.btnAddJob = new System.Windows.Forms.Button();
|
|
||||||
this.cbChannel = new System.Windows.Forms.ComboBox();
|
|
||||||
this.lbChannel = new System.Windows.Forms.Label();
|
|
||||||
this.cbGuild = new System.Windows.Forms.ComboBox();
|
|
||||||
this.lbGuild = new System.Windows.Forms.Label();
|
|
||||||
this.statusStrip = new System.Windows.Forms.StatusStrip();
|
|
||||||
this.lbStatus = new System.Windows.Forms.ToolStripDropDownButton();
|
|
||||||
this.invisibleToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.doNotDisturbToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.doNotDenyToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.onlineToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.pgbProgress = new System.Windows.Forms.ToolStripProgressBar();
|
|
||||||
this.lbProgress = new System.Windows.Forms.ToolStripStatusLabel();
|
|
||||||
this.lblVersionPlaceholder = new System.Windows.Forms.ToolStripStatusLabel();
|
|
||||||
this.lbVersion = new System.Windows.Forms.ToolStripStatusLabel();
|
|
||||||
this.btnDropDown = new System.Windows.Forms.ToolStripSplitButton();
|
|
||||||
this.showTokenToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
|
|
||||||
this.visitGithubToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.aboutToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.groupBox2 = new System.Windows.Forms.GroupBox();
|
|
||||||
this.btnDelete = new System.Windows.Forms.Button();
|
|
||||||
this.lbxJobs = new System.Windows.Forms.ListBox();
|
|
||||||
this.tmrRefreshProgress = new System.Windows.Forms.Timer(this.components);
|
|
||||||
this.tmrTriggerRefresh = new System.Windows.Forms.Timer(this.components);
|
|
||||||
this.pnlSettings.SuspendLayout();
|
|
||||||
((System.ComponentModel.ISupportInitialize)(this.edThreadLimit)).BeginInit();
|
|
||||||
this.groupBox1.SuspendLayout();
|
|
||||||
this.statusStrip.SuspendLayout();
|
|
||||||
this.groupBox2.SuspendLayout();
|
|
||||||
this.SuspendLayout();
|
|
||||||
//
|
|
||||||
// pnlSettings
|
|
||||||
//
|
|
||||||
this.pnlSettings.Controls.Add(this.btnFileNameHelp);
|
|
||||||
this.pnlSettings.Controls.Add(this.lbThreadLimit);
|
|
||||||
this.pnlSettings.Controls.Add(this.edThreadLimit);
|
|
||||||
this.pnlSettings.Controls.Add(this.cbSkipExisting);
|
|
||||||
this.pnlSettings.Controls.Add(this.edNameScheme);
|
|
||||||
this.pnlSettings.Controls.Add(this.lbNameScheme);
|
|
||||||
this.pnlSettings.Controls.Add(this.btnSearchFolders);
|
|
||||||
this.pnlSettings.Controls.Add(this.edOperatingFolder);
|
|
||||||
this.pnlSettings.Controls.Add(this.lbOperatingFolder);
|
|
||||||
this.pnlSettings.Dock = System.Windows.Forms.DockStyle.Top;
|
|
||||||
this.pnlSettings.Location = new System.Drawing.Point(0, 0);
|
|
||||||
this.pnlSettings.Name = "pnlSettings";
|
|
||||||
this.pnlSettings.Size = new System.Drawing.Size(690, 93);
|
|
||||||
this.pnlSettings.TabIndex = 0;
|
|
||||||
this.pnlSettings.TabStop = false;
|
|
||||||
this.pnlSettings.Text = "Settings";
|
|
||||||
//
|
|
||||||
// btnFileNameHelp
|
|
||||||
//
|
|
||||||
this.btnFileNameHelp.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
|
||||||
this.btnFileNameHelp.Image = global::DML.Application.Properties.Resources.info_icon;
|
|
||||||
this.btnFileNameHelp.Location = new System.Drawing.Point(554, 37);
|
|
||||||
this.btnFileNameHelp.Name = "btnFileNameHelp";
|
|
||||||
this.btnFileNameHelp.Size = new System.Drawing.Size(25, 23);
|
|
||||||
this.btnFileNameHelp.TabIndex = 8;
|
|
||||||
this.btnFileNameHelp.UseVisualStyleBackColor = true;
|
|
||||||
this.btnFileNameHelp.Click += new System.EventHandler(this.btnFileNameHelp_Click);
|
|
||||||
//
|
|
||||||
// lbThreadLimit
|
|
||||||
//
|
|
||||||
this.lbThreadLimit.AutoSize = true;
|
|
||||||
this.lbThreadLimit.Location = new System.Drawing.Point(12, 67);
|
|
||||||
this.lbThreadLimit.Name = "lbThreadLimit";
|
|
||||||
this.lbThreadLimit.Size = new System.Drawing.Size(64, 13);
|
|
||||||
this.lbThreadLimit.TabIndex = 6;
|
|
||||||
this.lbThreadLimit.Text = "Thread limit:";
|
|
||||||
//
|
|
||||||
// edThreadLimit
|
|
||||||
//
|
|
||||||
this.edThreadLimit.Location = new System.Drawing.Point(113, 65);
|
|
||||||
this.edThreadLimit.Minimum = new decimal(new int[] {
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0});
|
|
||||||
this.edThreadLimit.Name = "edThreadLimit";
|
|
||||||
this.edThreadLimit.Size = new System.Drawing.Size(120, 20);
|
|
||||||
this.edThreadLimit.TabIndex = 7;
|
|
||||||
this.edThreadLimit.Value = new decimal(new int[] {
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0});
|
|
||||||
this.edThreadLimit.ValueChanged += new System.EventHandler(this.DoSomethingChanged);
|
|
||||||
//
|
|
||||||
// cbSkipExisting
|
|
||||||
//
|
|
||||||
this.cbSkipExisting.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
|
||||||
this.cbSkipExisting.AutoSize = true;
|
|
||||||
this.cbSkipExisting.Location = new System.Drawing.Point(584, 42);
|
|
||||||
this.cbSkipExisting.Name = "cbSkipExisting";
|
|
||||||
this.cbSkipExisting.Size = new System.Drawing.Size(106, 17);
|
|
||||||
this.cbSkipExisting.TabIndex = 5;
|
|
||||||
this.cbSkipExisting.Text = "Skip existing files";
|
|
||||||
this.cbSkipExisting.UseVisualStyleBackColor = true;
|
|
||||||
this.cbSkipExisting.TextChanged += new System.EventHandler(this.DoSomethingChanged);
|
|
||||||
//
|
|
||||||
// edNameScheme
|
|
||||||
//
|
|
||||||
this.edNameScheme.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
|
||||||
| System.Windows.Forms.AnchorStyles.Right)));
|
|
||||||
this.edNameScheme.Location = new System.Drawing.Point(113, 39);
|
|
||||||
this.edNameScheme.Name = "edNameScheme";
|
|
||||||
this.edNameScheme.Size = new System.Drawing.Size(435, 20);
|
|
||||||
this.edNameScheme.TabIndex = 4;
|
|
||||||
this.edNameScheme.TextChanged += new System.EventHandler(this.DoSomethingChanged);
|
|
||||||
//
|
|
||||||
// lbNameScheme
|
|
||||||
//
|
|
||||||
this.lbNameScheme.AutoSize = true;
|
|
||||||
this.lbNameScheme.Location = new System.Drawing.Point(12, 42);
|
|
||||||
this.lbNameScheme.Name = "lbNameScheme";
|
|
||||||
this.lbNameScheme.Size = new System.Drawing.Size(95, 13);
|
|
||||||
this.lbNameScheme.TabIndex = 3;
|
|
||||||
this.lbNameScheme.Text = "File name scheme:";
|
|
||||||
//
|
|
||||||
// btnSearchFolders
|
|
||||||
//
|
|
||||||
this.btnSearchFolders.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
|
||||||
this.btnSearchFolders.Location = new System.Drawing.Point(659, 11);
|
|
||||||
this.btnSearchFolders.Name = "btnSearchFolders";
|
|
||||||
this.btnSearchFolders.Size = new System.Drawing.Size(25, 23);
|
|
||||||
this.btnSearchFolders.TabIndex = 2;
|
|
||||||
this.btnSearchFolders.Text = "...";
|
|
||||||
this.btnSearchFolders.UseVisualStyleBackColor = true;
|
|
||||||
this.btnSearchFolders.Click += new System.EventHandler(this.btnSearchFolders_Click);
|
|
||||||
//
|
|
||||||
// edOperatingFolder
|
|
||||||
//
|
|
||||||
this.edOperatingFolder.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
|
||||||
| System.Windows.Forms.AnchorStyles.Right)));
|
|
||||||
this.edOperatingFolder.Location = new System.Drawing.Point(113, 13);
|
|
||||||
this.edOperatingFolder.Name = "edOperatingFolder";
|
|
||||||
this.edOperatingFolder.Size = new System.Drawing.Size(540, 20);
|
|
||||||
this.edOperatingFolder.TabIndex = 1;
|
|
||||||
this.edOperatingFolder.TextChanged += new System.EventHandler(this.DoSomethingChanged);
|
|
||||||
//
|
|
||||||
// lbOperatingFolder
|
|
||||||
//
|
|
||||||
this.lbOperatingFolder.AutoSize = true;
|
|
||||||
this.lbOperatingFolder.Location = new System.Drawing.Point(12, 16);
|
|
||||||
this.lbOperatingFolder.Name = "lbOperatingFolder";
|
|
||||||
this.lbOperatingFolder.Size = new System.Drawing.Size(85, 13);
|
|
||||||
this.lbOperatingFolder.TabIndex = 0;
|
|
||||||
this.lbOperatingFolder.Text = "Operating folder:";
|
|
||||||
//
|
|
||||||
// groupBox1
|
|
||||||
//
|
|
||||||
this.groupBox1.Controls.Add(this.btnAddJob);
|
|
||||||
this.groupBox1.Controls.Add(this.cbChannel);
|
|
||||||
this.groupBox1.Controls.Add(this.lbChannel);
|
|
||||||
this.groupBox1.Controls.Add(this.cbGuild);
|
|
||||||
this.groupBox1.Controls.Add(this.lbGuild);
|
|
||||||
this.groupBox1.Dock = System.Windows.Forms.DockStyle.Top;
|
|
||||||
this.groupBox1.Location = new System.Drawing.Point(0, 93);
|
|
||||||
this.groupBox1.Name = "groupBox1";
|
|
||||||
this.groupBox1.Size = new System.Drawing.Size(690, 57);
|
|
||||||
this.groupBox1.TabIndex = 1;
|
|
||||||
this.groupBox1.TabStop = false;
|
|
||||||
this.groupBox1.Text = "Add a job";
|
|
||||||
//
|
|
||||||
// btnAddJob
|
|
||||||
//
|
|
||||||
this.btnAddJob.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
|
|
||||||
this.btnAddJob.Location = new System.Drawing.Point(618, 19);
|
|
||||||
this.btnAddJob.Name = "btnAddJob";
|
|
||||||
this.btnAddJob.Size = new System.Drawing.Size(66, 23);
|
|
||||||
this.btnAddJob.TabIndex = 4;
|
|
||||||
this.btnAddJob.Text = "&Add";
|
|
||||||
this.btnAddJob.UseVisualStyleBackColor = true;
|
|
||||||
this.btnAddJob.Click += new System.EventHandler(this.btnAddJob_Click);
|
|
||||||
//
|
|
||||||
// cbChannel
|
|
||||||
//
|
|
||||||
this.cbChannel.Anchor = ((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Left)
|
|
||||||
| System.Windows.Forms.AnchorStyles.Right)));
|
|
||||||
this.cbChannel.FormattingEnabled = true;
|
|
||||||
this.cbChannel.Location = new System.Drawing.Point(294, 19);
|
|
||||||
this.cbChannel.Name = "cbChannel";
|
|
||||||
this.cbChannel.Size = new System.Drawing.Size(318, 21);
|
|
||||||
this.cbChannel.TabIndex = 3;
|
|
||||||
//
|
|
||||||
// lbChannel
|
|
||||||
//
|
|
||||||
this.lbChannel.AutoSize = true;
|
|
||||||
this.lbChannel.Location = new System.Drawing.Point(239, 22);
|
|
||||||
this.lbChannel.Name = "lbChannel";
|
|
||||||
this.lbChannel.Size = new System.Drawing.Size(49, 13);
|
|
||||||
this.lbChannel.TabIndex = 2;
|
|
||||||
this.lbChannel.Text = "Channel:";
|
|
||||||
//
|
|
||||||
// cbGuild
|
|
||||||
//
|
|
||||||
this.cbGuild.FormattingEnabled = true;
|
|
||||||
this.cbGuild.Location = new System.Drawing.Point(52, 19);
|
|
||||||
this.cbGuild.Name = "cbGuild";
|
|
||||||
this.cbGuild.Size = new System.Drawing.Size(181, 21);
|
|
||||||
this.cbGuild.TabIndex = 1;
|
|
||||||
this.cbGuild.SelectedIndexChanged += new System.EventHandler(this.cbGuild_SelectedIndexChanged);
|
|
||||||
//
|
|
||||||
// lbGuild
|
|
||||||
//
|
|
||||||
this.lbGuild.AutoSize = true;
|
|
||||||
this.lbGuild.Location = new System.Drawing.Point(12, 22);
|
|
||||||
this.lbGuild.Name = "lbGuild";
|
|
||||||
this.lbGuild.Size = new System.Drawing.Size(34, 13);
|
|
||||||
this.lbGuild.TabIndex = 0;
|
|
||||||
this.lbGuild.Text = "Guild:";
|
|
||||||
//
|
|
||||||
// statusStrip
|
|
||||||
//
|
|
||||||
this.statusStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
|
||||||
this.lbStatus,
|
|
||||||
this.pgbProgress,
|
|
||||||
this.lbProgress,
|
|
||||||
this.lblVersionPlaceholder,
|
|
||||||
this.lbVersion,
|
|
||||||
this.btnDropDown});
|
|
||||||
this.statusStrip.Location = new System.Drawing.Point(0, 393);
|
|
||||||
this.statusStrip.Name = "statusStrip";
|
|
||||||
this.statusStrip.Size = new System.Drawing.Size(690, 22);
|
|
||||||
this.statusStrip.TabIndex = 2;
|
|
||||||
this.statusStrip.Text = "statusStrip1";
|
|
||||||
//
|
|
||||||
// lbStatus
|
|
||||||
//
|
|
||||||
this.lbStatus.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
|
||||||
this.invisibleToolStripMenuItem,
|
|
||||||
this.doNotDisturbToolStripMenuItem,
|
|
||||||
this.doNotDenyToolStripMenuItem,
|
|
||||||
this.onlineToolStripMenuItem});
|
|
||||||
this.lbStatus.Name = "lbStatus";
|
|
||||||
this.lbStatus.Size = new System.Drawing.Size(13, 20);
|
|
||||||
this.lbStatus.DropDownItemClicked += new System.Windows.Forms.ToolStripItemClickedEventHandler(this.toolStripDropDownButton1_DropDownItemClicked);
|
|
||||||
//
|
|
||||||
// invisibleToolStripMenuItem
|
|
||||||
//
|
|
||||||
this.invisibleToolStripMenuItem.Name = "invisibleToolStripMenuItem";
|
|
||||||
this.invisibleToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
|
|
||||||
this.invisibleToolStripMenuItem.Tag = "3";
|
|
||||||
this.invisibleToolStripMenuItem.Text = "Invisible";
|
|
||||||
//
|
|
||||||
// doNotDisturbToolStripMenuItem
|
|
||||||
//
|
|
||||||
this.doNotDisturbToolStripMenuItem.Name = "doNotDisturbToolStripMenuItem";
|
|
||||||
this.doNotDisturbToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
|
|
||||||
this.doNotDisturbToolStripMenuItem.Tag = "2";
|
|
||||||
this.doNotDisturbToolStripMenuItem.Text = "Do not disturb";
|
|
||||||
//
|
|
||||||
// doNotDenyToolStripMenuItem
|
|
||||||
//
|
|
||||||
this.doNotDenyToolStripMenuItem.Name = "doNotDenyToolStripMenuItem";
|
|
||||||
this.doNotDenyToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
|
|
||||||
this.doNotDenyToolStripMenuItem.Tag = "1";
|
|
||||||
this.doNotDenyToolStripMenuItem.Text = "Idle";
|
|
||||||
//
|
|
||||||
// onlineToolStripMenuItem
|
|
||||||
//
|
|
||||||
this.onlineToolStripMenuItem.Name = "onlineToolStripMenuItem";
|
|
||||||
this.onlineToolStripMenuItem.Size = new System.Drawing.Size(150, 22);
|
|
||||||
this.onlineToolStripMenuItem.Tag = "0";
|
|
||||||
this.onlineToolStripMenuItem.Text = "Online";
|
|
||||||
//
|
|
||||||
// pgbProgress
|
|
||||||
//
|
|
||||||
this.pgbProgress.Name = "pgbProgress";
|
|
||||||
this.pgbProgress.Size = new System.Drawing.Size(100, 16);
|
|
||||||
//
|
|
||||||
// lbProgress
|
|
||||||
//
|
|
||||||
this.lbProgress.Name = "lbProgress";
|
|
||||||
this.lbProgress.Size = new System.Drawing.Size(0, 17);
|
|
||||||
//
|
|
||||||
// lblVersionPlaceholder
|
|
||||||
//
|
|
||||||
this.lblVersionPlaceholder.Name = "lblVersionPlaceholder";
|
|
||||||
this.lblVersionPlaceholder.Size = new System.Drawing.Size(490, 17);
|
|
||||||
this.lblVersionPlaceholder.Spring = true;
|
|
||||||
//
|
|
||||||
// lbVersion
|
|
||||||
//
|
|
||||||
this.lbVersion.Name = "lbVersion";
|
|
||||||
this.lbVersion.Size = new System.Drawing.Size(54, 17);
|
|
||||||
this.lbVersion.Text = "VERSION";
|
|
||||||
//
|
|
||||||
// btnDropDown
|
|
||||||
//
|
|
||||||
this.btnDropDown.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
|
|
||||||
this.btnDropDown.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
|
||||||
this.showTokenToolStripMenuItem,
|
|
||||||
this.toolStripSeparator2,
|
|
||||||
this.visitGithubToolStripMenuItem,
|
|
||||||
this.aboutToolStripMenuItem});
|
|
||||||
this.btnDropDown.ImageTransparentColor = System.Drawing.Color.Magenta;
|
|
||||||
this.btnDropDown.Name = "btnDropDown";
|
|
||||||
this.btnDropDown.Size = new System.Drawing.Size(16, 20);
|
|
||||||
this.btnDropDown.Text = "Options";
|
|
||||||
//
|
|
||||||
// showTokenToolStripMenuItem
|
|
||||||
//
|
|
||||||
this.showTokenToolStripMenuItem.Name = "showTokenToolStripMenuItem";
|
|
||||||
this.showTokenToolStripMenuItem.Size = new System.Drawing.Size(165, 22);
|
|
||||||
this.showTokenToolStripMenuItem.Text = "Copy login token";
|
|
||||||
this.showTokenToolStripMenuItem.Click += new System.EventHandler(this.showTokenToolStripMenuItem_Click);
|
|
||||||
//
|
|
||||||
// toolStripSeparator2
|
|
||||||
//
|
|
||||||
this.toolStripSeparator2.Name = "toolStripSeparator2";
|
|
||||||
this.toolStripSeparator2.Size = new System.Drawing.Size(162, 6);
|
|
||||||
//
|
|
||||||
// visitGithubToolStripMenuItem
|
|
||||||
//
|
|
||||||
this.visitGithubToolStripMenuItem.Name = "visitGithubToolStripMenuItem";
|
|
||||||
this.visitGithubToolStripMenuItem.Size = new System.Drawing.Size(165, 22);
|
|
||||||
this.visitGithubToolStripMenuItem.Text = "Visit Github";
|
|
||||||
this.visitGithubToolStripMenuItem.Click += new System.EventHandler(this.visitGithubToolStripMenuItem_Click);
|
|
||||||
//
|
|
||||||
// aboutToolStripMenuItem
|
|
||||||
//
|
|
||||||
this.aboutToolStripMenuItem.Name = "aboutToolStripMenuItem";
|
|
||||||
this.aboutToolStripMenuItem.Size = new System.Drawing.Size(165, 22);
|
|
||||||
this.aboutToolStripMenuItem.Text = "About";
|
|
||||||
this.aboutToolStripMenuItem.Click += new System.EventHandler(this.aboutToolStripMenuItem_Click);
|
|
||||||
//
|
|
||||||
// groupBox2
|
|
||||||
//
|
|
||||||
this.groupBox2.Controls.Add(this.btnDelete);
|
|
||||||
this.groupBox2.Controls.Add(this.lbxJobs);
|
|
||||||
this.groupBox2.Dock = System.Windows.Forms.DockStyle.Fill;
|
|
||||||
this.groupBox2.Location = new System.Drawing.Point(0, 150);
|
|
||||||
this.groupBox2.Name = "groupBox2";
|
|
||||||
this.groupBox2.Size = new System.Drawing.Size(690, 243);
|
|
||||||
this.groupBox2.TabIndex = 3;
|
|
||||||
this.groupBox2.TabStop = false;
|
|
||||||
this.groupBox2.Text = "Jobs";
|
|
||||||
//
|
|
||||||
// btnDelete
|
|
||||||
//
|
|
||||||
this.btnDelete.Dock = System.Windows.Forms.DockStyle.Bottom;
|
|
||||||
this.btnDelete.Location = new System.Drawing.Point(3, 217);
|
|
||||||
this.btnDelete.Name = "btnDelete";
|
|
||||||
this.btnDelete.Size = new System.Drawing.Size(684, 23);
|
|
||||||
this.btnDelete.TabIndex = 1;
|
|
||||||
this.btnDelete.Text = "Delete selected";
|
|
||||||
this.btnDelete.UseVisualStyleBackColor = true;
|
|
||||||
this.btnDelete.Click += new System.EventHandler(this.btnDelete_Click);
|
|
||||||
//
|
|
||||||
// lbxJobs
|
|
||||||
//
|
|
||||||
this.lbxJobs.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
|
|
||||||
| System.Windows.Forms.AnchorStyles.Left)
|
|
||||||
| System.Windows.Forms.AnchorStyles.Right)));
|
|
||||||
this.lbxJobs.FormattingEnabled = true;
|
|
||||||
this.lbxJobs.Location = new System.Drawing.Point(6, 19);
|
|
||||||
this.lbxJobs.Name = "lbxJobs";
|
|
||||||
this.lbxJobs.Size = new System.Drawing.Size(678, 186);
|
|
||||||
this.lbxJobs.TabIndex = 0;
|
|
||||||
//
|
|
||||||
// tmrRefreshProgress
|
|
||||||
//
|
|
||||||
this.tmrRefreshProgress.Enabled = true;
|
|
||||||
this.tmrRefreshProgress.Interval = 500;
|
|
||||||
this.tmrRefreshProgress.Tick += new System.EventHandler(this.tmrRefreshProgress_Tick);
|
|
||||||
//
|
|
||||||
// tmrTriggerRefresh
|
|
||||||
//
|
|
||||||
this.tmrTriggerRefresh.Interval = 5000;
|
|
||||||
this.tmrTriggerRefresh.Tick += new System.EventHandler(this.tmrTriggerRefresh_Tick);
|
|
||||||
//
|
|
||||||
// MainForm
|
|
||||||
//
|
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
|
||||||
this.ClientSize = new System.Drawing.Size(690, 415);
|
|
||||||
this.Controls.Add(this.groupBox2);
|
|
||||||
this.Controls.Add(this.statusStrip);
|
|
||||||
this.Controls.Add(this.groupBox1);
|
|
||||||
this.Controls.Add(this.pnlSettings);
|
|
||||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
|
||||||
this.MinimumSize = new System.Drawing.Size(100, 75);
|
|
||||||
this.Name = "MainForm";
|
|
||||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
|
||||||
this.Text = "Discord Medial Loader";
|
|
||||||
this.Shown += new System.EventHandler(this.MainForm_Shown);
|
|
||||||
this.pnlSettings.ResumeLayout(false);
|
|
||||||
this.pnlSettings.PerformLayout();
|
|
||||||
((System.ComponentModel.ISupportInitialize)(this.edThreadLimit)).EndInit();
|
|
||||||
this.groupBox1.ResumeLayout(false);
|
|
||||||
this.groupBox1.PerformLayout();
|
|
||||||
this.statusStrip.ResumeLayout(false);
|
|
||||||
this.statusStrip.PerformLayout();
|
|
||||||
this.groupBox2.ResumeLayout(false);
|
|
||||||
this.ResumeLayout(false);
|
|
||||||
this.PerformLayout();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
private System.Windows.Forms.GroupBox pnlSettings;
|
|
||||||
private System.Windows.Forms.GroupBox groupBox1;
|
|
||||||
private System.Windows.Forms.StatusStrip statusStrip;
|
|
||||||
private System.Windows.Forms.GroupBox groupBox2;
|
|
||||||
private System.Windows.Forms.Label lbThreadLimit;
|
|
||||||
private System.Windows.Forms.NumericUpDown edThreadLimit;
|
|
||||||
private System.Windows.Forms.CheckBox cbSkipExisting;
|
|
||||||
private System.Windows.Forms.TextBox edNameScheme;
|
|
||||||
private System.Windows.Forms.Label lbNameScheme;
|
|
||||||
private System.Windows.Forms.Button btnSearchFolders;
|
|
||||||
private System.Windows.Forms.TextBox edOperatingFolder;
|
|
||||||
private System.Windows.Forms.Label lbOperatingFolder;
|
|
||||||
private System.Windows.Forms.Button btnAddJob;
|
|
||||||
private System.Windows.Forms.ComboBox cbChannel;
|
|
||||||
private System.Windows.Forms.Label lbChannel;
|
|
||||||
private System.Windows.Forms.ComboBox cbGuild;
|
|
||||||
private System.Windows.Forms.Label lbGuild;
|
|
||||||
private System.Windows.Forms.Button btnDelete;
|
|
||||||
private System.Windows.Forms.ListBox lbxJobs;
|
|
||||||
private System.Windows.Forms.ToolStripProgressBar pgbProgress;
|
|
||||||
private System.Windows.Forms.ToolStripStatusLabel lbProgress;
|
|
||||||
private System.Windows.Forms.Timer tmrRefreshProgress;
|
|
||||||
private System.Windows.Forms.ToolStripStatusLabel lblVersionPlaceholder;
|
|
||||||
private System.Windows.Forms.ToolStripStatusLabel lbVersion;
|
|
||||||
private System.Windows.Forms.ToolStripSplitButton btnDropDown;
|
|
||||||
private System.Windows.Forms.ToolStripMenuItem aboutToolStripMenuItem;
|
|
||||||
private System.Windows.Forms.ToolStripMenuItem visitGithubToolStripMenuItem;
|
|
||||||
private System.Windows.Forms.ToolStripDropDownButton lbStatus;
|
|
||||||
private System.Windows.Forms.ToolStripMenuItem invisibleToolStripMenuItem;
|
|
||||||
private System.Windows.Forms.ToolStripMenuItem doNotDisturbToolStripMenuItem;
|
|
||||||
private System.Windows.Forms.ToolStripMenuItem doNotDenyToolStripMenuItem;
|
|
||||||
private System.Windows.Forms.ToolStripMenuItem onlineToolStripMenuItem;
|
|
||||||
private System.Windows.Forms.Timer tmrTriggerRefresh;
|
|
||||||
private System.Windows.Forms.ToolStripMenuItem showTokenToolStripMenuItem;
|
|
||||||
private System.Windows.Forms.ToolStripSeparator toolStripSeparator2;
|
|
||||||
private System.Windows.Forms.Button btnFileNameHelp;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,299 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Reflection;
|
|
||||||
using System.Windows.Forms;
|
|
||||||
using Discord;
|
|
||||||
using Discord.WebSocket;
|
|
||||||
using DML.AppCore.Classes;
|
|
||||||
using DML.Application.Classes;
|
|
||||||
using DML.Application.Helper;
|
|
||||||
using DML.Application.Properties;
|
|
||||||
using DML.Client;
|
|
||||||
using static SweetLib.Utils.Logger.Logger;
|
|
||||||
|
|
||||||
namespace DML.Application
|
|
||||||
{
|
|
||||||
internal enum OnlineState
|
|
||||||
{
|
|
||||||
Online,
|
|
||||||
Idle,
|
|
||||||
DoNotDisturb,
|
|
||||||
Invisible
|
|
||||||
}
|
|
||||||
|
|
||||||
public partial class MainForm : Form
|
|
||||||
{
|
|
||||||
public MainForm()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
}
|
|
||||||
|
|
||||||
private bool IsInitialized { get; set; }
|
|
||||||
|
|
||||||
private void MainForm_Shown(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
Trace("MainForm shown executed.");
|
|
||||||
RefreshComponents();
|
|
||||||
|
|
||||||
IsInitialized = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void RefreshComponents()
|
|
||||||
{
|
|
||||||
Debug("Refreshing components...");
|
|
||||||
|
|
||||||
lbVersion.Text = $"v{Assembly.GetExecutingAssembly().GetName().Version} Copyright © by Serraniel";
|
|
||||||
|
|
||||||
Trace("Refreshing operating folder component...");
|
|
||||||
edOperatingFolder.Text = Core.Settings.OperatingFolder;
|
|
||||||
|
|
||||||
Trace("Refreshing name scheme component...");
|
|
||||||
edNameScheme.Text = Core.Settings.FileNameScheme;
|
|
||||||
|
|
||||||
Trace("Refreshing skip existing files component...");
|
|
||||||
cbSkipExisting.Checked = Core.Settings.SkipExistingFiles;
|
|
||||||
|
|
||||||
Trace("Refreshing thread limit component...");
|
|
||||||
edThreadLimit.Value = Core.Settings.ThreadLimit;
|
|
||||||
|
|
||||||
if (cbGuild.Items.Count == 0)
|
|
||||||
{
|
|
||||||
Trace("Adding guilds to component...");
|
|
||||||
|
|
||||||
cbGuild.Items.AddRange(DMLClient.Client.Guilds.Where(g => g.Name != null).OrderBy(g => g.Name)
|
|
||||||
.Select(g => new IdentifiedString<ulong>(g.Id, g.Name)).ToArray());
|
|
||||||
|
|
||||||
cbGuild.SelectedIndex = 0;
|
|
||||||
Trace("Guild component initialized.");
|
|
||||||
}
|
|
||||||
|
|
||||||
Trace("Refreshing job list component...");
|
|
||||||
var oldIndex = lbxJobs.SelectedIndex;
|
|
||||||
lbxJobs.Items.Clear();
|
|
||||||
foreach (var job in Core.Scheduler.JobList)
|
|
||||||
lbxJobs.Items.Add(new IdentifiedString<int>(job.Id,
|
|
||||||
$"{FindServerById(job.GuildId)?.Name}:{FindChannelById(FindServerById(job.GuildId), job.ChannelId)?.Name}"));
|
|
||||||
lbxJobs.SelectedIndex = oldIndex;
|
|
||||||
|
|
||||||
lbStatus.Text = DMLClient.Client.CurrentUser.Status.ToString();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void DoSomethingChanged(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
Debug($"DoSomethingChanged excuted by {sender}.");
|
|
||||||
if (!IsInitialized)
|
|
||||||
{
|
|
||||||
Trace("Form not initialized. Leaving DoSomethingChanged...");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Trace("Updating operating folder...");
|
|
||||||
Core.Settings.OperatingFolder = edOperatingFolder.Text;
|
|
||||||
|
|
||||||
Trace("Updating name scheme...");
|
|
||||||
Core.Settings.FileNameScheme = edNameScheme.Text;
|
|
||||||
|
|
||||||
Trace("Updating skip existing files...");
|
|
||||||
Core.Settings.SkipExistingFiles = cbSkipExisting.Checked;
|
|
||||||
|
|
||||||
Trace("Updating thread limit...");
|
|
||||||
Core.Settings.ThreadLimit = (int) edThreadLimit.Value;
|
|
||||||
|
|
||||||
Trace("Storing new settings...");
|
|
||||||
Core.Settings.Store();
|
|
||||||
|
|
||||||
Info("New settings have been saved.");
|
|
||||||
}
|
|
||||||
|
|
||||||
private void btnSearchFolders_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
Trace("Operating folder button pressed.");
|
|
||||||
using (var browserDialog = new FolderBrowserDialog())
|
|
||||||
{
|
|
||||||
Debug("Showing file browser dialog for operating folder...");
|
|
||||||
|
|
||||||
browserDialog.SelectedPath = edOperatingFolder.Text;
|
|
||||||
browserDialog.ShowNewFolderButton = true;
|
|
||||||
browserDialog.Description = "Select an operating folder...";
|
|
||||||
|
|
||||||
if (browserDialog.ShowDialog() == DialogResult.OK)
|
|
||||||
{
|
|
||||||
edOperatingFolder.Text = browserDialog.SelectedPath;
|
|
||||||
Debug("Updated operating folder.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private SocketGuild FindServerByName(string name)
|
|
||||||
{
|
|
||||||
Trace($"Trying to find server by name: {name}");
|
|
||||||
return (from s in DMLClient.Client.Guilds where s.Name == name select s).FirstOrDefault();
|
|
||||||
}
|
|
||||||
|
|
||||||
private SocketTextChannel FindChannelByName(SocketGuild server, string name)
|
|
||||||
{
|
|
||||||
Trace($"Trying to find channel in {server} by name: {name}");
|
|
||||||
return (from c in server.TextChannels where c.Name == name select c).FirstOrDefault();
|
|
||||||
}
|
|
||||||
|
|
||||||
private SocketGuild FindServerById(ulong id)
|
|
||||||
{
|
|
||||||
Trace($"Trying to find server by Id: {id}");
|
|
||||||
return (from s in DMLClient.Client.Guilds where s.Id == id select s).FirstOrDefault();
|
|
||||||
}
|
|
||||||
|
|
||||||
private SocketTextChannel FindChannelById(SocketGuild server, ulong id)
|
|
||||||
{
|
|
||||||
Trace($"Trying to find channel in {server} by id: {id}");
|
|
||||||
return (from c in server.TextChannels where c.Id == id select c).FirstOrDefault();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void cbGuild_SelectedIndexChanged(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
Trace("Guild index changed.");
|
|
||||||
Debug("Updating channel dropdown component...");
|
|
||||||
|
|
||||||
UseWaitCursor = true;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var guild = FindServerById(((IdentifiedString<ulong>) cbGuild.SelectedItem).Id);
|
|
||||||
|
|
||||||
if (guild != null)
|
|
||||||
{
|
|
||||||
Trace("Cleaning channel component from old values...");
|
|
||||||
cbChannel.Items.Clear();
|
|
||||||
|
|
||||||
Trace("Adding new channels...");
|
|
||||||
|
|
||||||
cbChannel.Items.AddRange(guild.TextChannels.OrderBy(c => c.Position)
|
|
||||||
.Select(c => new IdentifiedString<ulong>(c.Id, c.Name)).ToArray());
|
|
||||||
|
|
||||||
Trace($"Added {cbChannel.Items.Count} channels.");
|
|
||||||
|
|
||||||
cbChannel.SelectedIndex = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Warn($"Guild {cbGuild.Text} could not be found!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
UseWaitCursor = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
Debug("Finished updating channel dropdown component.");
|
|
||||||
}
|
|
||||||
|
|
||||||
private void btnAddJob_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
var job = new Job
|
|
||||||
{
|
|
||||||
GuildId = ((IdentifiedString<ulong>) cbGuild.SelectedItem).Id,
|
|
||||||
ChannelId = ((IdentifiedString<ulong>) cbChannel.SelectedItem).Id
|
|
||||||
};
|
|
||||||
|
|
||||||
if (!(from j in Core.Scheduler.JobList
|
|
||||||
where j.GuildId == job.GuildId && j.ChannelId == job.ChannelId
|
|
||||||
select j).Any())
|
|
||||||
{
|
|
||||||
job.Store();
|
|
||||||
Core.Scheduler.JobList.Add(job);
|
|
||||||
}
|
|
||||||
|
|
||||||
RefreshComponents();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void btnDelete_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
Trace("Deleting job pressed.");
|
|
||||||
|
|
||||||
if (lbxJobs.SelectedIndex < 0)
|
|
||||||
{
|
|
||||||
Warn("No job selected.");
|
|
||||||
MessageBox.Show("No job has been seleted.", "Error", MessageBoxButtons.OK, MessageBoxIcon.Warning);
|
|
||||||
}
|
|
||||||
|
|
||||||
var jobId = ((IdentifiedString<int>) lbxJobs.SelectedItem).Id;
|
|
||||||
|
|
||||||
var job = Core.Scheduler.JobList.FirstOrDefault(j => j.Id == jobId);
|
|
||||||
if (job != null)
|
|
||||||
{
|
|
||||||
Core.Scheduler.JobList.Remove(job);
|
|
||||||
Core.Scheduler.RunningJobs.Remove(job.Id);
|
|
||||||
job.Stop();
|
|
||||||
job.Delete();
|
|
||||||
}
|
|
||||||
|
|
||||||
lbxJobs.SelectedIndex = -1;
|
|
||||||
RefreshComponents();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void tmrRefreshProgress_Tick(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
var scanned = Core.Scheduler.MessagesScanned;
|
|
||||||
var totalAttachments = Core.Scheduler.TotalAttachments;
|
|
||||||
var done = Core.Scheduler.AttachmentsDownloaded;
|
|
||||||
|
|
||||||
var progress = totalAttachments > 0 ? (int) (100 * done / totalAttachments) : 0;
|
|
||||||
progress = Math.Min(Math.Max(0, progress), 100);
|
|
||||||
pgbProgress.Maximum = 100;
|
|
||||||
pgbProgress.Value = progress;
|
|
||||||
|
|
||||||
lbProgress.Text = $"Scanned: {scanned} Downloaded: {done} Open: {totalAttachments - done}";
|
|
||||||
}
|
|
||||||
|
|
||||||
private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
MessageBox.Show(Resources.AboutString);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void visitGithubToolStripMenuItem_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
Process.Start("https://github.com/Serraniel/DiscordMediaLoader/");
|
|
||||||
}
|
|
||||||
|
|
||||||
private async void toolStripDropDownButton1_DropDownItemClicked(object sender, ToolStripItemClickedEventArgs e)
|
|
||||||
{
|
|
||||||
var state = (OnlineState) Convert.ToInt32(e.ClickedItem.Tag);
|
|
||||||
|
|
||||||
lbStatus.Text = state.ToString();
|
|
||||||
tmrTriggerRefresh.Start();
|
|
||||||
|
|
||||||
switch (state)
|
|
||||||
{
|
|
||||||
case OnlineState.Online:
|
|
||||||
await DMLClient.Client.SetStatusAsync(UserStatus.Online);
|
|
||||||
break;
|
|
||||||
case OnlineState.Idle:
|
|
||||||
await DMLClient.Client.SetStatusAsync(UserStatus.Idle);
|
|
||||||
break;
|
|
||||||
case OnlineState.DoNotDisturb:
|
|
||||||
await DMLClient.Client.SetStatusAsync(UserStatus.DoNotDisturb);
|
|
||||||
break;
|
|
||||||
case OnlineState.Invisible:
|
|
||||||
await DMLClient.Client.SetStatusAsync(UserStatus.Invisible);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void tmrTriggerRefresh_Tick(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
lbStatus.Text = DMLClient.Client.CurrentUser.Status.ToString();
|
|
||||||
tmrTriggerRefresh.Stop();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void showTokenToolStripMenuItem_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
Clipboard.SetText(Core.Settings.LoginToken);
|
|
||||||
MessageBox.Show(this, "Your login token has been copied to your clipboard.", "Discord Media Loader",
|
|
||||||
MessageBoxButtons.OK);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void btnFileNameHelp_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
MessageBox.Show(Resources.FileNameInfo);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,417 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<root>
|
|
||||||
<!--
|
|
||||||
Microsoft ResX Schema
|
|
||||||
|
|
||||||
Version 2.0
|
|
||||||
|
|
||||||
The primary goals of this format is to allow a simple XML format
|
|
||||||
that is mostly human readable. The generation and parsing of the
|
|
||||||
various data types are done through the TypeConverter classes
|
|
||||||
associated with the data types.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
... ado.net/XML headers & schema ...
|
|
||||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
|
||||||
<resheader name="version">2.0</resheader>
|
|
||||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
|
||||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
|
||||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
|
||||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
|
||||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
|
||||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
|
||||||
</data>
|
|
||||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
|
||||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
|
||||||
<comment>This is a comment</comment>
|
|
||||||
</data>
|
|
||||||
|
|
||||||
There are any number of "resheader" rows that contain simple
|
|
||||||
name/value pairs.
|
|
||||||
|
|
||||||
Each data row contains a name, and value. The row also contains a
|
|
||||||
type or mimetype. Type corresponds to a .NET class that support
|
|
||||||
text/value conversion through the TypeConverter architecture.
|
|
||||||
Classes that don't support this are serialized and stored with the
|
|
||||||
mimetype set.
|
|
||||||
|
|
||||||
The mimetype is used for serialized objects, and tells the
|
|
||||||
ResXResourceReader how to depersist the object. This is currently not
|
|
||||||
extensible. For a given mimetype the value must be set accordingly:
|
|
||||||
|
|
||||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
|
||||||
that the ResXResourceWriter will generate, however the reader can
|
|
||||||
read any of the formats listed below.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.binary.base64
|
|
||||||
value : The object must be serialized with
|
|
||||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.soap.base64
|
|
||||||
value : The object must be serialized with
|
|
||||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
|
||||||
value : The object must be serialized into a byte array
|
|
||||||
: using a System.ComponentModel.TypeConverter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
-->
|
|
||||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
|
||||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
|
||||||
<xsd:element name="root" msdata:IsDataSet="true">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:choice maxOccurs="unbounded">
|
|
||||||
<xsd:element name="metadata">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
|
||||||
<xsd:attribute name="type" type="xsd:string" />
|
|
||||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
|
||||||
<xsd:attribute ref="xml:space" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="assembly">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:attribute name="alias" type="xsd:string" />
|
|
||||||
<xsd:attribute name="name" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="data">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
|
||||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
|
||||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
|
||||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
|
||||||
<xsd:attribute ref="xml:space" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="resheader">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
</xsd:choice>
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
</xsd:schema>
|
|
||||||
<resheader name="resmimetype">
|
|
||||||
<value>text/microsoft-resx</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="version">
|
|
||||||
<value>2.0</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="reader">
|
|
||||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="writer">
|
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</resheader>
|
|
||||||
<metadata name="statusStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
|
||||||
<value>17, 17</value>
|
|
||||||
</metadata>
|
|
||||||
<metadata name="tmrRefreshProgress.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
|
||||||
<value>126, 17</value>
|
|
||||||
</metadata>
|
|
||||||
<metadata name="tmrTriggerRefresh.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
|
||||||
<value>284, 17</value>
|
|
||||||
</metadata>
|
|
||||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
|
||||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
|
||||||
<value>
|
|
||||||
AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
||||||
AAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8b////VP///3////+m////zP//
|
|
||||||
/+T////1//////////r////u////3f///8z///+m////f////1T///8b////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////M////5D////b////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/9v///+Q////M////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///w3///90////1v//
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
///////////////////////////////////////W////dP///w3///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A2K4AANiuAADYrgAA2K4AANiuAADfswAA////EP//
|
|
||||||
/4D////t////////////////////////////////////////////////9/zq/7XiQ/+340n/w+ho/9Pu
|
|
||||||
kf/m9b//+Pzt///////////////////////////////////////////////////////////t////gf//
|
|
||||||
/xCa2AAAmtgAAJrYAACa2AAAmtgAAJrYAAD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////ANiuAADYrgAA2K4AANiu
|
|
||||||
AAD///8B////Yf///+v//////////////////////////////////////////////////////////+z4
|
|
||||||
z/+a2AD/mtgA/5rYAP+a2AD/mtgA/6TcGf+65VL/3fKo//n98P//////////////////////////////
|
|
||||||
///////////////////////r////Yf///wGa2AAAmtgAAJrYAACa2AAA////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wDYrgAA2K4AANiuAAD///8k////xP//////////////////////////////////////////////////
|
|
||||||
///////////////////h87P/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+n3SD/zOt+//X7
|
|
||||||
5v/////////////////////////////////////////////////////E////I5rYAACa2AAAmtgAAP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A2K4AANiuAAD///9V////8f//////////////////////////////////
|
|
||||||
////////////////////////////////////////0+6Q/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+k3Bn/0e2K//v+9v//////////////////////////////////////////////
|
|
||||||
//H///9VmtgAAJrYAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wH///+M////////////////////////
|
|
||||||
/////////////////////////////////////////////////////////////8bpbv+a2AD/mtgA/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+u4DP/5/bD////////////////////
|
|
||||||
/////////////////////////////////4z///8B////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wb///+l////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
//+55E//mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5zZ
|
|
||||||
Bv/P7Ib/////////////////////////////////////////////////////pf///wb///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wb///+3////////////////////////////////////////////////////////////////////////
|
|
||||||
///////////////////+//3/rd8x/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+a2AD/mtgA/7zlV//5/fH/////////////////////////////////////////
|
|
||||||
//////+3////Bv///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wH///+k////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////+f3v/6PcF/+a2AD/mtgA/5rYAP+a2AD/mtgA/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/seE7//X75v//////////////
|
|
||||||
/////////////////////////////////6T///8B////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///+K////////////////////////////////////////
|
|
||||||
/////////////////////////////////////////////////////////////+751f+a2AD/mtgA/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rY
|
|
||||||
AP+s3y7/9Pvi////////////////////////////////////////////////i////wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///9V////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
///s+M//rd8w/6XcHf+c2Qb/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+a2AD/mtgA/6zfLv/1++f/////////////////////////////////////////
|
|
||||||
//////9V////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8j////8P//
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/////////////////////////////////v/6/fL/8PnZ/97yrP/E6Gv/qd4l/5rYAP+a2AD/mtgA/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/suE8//v99P//////////////
|
|
||||||
////////////////////////////8P///yP///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8B////xP//////////////////////////////////////////////////////////////////
|
|
||||||
//////////////////////////////////////////////////////////////////////////////v9
|
|
||||||
9f/e8qz/s+JA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rY
|
|
||||||
AP/A51/////////////////////////////////////////////////E////Af///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////Yf//////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
///////////////////////////////////f867/rN8t/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+a2AD/mtgA/9jwnP//////////////////////////////////////////////
|
|
||||||
/2H///8A////AP///wD///8A////AP///wD///8A////EP///+r/////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
//////////////////////////////////////////////////////////////r98//I6nX/mtgA/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+h2xL/8/rh////////////////////
|
|
||||||
///////////////////////q////Ev///wD///8A////AP///wD///8A////AP///3//////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/////////////9/yrf+h2xL/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/8Dn
|
|
||||||
X////////////////////////////////////////////////4D///8A////AP///wD///8A////AP//
|
|
||||||
/w3////u////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////7PjQ/6reKP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+c2QX/7vjT///////////////////////////////////////////u////Df//
|
|
||||||
/wD///8A////AP///wD///90////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
///////////////////////////////////////////////////////////////////0++L/qd4n/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/8PoaP//////////////////////////////
|
|
||||||
/////////////////3T///8A////AP///wD///8B////2///////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/////////////+360P+k4g3/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+j2xb/+Pzu////
|
|
||||||
///////////////////////////////////////b////Af///wD///8A////O///////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////wNCY/53dAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rY
|
|
||||||
AP+a2AD/mtgA/9/zr////////////////////////////////////////////////zv///8A////AP//
|
|
||||||
/5D/////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
//////////////////////////////////////////////////////////////f39/+Puin/n+AA/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP/F6W3/////////////////////////////////////////
|
|
||||||
//////+Q////AP///wD////Y////////////////////////////////////////////////////////
|
|
||||||
/////////////////////////////+3t7f+3t7f/jIyM/3Nzc/9oaGj/a2tr/35+fv+dnZ3/xsbG//Hx
|
|
||||||
8f//////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////iZNy/5zbAP+b2QD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/s+JA////////////////////
|
|
||||||
////////////////////////////2f///wD///8d////////////////////////////////////////
|
|
||||||
////////////////////////////////////////9fTx/46Pk/9BQUH/Li4u/y4uLv8uLi7/Li4u/y4u
|
|
||||||
Lv8uLi7/Li4u/y4uLv9ERET/fn5+/8rKyv//////////////////////////////////////////////
|
|
||||||
/////////////////////////////4iHjP98qA3/n+AA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/6ne
|
|
||||||
J/////////////////////////////////////////////////////8e////Vv//////////////////
|
|
||||||
////////////////////////////////////////////////////////+fDL/45/Qv8kJjH/Li4u/y4u
|
|
||||||
Lv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Xl5e/7e3t//+/v7/////////
|
|
||||||
//////////////////////////////////////////////////9vbXX/T2Ig/57fAP+a2QD/mtgA/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+l3Bz/////////////////////////////////////////////////////Vv//
|
|
||||||
/4T/////////////////////////////////////////////////////////////////////8+ax/+O5
|
|
||||||
D/92ZBv/JCYx/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4u
|
|
||||||
Lv8uLi7/YGBg/8jIyP/////////////////////////////////////////////////09PT/QkJE/zEz
|
|
||||||
Lf+Mwgb/nd0A/5rYAP+a2AD/mtgA/5rYAP+a2AD/pdwb////////////////////////////////////
|
|
||||||
/////////////////4T///+t////////////////////////////////////////////////////////
|
|
||||||
////////8+ez/9mwB//htQD/dWMb/yQnMf8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4u
|
|
||||||
Lv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/dHR0/97e3v//////////////////////////////
|
|
||||||
////////r6+v/y4uLv8nIzH/bZET/6HiAP+a2AD/mtgA/5rYAP+a2AD/mtgA/6neJv//////////////
|
|
||||||
//////////////////////////////////////+t////zP//////////////////////////////////
|
|
||||||
////////////////////////+PHS/9qyDv/YrgD/4rUA/3lmGf8kJjH/Li4u/y4uLv8uLi7/Li4u/y4u
|
|
||||||
Lv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Ozs7/1ZWVv90dHT/jo6O/5mZmf/Hx8f//v7+////
|
|
||||||
////////////////////////7+/v/0dHR/8uLi7/KCUw/1BkH/+f4AD/mtgA/5rYAP+a2AD/mtgA/5rY
|
|
||||||
AP+z4T7/////////////////////////////////////////////////////zP///+X/////////////
|
|
||||||
/////////////////////////////////////////v35/+C/N//YrgD/2K4A/+O2AP+Dbhf/IyYx/y4u
|
|
||||||
Lv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/1VVVf+QkJD/xsbG/+rq6v//////////////
|
|
||||||
////////////////////////////////////////+vr6/2tra/8uLi7/Li4u/yspL/86Qij/ltEC/5va
|
|
||||||
AP+a2AD/mtgA/5rYAP+a2AD/x+ly////////////////////////////////////////////////////
|
|
||||||
/+D////y//////////////////////////////////////////////////////Dfm//YrgD/2K4A/9iu
|
|
||||||
AP/itQD/k3oT/yUnMf8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/cHBw/8bGxv/8/Pz/////////
|
|
||||||
////////////////////////////////////////////////////////7+/v/3BwcP8uLi7/Li4u/y4u
|
|
||||||
Lv8tLC7/Ly8u/4e7CP+e3gD/mtgA/5rYAP+a2AD/mtgA/+X1vf//////////////////////////////
|
|
||||||
///////////////////////s//////////////////////////////////////////////////////79
|
|
||||||
+f/euyr/2K4A/9iuAP/YrgD/4LQA/6iKDf8oKTD/Li4u/y4uLv8uLi7/Li4u/y4uLv9QUFD/xMTE////
|
|
||||||
////////////////////////////////////////////////////////////////////////w8PD/1BQ
|
|
||||||
UP8uLi7/Li4u/y4uLv8uLi7/Li4u/yknMP95pA7/n+EA/5rYAP+a2AD/mtgA/6neJ//8/vj/////////
|
|
||||||
////////////////////////////////////////////+f//////////////////////////////////
|
|
||||||
///////////////////168D/2K4A/9iuAP/YrgD/2K4A/92yAP+/mwf/MTAt/ywtLv8uLi7/Li4u/y4u
|
|
||||||
Lv9wcHD/8PDw//////////////////////////////////////////////////////////////////r6
|
|
||||||
+v/ExMT/bm5u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8oJDH/a44U/6HiAP+a2AD/mtgA/5rY
|
|
||||||
AP/W75j///////////////////////////////////////////////////////////n////y////////
|
|
||||||
////////////////////////////////////////6tR3/9iuAP/YrgD/2K4A/9iuAP/arwD/06oB/0VA
|
|
||||||
J/8pKi//Li4u/y4uLv9ra2v/+vr6//////////////////////////////////////////////////39
|
|
||||||
/f/n5+f/wsLC/4yMjP9SUlL/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/JyMx/2F+
|
|
||||||
GP+h4wD/mtgA/5rYAP+v4DX//P74////////////////////////////////////////////////////
|
|
||||||
///////s////5f///////////////////////////////////////////////+LDQv/YrgD/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/+C0AP9oWh7/JCcx/y4uLv9GRkb/7u7u/////////////////////////////v7+/8fH
|
|
||||||
x/+VlZX/iYmJ/3BwcP9TU1P/OTk5/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4u
|
|
||||||
Lv8uLi7/Li4u/ygkMf9bdRv/oOEA/5rYAP+g2g7/7fjR////////////////////////////////////
|
|
||||||
////////////////////////////4P///8z/////////////////////////////////////////////
|
|
||||||
///euyj/2K4A/9iuAP/YrgD/2K4A/9iuAP/itQD/ln0S/yQnMf8uLi7/ra2t////////////////////
|
|
||||||
///////////////////i4uL/e3t7/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4u
|
|
||||||
Lv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8oJDH/WXEc/6DhAP+d2Qf/4fOy////////////////////
|
|
||||||
/////////////////////////////////////////////////8z///+t////////////////////////
|
|
||||||
////////////////////////3Lcc/9iuAP/YrgD/2K4A/9iuAP/YrgD/3LEA/8agBf82NCz/Pj9C//T0
|
|
||||||
9P/////////////////////////////////////////////////Ozs7/ZmZm/y4uLv8uLi7/Li4u/y4u
|
|
||||||
Lv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/KCQx/1pzHP+m4w//4POx////
|
|
||||||
//////////////////////////////////////////////////////////////////////+t////hP//
|
|
||||||
/////////////////////////////////////////////9y3Hf/YrgD/2K4A/9iuAP/YrgD/2K4A/9iu
|
|
||||||
AP/gtAD/Z1ke/2lrcv//////////////////////////////////////////////////////////////
|
|
||||||
//++vr7/ZGRk/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/ygk
|
|
||||||
Mf93i0X/7PnL////////////////////////////////////////////////////////////////////
|
|
||||||
////////////hP///1T////////////////////////////////////////////////euyr/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/9iuAP/YrgD/4LQA/66OC/+Dg4b/////////////////////////////////////////
|
|
||||||
///////////////////////////////////Pz8//hISE/0hISP8uLi7/Li4u/y4uLv8uLi7/Li4u/y4u
|
|
||||||
Lv8uLi7/Li4u/0JCQv+RkJX/9PXy////////////////////////////////////////////////////
|
|
||||||
/////////////////////////////////1b///8c////////////////////////////////////////
|
|
||||||
////////48RG/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9mvAP/dsgD/kopq////////////////////
|
|
||||||
///////////////////////////////////////////////////////////////////09PT/y8vL/6Ki
|
|
||||||
ov+Dg4P/cXFx/21tbf94eHj/kJCQ/7q6uv/v7+//////////////////////////////////////////
|
|
||||||
//////////////////////////////////////////////////////8d////AP///9f/////////////
|
|
||||||
/////////////////////////////+rTdP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/4LQA/72f
|
|
||||||
Iv/09PT/////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
///////////////////////////////////////////////////////////////////////Y////AP//
|
|
||||||
/wD///+P///////////////////////////////////////////06Lb/2K4A/9iuAP/YrgD/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/9iuAP/esgD/zsKO////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////kP///wD///8A////Ov///////////////////////////////////////////fvx/9y2
|
|
||||||
Gv/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/+G3Cf/578j/////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/////////////////////////////////zr///8A////AP///wH////a////////////////////////
|
|
||||||
///////////////////p0nD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/3bgh//r0
|
|
||||||
3P//////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/////////////////////////////////////////////////9v///8B////AP///wD///8A////dP//
|
|
||||||
////////////////////////////////////////+fPZ/9mxCP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/9iuAP/duCH/9+7I////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
//////////////////////////////////////////////////////////////////////90////AP//
|
|
||||||
/wD///8A////AP///wz////t///////////////////////////////////////////oz2n/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9qyDf/x4qT/////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
///////t////Df///wD///8A////AP///wD///8A////f///////////////////////////////////
|
|
||||||
////////+/fm/9u1Fv/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/+nQ
|
|
||||||
bP/8+u7/////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////f////wD///8A////AP///wD///8A////AP///xD////q////////
|
|
||||||
///////////////////////////////////x4qX/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/9iuAP/YrgD/3ron//Hipf///v3/////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////6v///xD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////YP///////////////////////////////////////////////+jPaf/YrgD/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/4cA5//HipP/9+/H/////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/////////////////////////////////////////////////////////////////2H///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wH////D////////////////////////////////////////
|
|
||||||
///+/fj/4sRE/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iu
|
|
||||||
AP/YrgD/3bgf/+fNY//x4qX/+PHT//367//+/vv////+////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/8P///8B////AP///wD///8A////AP///wD///8A////AP///wD///8A////Iv////D/////////////
|
|
||||||
//////////////////////////////z57f/gvzX/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9ivA//cthj/37wr//fuyv//////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
//////////////////D///8i////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///9U////////////////////////////////////////////////+/jo/+C/Nf/YrgD/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iu
|
|
||||||
AP/48NH/////////////////////////////////////////////////////////////////////////
|
|
||||||
//////////////////////////////////////9V////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///4j/////////////////////////////////////////////
|
|
||||||
///8+ev/4sND/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/9iuAP/btBP//Pns////////////////////////////////////////////////////
|
|
||||||
//////////////////////////////////////////////////////+J////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8B////pP//////////////////
|
|
||||||
//////////////////////////////789v/nzGD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/37wt///+/P//////////////////////////////
|
|
||||||
//////////////////////////////////////////////////////////////////////+k////Af//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wb///+3/////////////////////////////////////////////////////+7bj//asQr/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/+PGSv//////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
//////+3////Bv///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////Bv///6X/////////////////////////////////////////////
|
|
||||||
////////9+7K/+HBO//YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iu
|
|
||||||
AP/oz2n/////////////////////////////////////////////////////////////////////////
|
|
||||||
//////////////////////+l////Bv///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8B////jP//////////////////
|
|
||||||
///////////////////////////////////+/fr/7t2T/924Hv/YrgD/2K4A/9iuAP/YrgD/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/9iuAP/YrgD/7dqL////////////////////////////////////////////////////
|
|
||||||
//////////////////////////////////////+M////Af///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A2K4AANiu
|
|
||||||
AAD///9V////8f/////////////////////////////////////////////////////8+ev/7dmH/966
|
|
||||||
Jv/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A//Plrv//////////////////////////////
|
|
||||||
//////////////////////////////////////////////////H///9VmtgAAJrYAAD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////ANiuAADYrgAA2K4AAP///yT////E////////////////////////////////////////
|
|
||||||
///////////////////9/PT/8+av/+bLWv/duB7/2K4A/9iuAP/YrgD/2K4A/9iuAP/37sv/////////
|
|
||||||
/////////////////////////////////////////////////////////////////8T///8jmtgAAJrY
|
|
||||||
AACa2AAA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wDYrgAA2K4AANiuAADYrgAA////Af///2D////r////////
|
|
||||||
/////////////////////////////////////////////////////////fvx//btxv/v3pf/6dJw/+TH
|
|
||||||
T//jxEX/+/jo////////////////////////////////////////////////////////////////6///
|
|
||||||
/2D///8BmtgAAJrYAACa2AAAmtgAAP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////EP///3/////t////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
///////t////f////xD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////Df///3T////V////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/////////////////9X///90////Df///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/zP///+N////1///////////////////////////////////////////////////////////////////
|
|
||||||
///////////////////////X////jf///zP///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8b////VP///33///+l////y////+P////y////////
|
|
||||||
///////y////4////8v///+l////ff///1T///8b////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////4Af///////wAAD//////8AAAD/////+AAAAB/////wAAAAD////8AAAAAD////gAAAAA
|
|
||||||
H///4AAAAAAH///AAAAAAAP//4AAAAAAAf//AAAAAAAA//4AAAAAAAB//gAAAAAAAH/8AAAAAAAAP/gA
|
|
||||||
AAAAAAAf+AAAAAAAAB/wAAAAAAAAD/AAAAAAAAAH4AAAAAAAAAfgAAAAAAAAB8AAAAAAAAADwAAAAAAA
|
|
||||||
AAOAAAAAAAAAAYAAAAAAAAABgAAAAAAAAAGAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
||||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
||||||
AAAAAAAAAAAAAIAAAAAAAAABgAAAAAAAAAGAAAAAAAAAAYAAAAAAAAABwAAAAAAAAAPAAAAAAAAAA+AA
|
|
||||||
AAAAAAAH4AAAAAAAAAfwAAAAAAAAD/AAAAAAAAAP+AAAAAAAAB/4AAAAAAAAH/wAAAAAAAA//gAAAAAA
|
|
||||||
AH/+AAAAAAAAf/8AAAAAAAD//4AAAAAAAf//wAAAAAAD///gAAAAAAf///gAAAAAH////AAAAAA/////
|
|
||||||
AAAAAP/////AAAAD//////AAAA///////AAAP///////4Af///8=
|
|
||||||
</value>
|
|
||||||
</data>
|
|
||||||
</root>
|
|
|
@ -1,35 +0,0 @@
|
||||||
using System.Reflection;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
|
|
||||||
// Allgemeine Informationen über eine Assembly werden über die folgenden
|
|
||||||
// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
|
|
||||||
// die einer Assembly zugeordnet sind.
|
|
||||||
[assembly: AssemblyTitle("Discord Media Loader.Application")]
|
|
||||||
[assembly: AssemblyDescription("")]
|
|
||||||
[assembly: AssemblyConfiguration("")]
|
|
||||||
[assembly: AssemblyCompany("Serraniel")]
|
|
||||||
[assembly: AssemblyProduct("Discord Media Loader.Application")]
|
|
||||||
[assembly: AssemblyCopyright("Copyright © 2017 - 2019 by Serraniel")]
|
|
||||||
[assembly: AssemblyTrademark("")]
|
|
||||||
[assembly: AssemblyCulture("")]
|
|
||||||
|
|
||||||
// Durch Festlegen von ComVisible auf "false" werden die Typen in dieser Assembly unsichtbar
|
|
||||||
// für COM-Komponenten. Wenn Sie auf einen Typ in dieser Assembly von
|
|
||||||
// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
|
|
||||||
[assembly: ComVisible(false)]
|
|
||||||
|
|
||||||
// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
|
|
||||||
[assembly: Guid("c130de6a-3237-42b5-be9f-783d1cd104c6")]
|
|
||||||
|
|
||||||
// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
|
|
||||||
//
|
|
||||||
// Hauptversion
|
|
||||||
// Nebenversion
|
|
||||||
// Buildnummer
|
|
||||||
// Revision
|
|
||||||
//
|
|
||||||
// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
|
|
||||||
// übernehmen, indem Sie "*" eingeben:
|
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
|
||||||
[assembly: AssemblyVersion("1.5.3.0")]
|
|
||||||
[assembly: AssemblyFileVersion("1.5.3.0")]
|
|
|
@ -1,120 +0,0 @@
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
// <auto-generated>
|
|
||||||
// Dieser Code wurde von einem Tool generiert.
|
|
||||||
// Laufzeitversion:4.0.30319.42000
|
|
||||||
//
|
|
||||||
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
|
|
||||||
// der Code erneut generiert wird.
|
|
||||||
// </auto-generated>
|
|
||||||
//------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
namespace DML.Application.Properties {
|
|
||||||
using System;
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Eine stark typisierte Ressourcenklasse zum Suchen von lokalisierten Zeichenfolgen usw.
|
|
||||||
/// </summary>
|
|
||||||
// Diese Klasse wurde von der StronglyTypedResourceBuilder automatisch generiert
|
|
||||||
// -Klasse über ein Tool wie ResGen oder Visual Studio automatisch generiert.
|
|
||||||
// Um einen Member hinzuzufügen oder zu entfernen, bearbeiten Sie die .ResX-Datei und führen dann ResGen
|
|
||||||
// mit der /str-Option erneut aus, oder Sie erstellen Ihr VS-Projekt neu.
|
|
||||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
|
|
||||||
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
|
||||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
|
||||||
internal class Resources {
|
|
||||||
|
|
||||||
private static global::System.Resources.ResourceManager resourceMan;
|
|
||||||
|
|
||||||
private static global::System.Globalization.CultureInfo resourceCulture;
|
|
||||||
|
|
||||||
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
|
|
||||||
internal Resources() {
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Gibt die zwischengespeicherte ResourceManager-Instanz zurück, die von dieser Klasse verwendet wird.
|
|
||||||
/// </summary>
|
|
||||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
|
||||||
internal static global::System.Resources.ResourceManager ResourceManager {
|
|
||||||
get {
|
|
||||||
if (object.ReferenceEquals(resourceMan, null)) {
|
|
||||||
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("DML.Application.Properties.Resources", typeof(Resources).Assembly);
|
|
||||||
resourceMan = temp;
|
|
||||||
}
|
|
||||||
return resourceMan;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Überschreibt die CurrentUICulture-Eigenschaft des aktuellen Threads für alle
|
|
||||||
/// Ressourcenzuordnungen, die diese stark typisierte Ressourcenklasse verwenden.
|
|
||||||
/// </summary>
|
|
||||||
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
|
|
||||||
internal static global::System.Globalization.CultureInfo Culture {
|
|
||||||
get {
|
|
||||||
return resourceCulture;
|
|
||||||
}
|
|
||||||
set {
|
|
||||||
resourceCulture = value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Sucht eine lokalisierte Zeichenfolge, die Discord Media Loader by Serraniel - Apache 2.0 License
|
|
||||||
///https://github.com/Serraniel/DiscordMediaLoader/
|
|
||||||
///
|
|
||||||
///Made with:
|
|
||||||
///SweetLib (Copyright (c) 2017 Serraniel - GNU General Public License v3.0)
|
|
||||||
///Discord.Net (Copyright (c) 2015 RogueException - MIT License)
|
|
||||||
///Newtonsoft.Json (Copyright (c) 2007 James Newton-King - MIT License)
|
|
||||||
///Nito.AsyncEx (Copyright (c) 2014 StephenCleary - MIT License)
|
|
||||||
///RestSharp (Copyright (c) restsharp - Apache 2.0 License)
|
|
||||||
///WebSocket4Net (Copyright (c) kerryjiang - Apache 2.0 License)
|
|
||||||
/// [Rest der Zeichenfolge wurde abgeschnitten]"; ähnelt.
|
|
||||||
/// </summary>
|
|
||||||
internal static string AboutString {
|
|
||||||
get {
|
|
||||||
return ResourceManager.GetString("AboutString", resourceCulture);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Sucht eine lokalisierte Zeichenfolge, die You can use the following placeholders for your filenames:
|
|
||||||
///
|
|
||||||
///%guild% -> server name
|
|
||||||
///%channel% -> channel name
|
|
||||||
///%timestamp% -> message timestamp (Unix timestamp)
|
|
||||||
///%name% -> attachment filename
|
|
||||||
///%username% -> author username
|
|
||||||
///%nickname% -> author nickname (if unassigned, username will be used)
|
|
||||||
///%id% -> attachment id (given by Discord)
|
|
||||||
///%userid% -> author id (given by discord) ähnelt.
|
|
||||||
/// </summary>
|
|
||||||
internal static string FileNameInfo {
|
|
||||||
get {
|
|
||||||
return ResourceManager.GetString("FileNameInfo", resourceCulture);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
|
|
||||||
/// </summary>
|
|
||||||
internal static System.Drawing.Bitmap info_icon {
|
|
||||||
get {
|
|
||||||
object obj = ResourceManager.GetObject("info_icon", resourceCulture);
|
|
||||||
return ((System.Drawing.Bitmap)(obj));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
|
|
||||||
/// </summary>
|
|
||||||
internal static System.Drawing.Bitmap Serraniel_Logo4_NO_BG {
|
|
||||||
get {
|
|
||||||
object obj = ResourceManager.GetObject("Serraniel_Logo4_NO_BG", resourceCulture);
|
|
||||||
return ((System.Drawing.Bitmap)(obj));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,154 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<root>
|
|
||||||
<!--
|
|
||||||
Microsoft ResX Schema
|
|
||||||
|
|
||||||
Version 2.0
|
|
||||||
|
|
||||||
The primary goals of this format is to allow a simple XML format
|
|
||||||
that is mostly human readable. The generation and parsing of the
|
|
||||||
various data types are done through the TypeConverter classes
|
|
||||||
associated with the data types.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
... ado.net/XML headers & schema ...
|
|
||||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
|
||||||
<resheader name="version">2.0</resheader>
|
|
||||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
|
||||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
|
||||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
|
||||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
|
||||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
|
||||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
|
||||||
</data>
|
|
||||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
|
||||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
|
||||||
<comment>This is a comment</comment>
|
|
||||||
</data>
|
|
||||||
|
|
||||||
There are any number of "resheader" rows that contain simple
|
|
||||||
name/value pairs.
|
|
||||||
|
|
||||||
Each data row contains a name, and value. The row also contains a
|
|
||||||
type or mimetype. Type corresponds to a .NET class that support
|
|
||||||
text/value conversion through the TypeConverter architecture.
|
|
||||||
Classes that don't support this are serialized and stored with the
|
|
||||||
mimetype set.
|
|
||||||
|
|
||||||
The mimetype is used for serialized objects, and tells the
|
|
||||||
ResXResourceReader how to depersist the object. This is currently not
|
|
||||||
extensible. For a given mimetype the value must be set accordingly:
|
|
||||||
|
|
||||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
|
||||||
that the ResXResourceWriter will generate, however the reader can
|
|
||||||
read any of the formats listed below.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.binary.base64
|
|
||||||
value : The object must be serialized with
|
|
||||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.soap.base64
|
|
||||||
value : The object must be serialized with
|
|
||||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
|
||||||
value : The object must be serialized into a byte array
|
|
||||||
: using a System.ComponentModel.TypeConverter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
-->
|
|
||||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
|
||||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
|
||||||
<xsd:element name="root" msdata:IsDataSet="true">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:choice maxOccurs="unbounded">
|
|
||||||
<xsd:element name="metadata">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
|
||||||
<xsd:attribute name="type" type="xsd:string" />
|
|
||||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
|
||||||
<xsd:attribute ref="xml:space" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="assembly">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:attribute name="alias" type="xsd:string" />
|
|
||||||
<xsd:attribute name="name" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="data">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
|
||||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
|
||||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
|
||||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
|
||||||
<xsd:attribute ref="xml:space" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="resheader">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
</xsd:choice>
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
</xsd:schema>
|
|
||||||
<resheader name="resmimetype">
|
|
||||||
<value>text/microsoft-resx</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="version">
|
|
||||||
<value>2.0</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="reader">
|
|
||||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="writer">
|
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</resheader>
|
|
||||||
<data name="AboutString" xml:space="preserve">
|
|
||||||
<value>Discord Media Loader by Serraniel - Apache 2.0 License
|
|
||||||
https://github.com/Serraniel/DiscordMediaLoader/
|
|
||||||
|
|
||||||
Made with:
|
|
||||||
SweetLib (Copyright (c) 2017 Serraniel - GNU General Public License v3.0)
|
|
||||||
Discord.Net (Copyright (c) 2015 RogueException - MIT License)
|
|
||||||
Newtonsoft.Json (Copyright (c) 2007 James Newton-King - MIT License)
|
|
||||||
Nito.AsyncEx (Copyright (c) 2014 StephenCleary - MIT License)
|
|
||||||
RestSharp (Copyright (c) restsharp - Apache 2.0 License)
|
|
||||||
WebSocket4Net (Copyright (c) kerryjiang - Apache 2.0 License)
|
|
||||||
LiteDB (Copyright (c) 2014 - 2015 Mauricio David - MIT License)
|
|
||||||
Octokit (Copyright (c) 2012 GitHub, Inc - MIT License)
|
|
||||||
Flaticons (Roundicons Circle Flat) - Flaticon Basic License</value>
|
|
||||||
</data>
|
|
||||||
<data name="FileNameInfo" xml:space="preserve">
|
|
||||||
<value>You can use the following placeholders for your filenames:
|
|
||||||
|
|
||||||
%guild% -> server name
|
|
||||||
%channel% -> channel name
|
|
||||||
%timestamp% -> message timestamp (Unix timestamp)
|
|
||||||
%name% -> attachment filename
|
|
||||||
%username% -> author username
|
|
||||||
%nickname% -> author nickname (if unassigned, username will be used)
|
|
||||||
%id% -> attachment id (given by Discord)
|
|
||||||
%userid% -> author id (given by discord)</value>
|
|
||||||
</data>
|
|
||||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
|
||||||
<data name="info_icon" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
|
||||||
<value>..\Resources\info_icon.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
|
||||||
</data>
|
|
||||||
<data name="Serraniel_Logo4_NO_BG" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
|
||||||
<value>..\Resources\Serraniel-Logo4-NO-BG.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
|
||||||
</data>
|
|
||||||
</root>
|
|
Binary file not shown.
Before Width: | Height: | Size: 300 KiB |
Binary file not shown.
Before Width: | Height: | Size: 5.4 KiB |
|
@ -1,71 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<configuration>
|
|
||||||
<runtime>
|
|
||||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="System.Interactive.Async" publicKeyToken="94bc3704cddfc263" culture="neutral" />
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
|
|
||||||
</dependentAssembly>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
|
|
||||||
</dependentAssembly>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
|
|
||||||
</dependentAssembly>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
|
|
||||||
</dependentAssembly>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="System.Console" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
|
|
||||||
</dependentAssembly>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="System.IO.FileSystem" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
|
|
||||||
</dependentAssembly>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="System.IO.Compression" publicKeyToken="b77a5c561934e089" culture="neutral" />
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
|
|
||||||
</dependentAssembly>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="Microsoft.Win32.Registry" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.1.3.0" newVersion="4.1.3.0" />
|
|
||||||
</dependentAssembly>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.2.0.1" newVersion="4.2.0.1" />
|
|
||||||
</dependentAssembly>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="Microsoft.Extensions.DependencyInjection.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-3.1.6.0" newVersion="3.1.6.0" />
|
|
||||||
</dependentAssembly>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="System.Runtime.InteropServices.RuntimeInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
|
|
||||||
</dependentAssembly>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="System.Collections.Immutable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-1.2.5.0" newVersion="1.2.5.0" />
|
|
||||||
</dependentAssembly>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.1" newVersion="4.0.1.1" />
|
|
||||||
</dependentAssembly>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="System.Linq.Async" publicKeyToken="94bc3704cddfc263" culture="neutral" />
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
|
|
||||||
</dependentAssembly>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.0.6.0" newVersion="4.0.6.0" />
|
|
||||||
</dependentAssembly>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="Microsoft.Bcl.AsyncInterfaces" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
|
||||||
</dependentAssembly>
|
|
||||||
</assemblyBinding>
|
|
||||||
</runtime>
|
|
||||||
<startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" /></startup></configuration>
|
|
|
@ -1,28 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<packages>
|
|
||||||
<package id="LiteDB" version="5.0.9" targetFramework="net461" />
|
|
||||||
<package id="Microsoft.Bcl.AsyncInterfaces" version="6.0.0" targetFramework="net461" />
|
|
||||||
<package id="Microsoft.NETCore.Platforms" version="5.0.1" targetFramework="net461" />
|
|
||||||
<package id="Microsoft.Win32.Primitives" version="4.3.0" targetFramework="net461" />
|
|
||||||
<package id="Microsoft.Win32.Registry" version="5.0.0" targetFramework="net461" />
|
|
||||||
<package id="NETStandard.Library" version="2.0.3" targetFramework="net461" />
|
|
||||||
<package id="Newtonsoft.Json" version="12.0.2" targetFramework="net461" />
|
|
||||||
<package id="SharpRaven" version="2.4.0" targetFramework="net461" />
|
|
||||||
<package id="SweetLib" version="0.2.1-alpha" targetFramework="net461" />
|
|
||||||
<package id="System.Buffers" version="4.5.1" targetFramework="net461" />
|
|
||||||
<package id="System.Collections.Immutable" version="5.0.0" targetFramework="net461" />
|
|
||||||
<package id="System.Linq" version="4.3.0" targetFramework="net461" requireReinstallation="true" />
|
|
||||||
<package id="System.Linq.Async" version="4.1.1" targetFramework="net461" />
|
|
||||||
<package id="System.Memory" version="4.5.4" targetFramework="net461" />
|
|
||||||
<package id="System.Net.Security" version="4.3.2" targetFramework="net461" />
|
|
||||||
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net461" />
|
|
||||||
<package id="System.Runtime.CompilerServices.Unsafe" version="5.0.0" targetFramework="net461" />
|
|
||||||
<package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net461" />
|
|
||||||
<package id="System.Security.AccessControl" version="5.0.0" targetFramework="net461" />
|
|
||||||
<package id="System.Security.Cryptography.Algorithms" version="4.3.1" targetFramework="net461" />
|
|
||||||
<package id="System.Security.Cryptography.Encoding" version="4.3.0" targetFramework="net461" />
|
|
||||||
<package id="System.Security.Cryptography.Primitives" version="4.3.0" targetFramework="net461" />
|
|
||||||
<package id="System.Security.Cryptography.X509Certificates" version="4.3.2" targetFramework="net461" />
|
|
||||||
<package id="System.Security.Principal.Windows" version="5.0.0" targetFramework="net461" />
|
|
||||||
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net461" />
|
|
||||||
</packages>
|
|
|
@ -1,29 +1,9 @@
|
||||||
|
|
||||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||||
# Visual Studio Version 16
|
# Visual Studio 14
|
||||||
VisualStudioVersion = 16.0.29324.140
|
VisualStudioVersion = 14.0.25123.0
|
||||||
MinimumVisualStudioVersion = 10.0.40219.1
|
MinimumVisualStudioVersion = 10.0.40219.1
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Discord Media Loader", "Discord Media Loader\Discord Media Loader.csproj", "{EDC92554-DBC1-4F9C-9317-379A8BF441E8}"
|
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Discord Media Loader", "Discord Media Loader\Discord Media Loader.csproj", "{83E64057-7010-4DF3-A011-F7E536508407}"
|
||||||
EndProject
|
|
||||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DML.Application", "Discord Media Loader.Application\DML.Application.csproj", "{C130DE6A-3237-42B5-BE9F-783D1CD104C6}"
|
|
||||||
EndProject
|
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DML.Client", "DML.Client\DML.Client.csproj", "{045EB4A1-34E7-47E0-867E-E10C40505095}"
|
|
||||||
EndProject
|
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Discord.Net.Core", "libs\Discord.Net\src\Discord.Net.Core\Discord.Net.Core.csproj", "{8BD82FAE-47F7-41FD-A862-892C8AFF8C66}"
|
|
||||||
EndProject
|
|
||||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "libs", "libs", "{451BDCAA-EC43-475E-8887-0F80EA605A73}"
|
|
||||||
EndProject
|
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Discord.Net.Analyzers", "libs\Discord.Net\src\Discord.Net.Analyzers\Discord.Net.Analyzers.csproj", "{99FB0F60-AEEC-4059-9605-6FA2D7408EFC}"
|
|
||||||
EndProject
|
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Discord.Net.Commands", "libs\Discord.Net\src\Discord.Net.Commands\Discord.Net.Commands.csproj", "{B3B30663-625D-452F-A3D7-57B381D021F6}"
|
|
||||||
EndProject
|
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Discord.Net.Providers.WS4Net", "libs\Discord.Net\src\Discord.Net.Providers.WS4Net\Discord.Net.Providers.WS4Net.csproj", "{AD6116CD-1DC1-4FED-A2D5-0E72B553DD32}"
|
|
||||||
EndProject
|
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Discord.Net.Rest", "libs\Discord.Net\src\Discord.Net.Rest\Discord.Net.Rest.csproj", "{103472C3-834D-4561-9395-6FEBFEB165AC}"
|
|
||||||
EndProject
|
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Discord.Net.Webhook", "libs\Discord.Net\src\Discord.Net.Webhook\Discord.Net.Webhook.csproj", "{58D6AEF3-5837-4601-A5D3-C6F11AC313B0}"
|
|
||||||
EndProject
|
|
||||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Discord.Net.WebSocket", "libs\Discord.Net\src\Discord.Net.WebSocket\Discord.Net.WebSocket.csproj", "{58009F12-B2D9-4F1C-954B-A7CFEA17DBC7}"
|
|
||||||
EndProject
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
|
@ -31,60 +11,12 @@ Global
|
||||||
Release|Any CPU = Release|Any CPU
|
Release|Any CPU = Release|Any CPU
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||||
{EDC92554-DBC1-4F9C-9317-379A8BF441E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
{83E64057-7010-4DF3-A011-F7E536508407}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||||
{EDC92554-DBC1-4F9C-9317-379A8BF441E8}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
{83E64057-7010-4DF3-A011-F7E536508407}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||||
{EDC92554-DBC1-4F9C-9317-379A8BF441E8}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
{83E64057-7010-4DF3-A011-F7E536508407}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||||
{EDC92554-DBC1-4F9C-9317-379A8BF441E8}.Release|Any CPU.Build.0 = Release|Any CPU
|
{83E64057-7010-4DF3-A011-F7E536508407}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||||
{C130DE6A-3237-42B5-BE9F-783D1CD104C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{C130DE6A-3237-42B5-BE9F-783D1CD104C6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{C130DE6A-3237-42B5-BE9F-783D1CD104C6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{C130DE6A-3237-42B5-BE9F-783D1CD104C6}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{045EB4A1-34E7-47E0-867E-E10C40505095}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{045EB4A1-34E7-47E0-867E-E10C40505095}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{045EB4A1-34E7-47E0-867E-E10C40505095}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{045EB4A1-34E7-47E0-867E-E10C40505095}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{8BD82FAE-47F7-41FD-A862-892C8AFF8C66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{8BD82FAE-47F7-41FD-A862-892C8AFF8C66}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{8BD82FAE-47F7-41FD-A862-892C8AFF8C66}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{8BD82FAE-47F7-41FD-A862-892C8AFF8C66}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{99FB0F60-AEEC-4059-9605-6FA2D7408EFC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{99FB0F60-AEEC-4059-9605-6FA2D7408EFC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{99FB0F60-AEEC-4059-9605-6FA2D7408EFC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{99FB0F60-AEEC-4059-9605-6FA2D7408EFC}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{B3B30663-625D-452F-A3D7-57B381D021F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{B3B30663-625D-452F-A3D7-57B381D021F6}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{B3B30663-625D-452F-A3D7-57B381D021F6}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{B3B30663-625D-452F-A3D7-57B381D021F6}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{AD6116CD-1DC1-4FED-A2D5-0E72B553DD32}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{AD6116CD-1DC1-4FED-A2D5-0E72B553DD32}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{AD6116CD-1DC1-4FED-A2D5-0E72B553DD32}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{AD6116CD-1DC1-4FED-A2D5-0E72B553DD32}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{103472C3-834D-4561-9395-6FEBFEB165AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{103472C3-834D-4561-9395-6FEBFEB165AC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{103472C3-834D-4561-9395-6FEBFEB165AC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{103472C3-834D-4561-9395-6FEBFEB165AC}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{58D6AEF3-5837-4601-A5D3-C6F11AC313B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{58D6AEF3-5837-4601-A5D3-C6F11AC313B0}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{58D6AEF3-5837-4601-A5D3-C6F11AC313B0}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{58D6AEF3-5837-4601-A5D3-C6F11AC313B0}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
{58009F12-B2D9-4F1C-954B-A7CFEA17DBC7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
||||||
{58009F12-B2D9-4F1C-954B-A7CFEA17DBC7}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
||||||
{58009F12-B2D9-4F1C-954B-A7CFEA17DBC7}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
||||||
{58009F12-B2D9-4F1C-954B-A7CFEA17DBC7}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(NestedProjects) = preSolution
|
|
||||||
{8BD82FAE-47F7-41FD-A862-892C8AFF8C66} = {451BDCAA-EC43-475E-8887-0F80EA605A73}
|
|
||||||
{99FB0F60-AEEC-4059-9605-6FA2D7408EFC} = {451BDCAA-EC43-475E-8887-0F80EA605A73}
|
|
||||||
{B3B30663-625D-452F-A3D7-57B381D021F6} = {451BDCAA-EC43-475E-8887-0F80EA605A73}
|
|
||||||
{AD6116CD-1DC1-4FED-A2D5-0E72B553DD32} = {451BDCAA-EC43-475E-8887-0F80EA605A73}
|
|
||||||
{103472C3-834D-4561-9395-6FEBFEB165AC} = {451BDCAA-EC43-475E-8887-0F80EA605A73}
|
|
||||||
{58D6AEF3-5837-4601-A5D3-C6F11AC313B0} = {451BDCAA-EC43-475E-8887-0F80EA605A73}
|
|
||||||
{58009F12-B2D9-4F1C-954B-A7CFEA17DBC7} = {451BDCAA-EC43-475E-8887-0F80EA605A73}
|
|
||||||
EndGlobalSection
|
|
||||||
GlobalSection(ExtensibilityGlobals) = postSolution
|
|
||||||
SolutionGuid = {0B742DE0-D6AF-4033-9605-863C32A7FFD8}
|
|
||||||
EndGlobalSection
|
|
||||||
EndGlobal
|
EndGlobal
|
||||||
|
|
|
@ -1,74 +1,18 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<configuration>
|
<configuration>
|
||||||
|
<configSections>
|
||||||
|
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
|
<section name="Discord_Media_Loader.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false"/>
|
||||||
|
</sectionGroup>
|
||||||
|
</configSections>
|
||||||
<startup>
|
<startup>
|
||||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
|
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6"/>
|
||||||
</startup>
|
</startup>
|
||||||
<runtime>
|
<userSettings>
|
||||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
<Discord_Media_Loader.Properties.Settings>
|
||||||
<dependentAssembly>
|
<setting name="email" serializeAs="String">
|
||||||
<assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
<value/>
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
|
</setting>
|
||||||
</dependentAssembly>
|
</Discord_Media_Loader.Properties.Settings>
|
||||||
<dependentAssembly>
|
</userSettings>
|
||||||
<assemblyIdentity name="System.Interactive.Async" publicKeyToken="94bc3704cddfc263" culture="neutral" />
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
|
|
||||||
</dependentAssembly>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="System.Diagnostics.DiagnosticSource" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.0" newVersion="4.0.1.0" />
|
|
||||||
</dependentAssembly>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-12.0.0.0" newVersion="12.0.0.0" />
|
|
||||||
</dependentAssembly>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="System.Console" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
|
|
||||||
</dependentAssembly>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="System.IO.FileSystem" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
|
|
||||||
</dependentAssembly>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="System.IO.Compression" publicKeyToken="b77a5c561934e089" culture="neutral" />
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.2.0.0" />
|
|
||||||
</dependentAssembly>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="Microsoft.Win32.Registry" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.1.3.0" newVersion="4.1.3.0" />
|
|
||||||
</dependentAssembly>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="System.Threading.Tasks.Extensions" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.2.0.1" newVersion="4.2.0.1" />
|
|
||||||
</dependentAssembly>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="Microsoft.Extensions.DependencyInjection.Abstractions" publicKeyToken="adb9793829ddae60" culture="neutral" />
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-3.1.6.0" newVersion="3.1.6.0" />
|
|
||||||
</dependentAssembly>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="System.Collections.Immutable" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-1.2.5.0" newVersion="1.2.5.0" />
|
|
||||||
</dependentAssembly>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="System.Runtime.InteropServices.RuntimeInformation" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.0.2.0" newVersion="4.0.2.0" />
|
|
||||||
</dependentAssembly>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="System.Memory" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.0.1.1" newVersion="4.0.1.1" />
|
|
||||||
</dependentAssembly>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="System.Linq.Async" publicKeyToken="94bc3704cddfc263" culture="neutral" />
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.1.0.0" newVersion="4.1.0.0" />
|
|
||||||
</dependentAssembly>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-4.0.6.0" newVersion="4.0.6.0" />
|
|
||||||
</dependentAssembly>
|
|
||||||
<dependentAssembly>
|
|
||||||
<assemblyIdentity name="Microsoft.Bcl.AsyncInterfaces" publicKeyToken="cc7b13ffcd2ddd51" culture="neutral" />
|
|
||||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
|
||||||
</dependentAssembly>
|
|
||||||
</assemblyBinding>
|
|
||||||
</runtime>
|
|
||||||
</configuration>
|
</configuration>
|
||||||
|
|
|
@ -4,17 +4,15 @@
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||||
<ProjectGuid>{EDC92554-DBC1-4F9C-9317-379A8BF441E8}</ProjectGuid>
|
<ProjectGuid>{83E64057-7010-4DF3-A011-F7E536508407}</ProjectGuid>
|
||||||
<OutputType>WinExe</OutputType>
|
<OutputType>WinExe</OutputType>
|
||||||
<AppDesignerFolder>Properties</AppDesignerFolder>
|
<AppDesignerFolder>Properties</AppDesignerFolder>
|
||||||
<RootNamespace>Discord_Media_Loader</RootNamespace>
|
<RootNamespace>Discord_Media_Loader</RootNamespace>
|
||||||
<AssemblyName>Discord Media Loader</AssemblyName>
|
<AssemblyName>Discord Media Loader</AssemblyName>
|
||||||
<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
|
<TargetFrameworkVersion>v4.6</TargetFrameworkVersion>
|
||||||
<FileAlignment>512</FileAlignment>
|
<FileAlignment>512</FileAlignment>
|
||||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||||
<TargetFrameworkProfile />
|
<TargetFrameworkProfile />
|
||||||
<NuGetPackageImportStamp>
|
|
||||||
</NuGetPackageImportStamp>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||||
|
@ -34,176 +32,82 @@
|
||||||
<DefineConstants>TRACE</DefineConstants>
|
<DefineConstants>TRACE</DefineConstants>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
|
<UpdateAssemblyVersion>True</UpdateAssemblyVersion>
|
||||||
|
<UpdateAssemblyFileVersion>True</UpdateAssemblyFileVersion>
|
||||||
|
<UpdateAssemblyInfoVersion>True</UpdateAssemblyInfoVersion>
|
||||||
|
<AssemblyVersionSettings>None.Increment.None.None</AssemblyVersionSettings>
|
||||||
|
<AssemblyFileVersionSettings>None.Increment.None.None</AssemblyFileVersionSettings>
|
||||||
|
<AssemblyInfoVersionSettings>None.Increment.None.None</AssemblyInfoVersionSettings>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<ApplicationIcon>Serraniel-64x64.ico</ApplicationIcon>
|
<ApplicationIcon>Serraniel-64x64.ico</ApplicationIcon>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
<PropertyGroup>
|
|
||||||
<StartupObject />
|
|
||||||
</PropertyGroup>
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Reference Include="Microsoft.Bcl.AsyncInterfaces, Version=6.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
<Reference Include="Discord.Net, Version=0.9.6.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Microsoft.Bcl.AsyncInterfaces.6.0.0\lib\net461\Microsoft.Bcl.AsyncInterfaces.dll</HintPath>
|
<HintPath>..\packages\Discord.Net.0.9.6\lib\net45\Discord.Net.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Microsoft.Extensions.DependencyInjection, Version=3.1.6.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
<Reference Include="Newtonsoft.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Microsoft.Extensions.DependencyInjection.3.1.6\lib\net461\Microsoft.Extensions.DependencyInjection.dll</HintPath>
|
<HintPath>..\packages\Newtonsoft.Json.8.0.3\lib\net45\Newtonsoft.Json.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Microsoft.Extensions.DependencyInjection.Abstractions, Version=3.1.6.0, Culture=neutral, PublicKeyToken=adb9793829ddae60, processorArchitecture=MSIL">
|
<Reference Include="Nito.AsyncEx, Version=3.0.1.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Microsoft.Extensions.DependencyInjection.Abstractions.3.1.6\lib\netstandard2.0\Microsoft.Extensions.DependencyInjection.Abstractions.dll</HintPath>
|
<HintPath>..\packages\Nito.AsyncEx.3.0.1\lib\net45\Nito.AsyncEx.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Microsoft.Win32.Primitives, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
<Reference Include="Nito.AsyncEx.Concurrent, Version=3.0.1.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Microsoft.Win32.Primitives.4.3.0\lib\net46\Microsoft.Win32.Primitives.dll</HintPath>
|
<HintPath>..\packages\Nito.AsyncEx.3.0.1\lib\net45\Nito.AsyncEx.Concurrent.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
<Reference Include="Nito.AsyncEx.Enlightenment, Version=3.0.1.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Newtonsoft.Json.12.0.2\lib\net45\Newtonsoft.Json.dll</HintPath>
|
<HintPath>..\packages\Nito.AsyncEx.3.0.1\lib\net45\Nito.AsyncEx.Enlightenment.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Nito.AsyncEx.Context, Version=5.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="Octokit, Version=0.24.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Nito.AsyncEx.Context.5.0.0\lib\netstandard2.0\Nito.AsyncEx.Context.dll</HintPath>
|
<HintPath>..\packages\Octokit.0.24.1-alpha0001\lib\net45\Octokit.dll</HintPath>
|
||||||
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="Nito.AsyncEx.Coordination, Version=5.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
<Reference Include="RestSharp, Version=105.2.3.0, Culture=neutral, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\Nito.AsyncEx.Coordination.5.0.0\lib\netstandard2.0\Nito.AsyncEx.Coordination.dll</HintPath>
|
<HintPath>..\packages\RestSharp.105.2.3\lib\net46\RestSharp.dll</HintPath>
|
||||||
</Reference>
|
<Private>True</Private>
|
||||||
<Reference Include="Nito.AsyncEx.Interop.WaitHandles, Version=5.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\Nito.AsyncEx.Interop.WaitHandles.5.0.0\lib\netstandard2.0\Nito.AsyncEx.Interop.WaitHandles.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Nito.AsyncEx.Oop, Version=5.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\Nito.AsyncEx.Oop.5.0.0\lib\netstandard2.0\Nito.AsyncEx.Oop.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Nito.AsyncEx.Tasks, Version=5.0.0.0, Culture=neutral, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\Nito.AsyncEx.Tasks.5.0.0\lib\netstandard2.0\Nito.AsyncEx.Tasks.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Nito.Cancellation, Version=1.0.5.0, Culture=neutral, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\Nito.Cancellation.1.0.5\lib\netstandard2.0\Nito.Cancellation.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Nito.Collections.Deque, Version=1.0.4.0, Culture=neutral, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\Nito.Collections.Deque.1.0.4\lib\netstandard2.0\Nito.Collections.Deque.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Nito.Disposables, Version=2.1.0.0, Culture=neutral, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\Nito.Disposables.2.1.0\lib\net461\Nito.Disposables.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="Octokit, Version=0.48.0.0, Culture=neutral, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\Octokit.0.48.0\lib\net46\Octokit.dll</HintPath>
|
|
||||||
</Reference>
|
</Reference>
|
||||||
<Reference Include="System" />
|
<Reference Include="System" />
|
||||||
<Reference Include="System.AppContext, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.AppContext.4.3.0\lib\net46\System.AppContext.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Buffers, Version=4.0.3.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Buffers.4.5.1\lib\net461\System.Buffers.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Collections.Immutable, Version=1.2.5.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Collections.Immutable.1.7.1\lib\net461\System.Collections.Immutable.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.ComponentModel.Composition" />
|
|
||||||
<Reference Include="System.Console, Version=4.0.1.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Console.4.3.1\lib\net46\System.Console.dll</HintPath>
|
|
||||||
<Private>True</Private>
|
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Core" />
|
<Reference Include="System.Core" />
|
||||||
<Reference Include="System.Diagnostics.DiagnosticSource, Version=4.0.5.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Diagnostics.DiagnosticSource.4.7.1\lib\net46\System.Diagnostics.DiagnosticSource.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Globalization.Calendars, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Globalization.Calendars.4.3.0\lib\net46\System.Globalization.Calendars.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Interactive.Async, Version=4.0.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Interactive.Async.4.0.0\lib\net461\System.Interactive.Async.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.IO.Compression, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll</HintPath>
|
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.IO.Compression.FileSystem" />
|
|
||||||
<Reference Include="System.IO.Compression.ZipFile, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.IO.Compression.ZipFile.4.3.0\lib\net46\System.IO.Compression.ZipFile.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.IO.FileSystem, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.IO.FileSystem.4.3.0\lib\net46\System.IO.FileSystem.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.IO.FileSystem.Primitives, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.IO.FileSystem.Primitives.4.3.0\lib\net46\System.IO.FileSystem.Primitives.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Linq.Async, Version=4.1.0.0, Culture=neutral, PublicKeyToken=94bc3704cddfc263, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Linq.Async.4.1.1\lib\net461\System.Linq.Async.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Memory, Version=4.0.1.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Memory.4.5.4\lib\net461\System.Memory.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Net.Http, Version=4.1.1.3, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Net.Http.4.3.4\lib\net46\System.Net.Http.dll</HintPath>
|
|
||||||
<Private>True</Private>
|
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Net.Sockets, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Net.Sockets.4.3.0\lib\net46\System.Net.Sockets.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Numerics" />
|
|
||||||
<Reference Include="System.Numerics.Vectors, Version=4.1.4.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Numerics.Vectors.4.5.0\lib\net46\System.Numerics.Vectors.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Runtime.CompilerServices.Unsafe, Version=4.0.6.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Runtime.CompilerServices.Unsafe.4.7.1\lib\net461\System.Runtime.CompilerServices.Unsafe.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>
|
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Security.Cryptography.Algorithms, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Security.Cryptography.Algorithms.4.3.1\lib\net461\System.Security.Cryptography.Algorithms.dll</HintPath>
|
|
||||||
<Private>True</Private>
|
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Security.Cryptography.Encoding, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Security.Cryptography.Primitives, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Security.Cryptography.X509Certificates, Version=4.1.1.2, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Security.Cryptography.X509Certificates.4.3.2\lib\net461\System.Security.Cryptography.X509Certificates.dll</HintPath>
|
|
||||||
<Private>True</Private>
|
|
||||||
<Private>True</Private>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Threading.Tasks.Extensions, Version=4.2.0.1, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
|
||||||
<HintPath>..\packages\System.Threading.Tasks.Extensions.4.5.4\lib\net461\System.Threading.Tasks.Extensions.dll</HintPath>
|
|
||||||
</Reference>
|
|
||||||
<Reference Include="System.Xml.Linq" />
|
<Reference Include="System.Xml.Linq" />
|
||||||
<Reference Include="System.Data.DataSetExtensions" />
|
<Reference Include="System.Data.DataSetExtensions" />
|
||||||
<Reference Include="Microsoft.CSharp" />
|
<Reference Include="Microsoft.CSharp" />
|
||||||
<Reference Include="System.Data" />
|
<Reference Include="System.Data" />
|
||||||
<Reference Include="System.Deployment" />
|
<Reference Include="System.Deployment" />
|
||||||
<Reference Include="System.Drawing" />
|
<Reference Include="System.Drawing" />
|
||||||
|
<Reference Include="System.Net.Http" />
|
||||||
<Reference Include="System.Windows.Forms" />
|
<Reference Include="System.Windows.Forms" />
|
||||||
<Reference Include="System.Xml" />
|
<Reference Include="System.Xml" />
|
||||||
<Reference Include="System.Xml.ReaderWriter, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
<Reference Include="WebSocket4Net, Version=0.14.1.0, Culture=neutral, PublicKeyToken=eb4e154b696bf72a, processorArchitecture=MSIL">
|
||||||
<HintPath>..\packages\System.Xml.ReaderWriter.4.3.1\lib\net46\System.Xml.ReaderWriter.dll</HintPath>
|
<HintPath>..\packages\WebSocket4Net.0.14.1\lib\net45\WebSocket4Net.dll</HintPath>
|
||||||
<Private>True</Private>
|
|
||||||
<Private>True</Private>
|
<Private>True</Private>
|
||||||
</Reference>
|
</Reference>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="FrmDownload.cs">
|
|
||||||
<SubType>Form</SubType>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="FrmDownload.Designer.cs">
|
|
||||||
<DependentUpon>FrmDownload.cs</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="FrmSplash.cs">
|
|
||||||
<SubType>Form</SubType>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="FrmSplash.Designer.cs">
|
|
||||||
<DependentUpon>FrmSplash.cs</DependentUpon>
|
|
||||||
</Compile>
|
|
||||||
<Compile Include="Helper\TaskBarProgress.cs" />
|
|
||||||
<Compile Include="Helper\VersionHelper.cs" />
|
<Compile Include="Helper\VersionHelper.cs" />
|
||||||
|
<Compile Include="LoginForm.cs">
|
||||||
|
<SubType>Form</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="LoginForm.Designer.cs">
|
||||||
|
<DependentUpon>LoginForm.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="MainForm.cs">
|
||||||
|
<SubType>Form</SubType>
|
||||||
|
</Compile>
|
||||||
|
<Compile Include="MainForm.Designer.cs">
|
||||||
|
<DependentUpon>MainForm.cs</DependentUpon>
|
||||||
|
</Compile>
|
||||||
<Compile Include="Program.cs" />
|
<Compile Include="Program.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<EmbeddedResource Include="FrmDownload.resx">
|
<EmbeddedResource Include="LoginForm.resx">
|
||||||
<DependentUpon>FrmDownload.cs</DependentUpon>
|
<DependentUpon>LoginForm.cs</DependentUpon>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="FrmSplash.resx">
|
<EmbeddedResource Include="MainForm.resx">
|
||||||
<DependentUpon>FrmSplash.cs</DependentUpon>
|
<DependentUpon>MainForm.cs</DependentUpon>
|
||||||
</EmbeddedResource>
|
</EmbeddedResource>
|
||||||
<EmbeddedResource Include="Properties\Resources.resx">
|
<EmbeddedResource Include="Properties\Resources.resx">
|
||||||
<Generator>ResXFileCodeGenerator</Generator>
|
<Generator>ResXFileCodeGenerator</Generator>
|
||||||
|
@ -230,24 +134,9 @@
|
||||||
<None Include="App.config" />
|
<None Include="App.config" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="Resources\Serraniel-Logo4-NO-BG.png" />
|
|
||||||
<Content Include="Serraniel-64x64.ico" />
|
<Content Include="Serraniel-64x64.ico" />
|
||||||
<Content Include="Serraniel-Logo4-ABGERUNDET.ico" />
|
|
||||||
</ItemGroup>
|
|
||||||
<ItemGroup>
|
|
||||||
<ProjectReference Include="..\Discord Media Loader.Application\DML.Application.csproj">
|
|
||||||
<Project>{c130de6a-3237-42b5-be9f-783d1cd104c6}</Project>
|
|
||||||
<Name>DML.Application</Name>
|
|
||||||
</ProjectReference>
|
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||||
<Import Project="..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets" Condition="Exists('..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets')" />
|
|
||||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
|
||||||
<PropertyGroup>
|
|
||||||
<ErrorText>Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Verwenden Sie die Wiederherstellung von NuGet-Paketen, um die fehlenden Dateien herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}".</ErrorText>
|
|
||||||
</PropertyGroup>
|
|
||||||
<Error Condition="!Exists('..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\NETStandard.Library.2.0.3\build\netstandard2.0\NETStandard.Library.targets'))" />
|
|
||||||
</Target>
|
|
||||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||||
Other similar extension points exist, see Microsoft.Common.targets.
|
Other similar extension points exist, see Microsoft.Common.targets.
|
||||||
<Target Name="BeforeBuild">
|
<Target Name="BeforeBuild">
|
||||||
|
|
77
Discord Media Loader/FrmDownload.Designer.cs
generated
77
Discord Media Loader/FrmDownload.Designer.cs
generated
|
@ -1,77 +0,0 @@
|
||||||
namespace Discord_Media_Loader
|
|
||||||
{
|
|
||||||
partial class FrmDownload
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Required designer variable.
|
|
||||||
/// </summary>
|
|
||||||
private System.ComponentModel.IContainer components = null;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Clean up any resources being used.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
|
||||||
protected override void Dispose(bool disposing)
|
|
||||||
{
|
|
||||||
if (disposing && (components != null))
|
|
||||||
{
|
|
||||||
components.Dispose();
|
|
||||||
}
|
|
||||||
base.Dispose(disposing);
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Windows Form Designer generated code
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Required method for Designer support - do not modify
|
|
||||||
/// the contents of this method with the code editor.
|
|
||||||
/// </summary>
|
|
||||||
private void InitializeComponent()
|
|
||||||
{
|
|
||||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmDownload));
|
|
||||||
this.pgbProgress = new System.Windows.Forms.ProgressBar();
|
|
||||||
this.lbStatus = new System.Windows.Forms.Label();
|
|
||||||
this.SuspendLayout();
|
|
||||||
//
|
|
||||||
// pgbProgress
|
|
||||||
//
|
|
||||||
this.pgbProgress.Location = new System.Drawing.Point(12, 12);
|
|
||||||
this.pgbProgress.Name = "pgbProgress";
|
|
||||||
this.pgbProgress.Size = new System.Drawing.Size(351, 23);
|
|
||||||
this.pgbProgress.TabIndex = 0;
|
|
||||||
//
|
|
||||||
// lbStatus
|
|
||||||
//
|
|
||||||
this.lbStatus.AutoSize = true;
|
|
||||||
this.lbStatus.Font = new System.Drawing.Font("Microsoft Sans Serif", 8.25F, System.Drawing.FontStyle.Italic, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
|
||||||
this.lbStatus.ForeColor = System.Drawing.SystemColors.ControlDarkDark;
|
|
||||||
this.lbStatus.Location = new System.Drawing.Point(12, 47);
|
|
||||||
this.lbStatus.Name = "lbStatus";
|
|
||||||
this.lbStatus.Size = new System.Drawing.Size(37, 13);
|
|
||||||
this.lbStatus.TabIndex = 1;
|
|
||||||
this.lbStatus.Text = "Status";
|
|
||||||
//
|
|
||||||
// FrmDownload
|
|
||||||
//
|
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
|
||||||
this.ClientSize = new System.Drawing.Size(375, 70);
|
|
||||||
this.ControlBox = false;
|
|
||||||
this.Controls.Add(this.lbStatus);
|
|
||||||
this.Controls.Add(this.pgbProgress);
|
|
||||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
|
||||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
|
||||||
this.Name = "FrmDownload";
|
|
||||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
|
||||||
this.Text = "Discord Media Loader";
|
|
||||||
this.ResumeLayout(false);
|
|
||||||
this.PerformLayout();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
private System.Windows.Forms.ProgressBar pgbProgress;
|
|
||||||
private System.Windows.Forms.Label lbStatus;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,112 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.ComponentModel;
|
|
||||||
using System.Globalization;
|
|
||||||
using System.Net;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
using System.Windows.Forms;
|
|
||||||
|
|
||||||
namespace Discord_Media_Loader
|
|
||||||
{
|
|
||||||
internal partial class FrmDownload : Form
|
|
||||||
{
|
|
||||||
private string FileName { get; }
|
|
||||||
private string Source { get; }
|
|
||||||
private bool Finished { get; set; } = false;
|
|
||||||
|
|
||||||
internal FrmDownload(string fileName, string source)
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
|
|
||||||
FileName = fileName;
|
|
||||||
Source = source;
|
|
||||||
}
|
|
||||||
|
|
||||||
internal void StartDownload(bool waitForDialog = true)
|
|
||||||
{
|
|
||||||
Task.Run(() =>
|
|
||||||
{
|
|
||||||
while (waitForDialog && !Visible) { }
|
|
||||||
|
|
||||||
var wc = new WebClient
|
|
||||||
{
|
|
||||||
CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.NoCacheNoStore)
|
|
||||||
};
|
|
||||||
|
|
||||||
SetStatus($"Downloading {FileName}...");
|
|
||||||
|
|
||||||
SetProgress(0, 100);
|
|
||||||
|
|
||||||
wc.DownloadProgressChanged += Wc_DownloadProgressChanged;
|
|
||||||
wc.DownloadFileCompleted += Wc_DownloadFileCompleted;
|
|
||||||
|
|
||||||
wc.DownloadFileAsync(new Uri(Source), FileName);
|
|
||||||
|
|
||||||
while (!Finished)
|
|
||||||
{
|
|
||||||
// wait for download
|
|
||||||
}
|
|
||||||
|
|
||||||
RequestClose();
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Wc_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
|
|
||||||
{
|
|
||||||
SetStatus("Download finished");
|
|
||||||
Finished = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void Wc_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
|
|
||||||
{
|
|
||||||
var bytesIn = double.Parse(e.BytesReceived.ToString(CultureInfo.InvariantCulture));
|
|
||||||
var totalBytes = double.Parse(e.TotalBytesToReceive.ToString(CultureInfo.InvariantCulture));
|
|
||||||
var percentage = bytesIn / totalBytes * 100;
|
|
||||||
SetProgress(percentage, 100);
|
|
||||||
}
|
|
||||||
|
|
||||||
delegate void SetStatusCallback(String status);
|
|
||||||
private void SetStatus(String status)
|
|
||||||
{
|
|
||||||
if (InvokeRequired)
|
|
||||||
{
|
|
||||||
var callback = new SetStatusCallback(SetStatus);
|
|
||||||
Invoke(callback, status);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
lbStatus.Text = status;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
delegate void SetProgressCallback(double current, int max);
|
|
||||||
private void SetProgress(double current, int max)
|
|
||||||
{
|
|
||||||
if (InvokeRequired)
|
|
||||||
{
|
|
||||||
var callback = new SetProgressCallback(SetProgress);
|
|
||||||
Invoke(callback, current, max);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
pgbProgress.Maximum = max;
|
|
||||||
pgbProgress.Value = (int)current;
|
|
||||||
Helper.TaskBarProgress.SetState(Handle, Helper.TaskBarProgress.TaskbarStates.Normal);
|
|
||||||
Helper.TaskBarProgress.SetValue(Handle, (int)current, max);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
delegate void RequestCloseCallback();
|
|
||||||
private void RequestClose()
|
|
||||||
{
|
|
||||||
if (InvokeRequired)
|
|
||||||
{
|
|
||||||
var callback = new RequestCloseCallback(RequestClose);
|
|
||||||
Invoke(callback, new object[] { });
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
Close();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
81
Discord Media Loader/FrmSplash.Designer.cs
generated
81
Discord Media Loader/FrmSplash.Designer.cs
generated
|
@ -1,81 +0,0 @@
|
||||||
namespace Discord_Media_Loader
|
|
||||||
{
|
|
||||||
partial class FrmSplash
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Required designer variable.
|
|
||||||
/// </summary>
|
|
||||||
private System.ComponentModel.IContainer components = null;
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Clean up any resources being used.
|
|
||||||
/// </summary>
|
|
||||||
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
|
||||||
protected override void Dispose(bool disposing)
|
|
||||||
{
|
|
||||||
if (disposing && (components != null))
|
|
||||||
{
|
|
||||||
components.Dispose();
|
|
||||||
}
|
|
||||||
base.Dispose(disposing);
|
|
||||||
}
|
|
||||||
|
|
||||||
#region Windows Form Designer generated code
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Required method for Designer support - do not modify
|
|
||||||
/// the contents of this method with the code editor.
|
|
||||||
/// </summary>
|
|
||||||
private void InitializeComponent()
|
|
||||||
{
|
|
||||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmSplash));
|
|
||||||
this.lblName = new System.Windows.Forms.Label();
|
|
||||||
this.pbLogo = new System.Windows.Forms.PictureBox();
|
|
||||||
((System.ComponentModel.ISupportInitialize)(this.pbLogo)).BeginInit();
|
|
||||||
this.SuspendLayout();
|
|
||||||
//
|
|
||||||
// lblName
|
|
||||||
//
|
|
||||||
this.lblName.Font = new System.Drawing.Font("Microsoft Sans Serif", 21.75F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
|
|
||||||
this.lblName.Location = new System.Drawing.Point(9, 131);
|
|
||||||
this.lblName.Name = "lblName";
|
|
||||||
this.lblName.Size = new System.Drawing.Size(379, 35);
|
|
||||||
this.lblName.TabIndex = 1;
|
|
||||||
this.lblName.Text = "Discord Media Loader";
|
|
||||||
this.lblName.TextAlign = System.Drawing.ContentAlignment.MiddleCenter;
|
|
||||||
//
|
|
||||||
// pbLogo
|
|
||||||
//
|
|
||||||
this.pbLogo.Image = global::Discord_Media_Loader.Properties.Resources.Serraniel_Logo4_NO_BG;
|
|
||||||
this.pbLogo.Location = new System.Drawing.Point(12, 12);
|
|
||||||
this.pbLogo.Name = "pbLogo";
|
|
||||||
this.pbLogo.Size = new System.Drawing.Size(376, 116);
|
|
||||||
this.pbLogo.SizeMode = System.Windows.Forms.PictureBoxSizeMode.Zoom;
|
|
||||||
this.pbLogo.TabIndex = 0;
|
|
||||||
this.pbLogo.TabStop = false;
|
|
||||||
//
|
|
||||||
// FrmSplash
|
|
||||||
//
|
|
||||||
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
|
||||||
this.BackColor = System.Drawing.Color.White;
|
|
||||||
this.ClientSize = new System.Drawing.Size(400, 175);
|
|
||||||
this.Controls.Add(this.lblName);
|
|
||||||
this.Controls.Add(this.pbLogo);
|
|
||||||
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
|
|
||||||
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
|
||||||
this.Name = "FrmSplash";
|
|
||||||
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
|
||||||
this.Text = "Discord Media Loader";
|
|
||||||
this.Shown += new System.EventHandler(this.FrmSplash_Shown);
|
|
||||||
((System.ComponentModel.ISupportInitialize)(this.pbLogo)).EndInit();
|
|
||||||
this.ResumeLayout(false);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
private System.Windows.Forms.PictureBox pbLogo;
|
|
||||||
private System.Windows.Forms.Label lblName;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,59 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.IO;
|
|
||||||
using System.IO.Compression;
|
|
||||||
using System.Windows.Forms;
|
|
||||||
using Discord_Media_Loader.Helper;
|
|
||||||
|
|
||||||
namespace Discord_Media_Loader
|
|
||||||
{
|
|
||||||
public partial class FrmSplash : Form
|
|
||||||
{
|
|
||||||
public FrmSplash()
|
|
||||||
{
|
|
||||||
InitializeComponent();
|
|
||||||
}
|
|
||||||
|
|
||||||
private async void FrmSplash_Shown(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
UseWaitCursor = true;
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var releaseVersion = await VersionHelper.GetReleaseVersion();
|
|
||||||
if (releaseVersion > VersionHelper.AppVersion)
|
|
||||||
{
|
|
||||||
var tmpFile = Path.GetTempFileName();
|
|
||||||
var downloadManager = new FrmDownload(tmpFile, await VersionHelper.DownloadVersion(releaseVersion));
|
|
||||||
|
|
||||||
downloadManager.StartDownload();
|
|
||||||
downloadManager.ShowDialog();
|
|
||||||
|
|
||||||
var tmpFolder = Path.GetTempFileName();
|
|
||||||
tmpFolder = Path.Combine(Path.GetFullPath(tmpFolder).Replace(Path.GetFileName(tmpFolder), ""), Path.GetFileNameWithoutExtension(tmpFolder));
|
|
||||||
|
|
||||||
var di = Directory.CreateDirectory(tmpFolder);
|
|
||||||
|
|
||||||
ZipFile.ExtractToDirectory(tmpFile, tmpFolder);
|
|
||||||
|
|
||||||
foreach (var f in di.GetFiles())
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var fname = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, f.Name);
|
|
||||||
File.Copy(f.FullName, fname, true);
|
|
||||||
}
|
|
||||||
catch (Exception) { }
|
|
||||||
}
|
|
||||||
|
|
||||||
File.Delete(tmpFile);
|
|
||||||
DialogResult = DialogResult.Cancel;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
finally
|
|
||||||
{
|
|
||||||
UseWaitCursor = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
DialogResult = DialogResult.OK;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,408 +0,0 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
|
||||||
<root>
|
|
||||||
<!--
|
|
||||||
Microsoft ResX Schema
|
|
||||||
|
|
||||||
Version 2.0
|
|
||||||
|
|
||||||
The primary goals of this format is to allow a simple XML format
|
|
||||||
that is mostly human readable. The generation and parsing of the
|
|
||||||
various data types are done through the TypeConverter classes
|
|
||||||
associated with the data types.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
... ado.net/XML headers & schema ...
|
|
||||||
<resheader name="resmimetype">text/microsoft-resx</resheader>
|
|
||||||
<resheader name="version">2.0</resheader>
|
|
||||||
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
|
|
||||||
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
|
|
||||||
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
|
|
||||||
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
|
|
||||||
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
|
|
||||||
<value>[base64 mime encoded serialized .NET Framework object]</value>
|
|
||||||
</data>
|
|
||||||
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
|
||||||
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
|
|
||||||
<comment>This is a comment</comment>
|
|
||||||
</data>
|
|
||||||
|
|
||||||
There are any number of "resheader" rows that contain simple
|
|
||||||
name/value pairs.
|
|
||||||
|
|
||||||
Each data row contains a name, and value. The row also contains a
|
|
||||||
type or mimetype. Type corresponds to a .NET class that support
|
|
||||||
text/value conversion through the TypeConverter architecture.
|
|
||||||
Classes that don't support this are serialized and stored with the
|
|
||||||
mimetype set.
|
|
||||||
|
|
||||||
The mimetype is used for serialized objects, and tells the
|
|
||||||
ResXResourceReader how to depersist the object. This is currently not
|
|
||||||
extensible. For a given mimetype the value must be set accordingly:
|
|
||||||
|
|
||||||
Note - application/x-microsoft.net.object.binary.base64 is the format
|
|
||||||
that the ResXResourceWriter will generate, however the reader can
|
|
||||||
read any of the formats listed below.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.binary.base64
|
|
||||||
value : The object must be serialized with
|
|
||||||
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.soap.base64
|
|
||||||
value : The object must be serialized with
|
|
||||||
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
|
|
||||||
mimetype: application/x-microsoft.net.object.bytearray.base64
|
|
||||||
value : The object must be serialized into a byte array
|
|
||||||
: using a System.ComponentModel.TypeConverter
|
|
||||||
: and then encoded with base64 encoding.
|
|
||||||
-->
|
|
||||||
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
|
|
||||||
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
|
|
||||||
<xsd:element name="root" msdata:IsDataSet="true">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:choice maxOccurs="unbounded">
|
|
||||||
<xsd:element name="metadata">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" use="required" type="xsd:string" />
|
|
||||||
<xsd:attribute name="type" type="xsd:string" />
|
|
||||||
<xsd:attribute name="mimetype" type="xsd:string" />
|
|
||||||
<xsd:attribute ref="xml:space" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="assembly">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:attribute name="alias" type="xsd:string" />
|
|
||||||
<xsd:attribute name="name" type="xsd:string" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="data">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
|
||||||
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
|
|
||||||
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
|
|
||||||
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
|
|
||||||
<xsd:attribute ref="xml:space" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
<xsd:element name="resheader">
|
|
||||||
<xsd:complexType>
|
|
||||||
<xsd:sequence>
|
|
||||||
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
|
|
||||||
</xsd:sequence>
|
|
||||||
<xsd:attribute name="name" type="xsd:string" use="required" />
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
</xsd:choice>
|
|
||||||
</xsd:complexType>
|
|
||||||
</xsd:element>
|
|
||||||
</xsd:schema>
|
|
||||||
<resheader name="resmimetype">
|
|
||||||
<value>text/microsoft-resx</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="version">
|
|
||||||
<value>2.0</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="reader">
|
|
||||||
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</resheader>
|
|
||||||
<resheader name="writer">
|
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</resheader>
|
|
||||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
|
||||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
|
||||||
<value>
|
|
||||||
AAABAAEAQEAAAAEAIAAoQgAAFgAAACgAAABAAAAAgAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
||||||
AAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8b////VP///3////+m////zP//
|
|
||||||
/+T////1//////////r////u////3f///8z///+m////f////1T///8b////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////M////5D////b////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/9v///+Q////M////wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///w3///90////1v//
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
///////////////////////////////////////W////dP///w3///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A2K4AANiuAADYrgAA2K4AANiuAADfswAA////EP//
|
|
||||||
/4D////t////////////////////////////////////////////////9/zq/7XiQ/+340n/w+ho/9Pu
|
|
||||||
kf/m9b//+Pzt///////////////////////////////////////////////////////////t////gf//
|
|
||||||
/xCa2AAAmtgAAJrYAACa2AAAmtgAAJrYAAD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////ANiuAADYrgAA2K4AANiu
|
|
||||||
AAD///8B////Yf///+v//////////////////////////////////////////////////////////+z4
|
|
||||||
z/+a2AD/mtgA/5rYAP+a2AD/mtgA/6TcGf+65VL/3fKo//n98P//////////////////////////////
|
|
||||||
///////////////////////r////Yf///wGa2AAAmtgAAJrYAACa2AAA////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wDYrgAA2K4AANiuAAD///8k////xP//////////////////////////////////////////////////
|
|
||||||
///////////////////h87P/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+n3SD/zOt+//X7
|
|
||||||
5v/////////////////////////////////////////////////////E////I5rYAACa2AAAmtgAAP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A2K4AANiuAAD///9V////8f//////////////////////////////////
|
|
||||||
////////////////////////////////////////0+6Q/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+k3Bn/0e2K//v+9v//////////////////////////////////////////////
|
|
||||||
//H///9VmtgAAJrYAAD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wH///+M////////////////////////
|
|
||||||
/////////////////////////////////////////////////////////////8bpbv+a2AD/mtgA/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+u4DP/5/bD////////////////////
|
|
||||||
/////////////////////////////////4z///8B////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wb///+l////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
//+55E//mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5zZ
|
|
||||||
Bv/P7Ib/////////////////////////////////////////////////////pf///wb///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wb///+3////////////////////////////////////////////////////////////////////////
|
|
||||||
///////////////////+//3/rd8x/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+a2AD/mtgA/7zlV//5/fH/////////////////////////////////////////
|
|
||||||
//////+3////Bv///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wH///+k////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////+f3v/6PcF/+a2AD/mtgA/5rYAP+a2AD/mtgA/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/seE7//X75v//////////////
|
|
||||||
/////////////////////////////////6T///8B////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///+K////////////////////////////////////////
|
|
||||||
/////////////////////////////////////////////////////////////+751f+a2AD/mtgA/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rY
|
|
||||||
AP+s3y7/9Pvi////////////////////////////////////////////////i////wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///9V////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
///s+M//rd8w/6XcHf+c2Qb/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+a2AD/mtgA/6zfLv/1++f/////////////////////////////////////////
|
|
||||||
//////9V////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8j////8P//
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/////////////////////////////////v/6/fL/8PnZ/97yrP/E6Gv/qd4l/5rYAP+a2AD/mtgA/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/suE8//v99P//////////////
|
|
||||||
////////////////////////////8P///yP///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8B////xP//////////////////////////////////////////////////////////////////
|
|
||||||
//////////////////////////////////////////////////////////////////////////////v9
|
|
||||||
9f/e8qz/s+JA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rY
|
|
||||||
AP/A51/////////////////////////////////////////////////E////Af///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////Yf//////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
///////////////////////////////////f867/rN8t/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+a2AD/mtgA/9jwnP//////////////////////////////////////////////
|
|
||||||
/2H///8A////AP///wD///8A////AP///wD///8A////EP///+r/////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
//////////////////////////////////////////////////////////////r98//I6nX/mtgA/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+h2xL/8/rh////////////////////
|
|
||||||
///////////////////////q////Ev///wD///8A////AP///wD///8A////AP///3//////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/////////////9/yrf+h2xL/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/8Dn
|
|
||||||
X////////////////////////////////////////////////4D///8A////AP///wD///8A////AP//
|
|
||||||
/w3////u////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////7PjQ/6reKP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+c2QX/7vjT///////////////////////////////////////////u////Df//
|
|
||||||
/wD///8A////AP///wD///90////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
///////////////////////////////////////////////////////////////////0++L/qd4n/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/8PoaP//////////////////////////////
|
|
||||||
/////////////////3T///8A////AP///wD///8B////2///////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/////////////+360P+k4g3/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP+j2xb/+Pzu////
|
|
||||||
///////////////////////////////////////b////Af///wD///8A////O///////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////wNCY/53dAP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rY
|
|
||||||
AP+a2AD/mtgA/9/zr////////////////////////////////////////////////zv///8A////AP//
|
|
||||||
/5D/////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
//////////////////////////////////////////////////////////////f39/+Puin/n+AA/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+a2AD/mtgA/5rYAP/F6W3/////////////////////////////////////////
|
|
||||||
//////+Q////AP///wD////Y////////////////////////////////////////////////////////
|
|
||||||
/////////////////////////////+3t7f+3t7f/jIyM/3Nzc/9oaGj/a2tr/35+fv+dnZ3/xsbG//Hx
|
|
||||||
8f//////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////iZNy/5zbAP+b2QD/mtgA/5rYAP+a2AD/mtgA/5rYAP+a2AD/s+JA////////////////////
|
|
||||||
////////////////////////////2f///wD///8d////////////////////////////////////////
|
|
||||||
////////////////////////////////////////9fTx/46Pk/9BQUH/Li4u/y4uLv8uLi7/Li4u/y4u
|
|
||||||
Lv8uLi7/Li4u/y4uLv9ERET/fn5+/8rKyv//////////////////////////////////////////////
|
|
||||||
/////////////////////////////4iHjP98qA3/n+AA/5rYAP+a2AD/mtgA/5rYAP+a2AD/mtgA/6ne
|
|
||||||
J/////////////////////////////////////////////////////8e////Vv//////////////////
|
|
||||||
////////////////////////////////////////////////////////+fDL/45/Qv8kJjH/Li4u/y4u
|
|
||||||
Lv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Xl5e/7e3t//+/v7/////////
|
|
||||||
//////////////////////////////////////////////////9vbXX/T2Ig/57fAP+a2QD/mtgA/5rY
|
|
||||||
AP+a2AD/mtgA/5rYAP+l3Bz/////////////////////////////////////////////////////Vv//
|
|
||||||
/4T/////////////////////////////////////////////////////////////////////8+ax/+O5
|
|
||||||
D/92ZBv/JCYx/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4u
|
|
||||||
Lv8uLi7/YGBg/8jIyP/////////////////////////////////////////////////09PT/QkJE/zEz
|
|
||||||
Lf+Mwgb/nd0A/5rYAP+a2AD/mtgA/5rYAP+a2AD/pdwb////////////////////////////////////
|
|
||||||
/////////////////4T///+t////////////////////////////////////////////////////////
|
|
||||||
////////8+ez/9mwB//htQD/dWMb/yQnMf8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4u
|
|
||||||
Lv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/dHR0/97e3v//////////////////////////////
|
|
||||||
////////r6+v/y4uLv8nIzH/bZET/6HiAP+a2AD/mtgA/5rYAP+a2AD/mtgA/6neJv//////////////
|
|
||||||
//////////////////////////////////////+t////zP//////////////////////////////////
|
|
||||||
////////////////////////+PHS/9qyDv/YrgD/4rUA/3lmGf8kJjH/Li4u/y4uLv8uLi7/Li4u/y4u
|
|
||||||
Lv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Ozs7/1ZWVv90dHT/jo6O/5mZmf/Hx8f//v7+////
|
|
||||||
////////////////////////7+/v/0dHR/8uLi7/KCUw/1BkH/+f4AD/mtgA/5rYAP+a2AD/mtgA/5rY
|
|
||||||
AP+z4T7/////////////////////////////////////////////////////zP///+X/////////////
|
|
||||||
/////////////////////////////////////////v35/+C/N//YrgD/2K4A/+O2AP+Dbhf/IyYx/y4u
|
|
||||||
Lv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/1VVVf+QkJD/xsbG/+rq6v//////////////
|
|
||||||
////////////////////////////////////////+vr6/2tra/8uLi7/Li4u/yspL/86Qij/ltEC/5va
|
|
||||||
AP+a2AD/mtgA/5rYAP+a2AD/x+ly////////////////////////////////////////////////////
|
|
||||||
/+D////y//////////////////////////////////////////////////////Dfm//YrgD/2K4A/9iu
|
|
||||||
AP/itQD/k3oT/yUnMf8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/cHBw/8bGxv/8/Pz/////////
|
|
||||||
////////////////////////////////////////////////////////7+/v/3BwcP8uLi7/Li4u/y4u
|
|
||||||
Lv8tLC7/Ly8u/4e7CP+e3gD/mtgA/5rYAP+a2AD/mtgA/+X1vf//////////////////////////////
|
|
||||||
///////////////////////s//////////////////////////////////////////////////////79
|
|
||||||
+f/euyr/2K4A/9iuAP/YrgD/4LQA/6iKDf8oKTD/Li4u/y4uLv8uLi7/Li4u/y4uLv9QUFD/xMTE////
|
|
||||||
////////////////////////////////////////////////////////////////////////w8PD/1BQ
|
|
||||||
UP8uLi7/Li4u/y4uLv8uLi7/Li4u/yknMP95pA7/n+EA/5rYAP+a2AD/mtgA/6neJ//8/vj/////////
|
|
||||||
////////////////////////////////////////////+f//////////////////////////////////
|
|
||||||
///////////////////168D/2K4A/9iuAP/YrgD/2K4A/92yAP+/mwf/MTAt/ywtLv8uLi7/Li4u/y4u
|
|
||||||
Lv9wcHD/8PDw//////////////////////////////////////////////////////////////////r6
|
|
||||||
+v/ExMT/bm5u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8oJDH/a44U/6HiAP+a2AD/mtgA/5rY
|
|
||||||
AP/W75j///////////////////////////////////////////////////////////n////y////////
|
|
||||||
////////////////////////////////////////6tR3/9iuAP/YrgD/2K4A/9iuAP/arwD/06oB/0VA
|
|
||||||
J/8pKi//Li4u/y4uLv9ra2v/+vr6//////////////////////////////////////////////////39
|
|
||||||
/f/n5+f/wsLC/4yMjP9SUlL/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/JyMx/2F+
|
|
||||||
GP+h4wD/mtgA/5rYAP+v4DX//P74////////////////////////////////////////////////////
|
|
||||||
///////s////5f///////////////////////////////////////////////+LDQv/YrgD/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/+C0AP9oWh7/JCcx/y4uLv9GRkb/7u7u/////////////////////////////v7+/8fH
|
|
||||||
x/+VlZX/iYmJ/3BwcP9TU1P/OTk5/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4u
|
|
||||||
Lv8uLi7/Li4u/ygkMf9bdRv/oOEA/5rYAP+g2g7/7fjR////////////////////////////////////
|
|
||||||
////////////////////////////4P///8z/////////////////////////////////////////////
|
|
||||||
///euyj/2K4A/9iuAP/YrgD/2K4A/9iuAP/itQD/ln0S/yQnMf8uLi7/ra2t////////////////////
|
|
||||||
///////////////////i4uL/e3t7/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4u
|
|
||||||
Lv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8oJDH/WXEc/6DhAP+d2Qf/4fOy////////////////////
|
|
||||||
/////////////////////////////////////////////////8z///+t////////////////////////
|
|
||||||
////////////////////////3Lcc/9iuAP/YrgD/2K4A/9iuAP/YrgD/3LEA/8agBf82NCz/Pj9C//T0
|
|
||||||
9P/////////////////////////////////////////////////Ozs7/ZmZm/y4uLv8uLi7/Li4u/y4u
|
|
||||||
Lv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/KCQx/1pzHP+m4w//4POx////
|
|
||||||
//////////////////////////////////////////////////////////////////////+t////hP//
|
|
||||||
/////////////////////////////////////////////9y3Hf/YrgD/2K4A/9iuAP/YrgD/2K4A/9iu
|
|
||||||
AP/gtAD/Z1ke/2lrcv//////////////////////////////////////////////////////////////
|
|
||||||
//++vr7/ZGRk/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/y4uLv8uLi7/Li4u/ygk
|
|
||||||
Mf93i0X/7PnL////////////////////////////////////////////////////////////////////
|
|
||||||
////////////hP///1T////////////////////////////////////////////////euyr/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/9iuAP/YrgD/4LQA/66OC/+Dg4b/////////////////////////////////////////
|
|
||||||
///////////////////////////////////Pz8//hISE/0hISP8uLi7/Li4u/y4uLv8uLi7/Li4u/y4u
|
|
||||||
Lv8uLi7/Li4u/0JCQv+RkJX/9PXy////////////////////////////////////////////////////
|
|
||||||
/////////////////////////////////1b///8c////////////////////////////////////////
|
|
||||||
////////48RG/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9mvAP/dsgD/kopq////////////////////
|
|
||||||
///////////////////////////////////////////////////////////////////09PT/y8vL/6Ki
|
|
||||||
ov+Dg4P/cXFx/21tbf94eHj/kJCQ/7q6uv/v7+//////////////////////////////////////////
|
|
||||||
//////////////////////////////////////////////////////8d////AP///9f/////////////
|
|
||||||
/////////////////////////////+rTdP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/4LQA/72f
|
|
||||||
Iv/09PT/////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
///////////////////////////////////////////////////////////////////////Y////AP//
|
|
||||||
/wD///+P///////////////////////////////////////////06Lb/2K4A/9iuAP/YrgD/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/9iuAP/esgD/zsKO////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////kP///wD///8A////Ov///////////////////////////////////////////fvx/9y2
|
|
||||||
Gv/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/+G3Cf/578j/////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/////////////////////////////////zr///8A////AP///wH////a////////////////////////
|
|
||||||
///////////////////p0nD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/3bgh//r0
|
|
||||||
3P//////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/////////////////////////////////////////////////9v///8B////AP///wD///8A////dP//
|
|
||||||
////////////////////////////////////////+fPZ/9mxCP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/9iuAP/duCH/9+7I////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
//////////////////////////////////////////////////////////////////////90////AP//
|
|
||||||
/wD///8A////AP///wz////t///////////////////////////////////////////oz2n/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9qyDf/x4qT/////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
///////t////Df///wD///8A////AP///wD///8A////f///////////////////////////////////
|
|
||||||
////////+/fm/9u1Fv/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/+nQ
|
|
||||||
bP/8+u7/////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////f////wD///8A////AP///wD///8A////AP///xD////q////////
|
|
||||||
///////////////////////////////////x4qX/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/9iuAP/YrgD/3ron//Hipf///v3/////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////6v///xD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////YP///////////////////////////////////////////////+jPaf/YrgD/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/4cA5//HipP/9+/H/////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/////////////////////////////////////////////////////////////////2H///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wH////D////////////////////////////////////////
|
|
||||||
///+/fj/4sRE/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iu
|
|
||||||
AP/YrgD/3bgf/+fNY//x4qX/+PHT//367//+/vv////+////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/8P///8B////AP///wD///8A////AP///wD///8A////AP///wD///8A////Iv////D/////////////
|
|
||||||
//////////////////////////////z57f/gvzX/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9ivA//cthj/37wr//fuyv//////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
//////////////////D///8i////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///9U////////////////////////////////////////////////+/jo/+C/Nf/YrgD/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iu
|
|
||||||
AP/48NH/////////////////////////////////////////////////////////////////////////
|
|
||||||
//////////////////////////////////////9V////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///4j/////////////////////////////////////////////
|
|
||||||
///8+ev/4sND/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/9iuAP/btBP//Pns////////////////////////////////////////////////////
|
|
||||||
//////////////////////////////////////////////////////+J////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8B////pP//////////////////
|
|
||||||
//////////////////////////////789v/nzGD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/37wt///+/P//////////////////////////////
|
|
||||||
//////////////////////////////////////////////////////////////////////+k////Af//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wb///+3/////////////////////////////////////////////////////+7bj//asQr/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/+PGSv//////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
//////+3////Bv///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////Bv///6X/////////////////////////////////////////////
|
|
||||||
////////9+7K/+HBO//YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A/9iu
|
|
||||||
AP/oz2n/////////////////////////////////////////////////////////////////////////
|
|
||||||
//////////////////////+l////Bv///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8B////jP//////////////////
|
|
||||||
///////////////////////////////////+/fr/7t2T/924Hv/YrgD/2K4A/9iuAP/YrgD/2K4A/9iu
|
|
||||||
AP/YrgD/2K4A/9iuAP/YrgD/7dqL////////////////////////////////////////////////////
|
|
||||||
//////////////////////////////////////+M////Af///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A2K4AANiu
|
|
||||||
AAD///9V////8f/////////////////////////////////////////////////////8+ev/7dmH/966
|
|
||||||
Jv/YrgD/2K4A/9iuAP/YrgD/2K4A/9iuAP/YrgD/2K4A//Plrv//////////////////////////////
|
|
||||||
//////////////////////////////////////////////////H///9VmtgAAJrYAAD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////ANiuAADYrgAA2K4AAP///yT////E////////////////////////////////////////
|
|
||||||
///////////////////9/PT/8+av/+bLWv/duB7/2K4A/9iuAP/YrgD/2K4A/9iuAP/37sv/////////
|
|
||||||
/////////////////////////////////////////////////////////////////8T///8jmtgAAJrY
|
|
||||||
AACa2AAA////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wDYrgAA2K4AANiuAADYrgAA////Af///2D////r////////
|
|
||||||
/////////////////////////////////////////////////////////fvx//btxv/v3pf/6dJw/+TH
|
|
||||||
T//jxEX/+/jo////////////////////////////////////////////////////////////////6///
|
|
||||||
/2D///8BmtgAAJrYAACa2AAAmtgAAP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////EP///3/////t////////////////////////////////////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
///////t////f////xD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////Df///3T////V////////////////////////
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
|
||||||
/////////////////9X///90////Df///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/zP///+N////1///////////////////////////////////////////////////////////////////
|
|
||||||
///////////////////////X////jf///zP///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8b////VP///33///+l////y////+P////y////////
|
|
||||||
///////y////4////8v///+l////ff///1T///8b////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//
|
|
||||||
/wD///8A////4Af///////wAAD//////8AAAD/////+AAAAB/////wAAAAD////8AAAAAD////gAAAAA
|
|
||||||
H///4AAAAAAH///AAAAAAAP//4AAAAAAAf//AAAAAAAA//4AAAAAAAB//gAAAAAAAH/8AAAAAAAAP/gA
|
|
||||||
AAAAAAAf+AAAAAAAAB/wAAAAAAAAD/AAAAAAAAAH4AAAAAAAAAfgAAAAAAAAB8AAAAAAAAADwAAAAAAA
|
|
||||||
AAOAAAAAAAAAAYAAAAAAAAABgAAAAAAAAAGAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
||||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
|
||||||
AAAAAAAAAAAAAIAAAAAAAAABgAAAAAAAAAGAAAAAAAAAAYAAAAAAAAABwAAAAAAAAAPAAAAAAAAAA+AA
|
|
||||||
AAAAAAAH4AAAAAAAAAfwAAAAAAAAD/AAAAAAAAAP+AAAAAAAAB/4AAAAAAAAH/wAAAAAAAA//gAAAAAA
|
|
||||||
AH/+AAAAAAAAf/8AAAAAAAD//4AAAAAAAf//wAAAAAAD///gAAAAAAf///gAAAAAH////AAAAAA/////
|
|
||||||
AAAAAP/////AAAAD//////AAAA///////AAAP///////4Af///8=
|
|
||||||
</value>
|
|
||||||
</data>
|
|
||||||
</root>
|
|
|
@ -1,65 +0,0 @@
|
||||||
using System;
|
|
||||||
using System.Runtime.InteropServices;
|
|
||||||
|
|
||||||
namespace Discord_Media_Loader.Helper
|
|
||||||
{
|
|
||||||
internal static class TaskBarProgress
|
|
||||||
{
|
|
||||||
internal enum TaskbarStates
|
|
||||||
{
|
|
||||||
NoProgress = 0,
|
|
||||||
Indeterminate = 0x1,
|
|
||||||
Normal = 0x2,
|
|
||||||
Error = 0x4,
|
|
||||||
Paused = 0x8
|
|
||||||
}
|
|
||||||
|
|
||||||
[ComImport]
|
|
||||||
[Guid("ea1afb91-9e28-4b86-90e9-9e9f8a5eefaf")]
|
|
||||||
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
|
|
||||||
private interface ITaskbarList3
|
|
||||||
{
|
|
||||||
// ITaskbarList
|
|
||||||
[PreserveSig]
|
|
||||||
void HrInit();
|
|
||||||
[PreserveSig]
|
|
||||||
void AddTab(IntPtr hwnd);
|
|
||||||
[PreserveSig]
|
|
||||||
void DeleteTab(IntPtr hwnd);
|
|
||||||
[PreserveSig]
|
|
||||||
void ActivateTab(IntPtr hwnd);
|
|
||||||
[PreserveSig]
|
|
||||||
void SetActiveAlt(IntPtr hwnd);
|
|
||||||
|
|
||||||
// ITaskbarList2
|
|
||||||
[PreserveSig]
|
|
||||||
void MarkFullscreenWindow(IntPtr hwnd, [MarshalAs(UnmanagedType.Bool)] bool fFullscreen);
|
|
||||||
|
|
||||||
// ITaskbarList3
|
|
||||||
[PreserveSig]
|
|
||||||
void SetProgressValue(IntPtr hwnd, UInt64 ullCompleted, UInt64 ullTotal);
|
|
||||||
[PreserveSig]
|
|
||||||
void SetProgressState(IntPtr hwnd, TaskbarStates state);
|
|
||||||
}
|
|
||||||
|
|
||||||
[Guid("56FDF344-FD6D-11d0-958A-006097C9A090")]
|
|
||||||
[ClassInterface(ClassInterfaceType.None)]
|
|
||||||
[ComImport]
|
|
||||||
private class TaskbarInstance
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
private static ITaskbarList3 taskbarInstance = (ITaskbarList3)new TaskbarInstance();
|
|
||||||
private static bool taskbarSupported = Environment.OSVersion.Version >= new Version(6, 1);
|
|
||||||
|
|
||||||
internal static void SetState(IntPtr windowHandle, TaskbarStates taskbarState)
|
|
||||||
{
|
|
||||||
if (taskbarSupported) taskbarInstance.SetProgressState(windowHandle, taskbarState);
|
|
||||||
}
|
|
||||||
|
|
||||||
internal static void SetValue(IntPtr windowHandle, double progressValue, double progressMax)
|
|
||||||
{
|
|
||||||
if (taskbarSupported) taskbarInstance.SetProgressValue(windowHandle, (ulong)progressValue, (ulong)progressMax);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,7 +1,12 @@
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using System.Net;
|
||||||
|
using System.Net.Http;
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
|
using System.Text;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Newtonsoft.Json.Linq;
|
||||||
using Octokit;
|
using Octokit;
|
||||||
|
|
||||||
namespace Discord_Media_Loader.Helper
|
namespace Discord_Media_Loader.Helper
|
||||||
|
@ -10,30 +15,32 @@ namespace Discord_Media_Loader.Helper
|
||||||
{
|
{
|
||||||
internal static Version CurrentVersion => Assembly.GetExecutingAssembly().GetName().Version;
|
internal static Version CurrentVersion => Assembly.GetExecutingAssembly().GetName().Version;
|
||||||
|
|
||||||
internal static Version AppVersion => AssemblyName.GetAssemblyName("Discord Media Loader.Application.dll").Version;
|
internal static async Task<Version> GetLatestReleaseVersion()
|
||||||
|
|
||||||
internal static async Task<Version> GetReleaseVersion()
|
|
||||||
{
|
{
|
||||||
var github = new GitHubClient(new ProductHeaderValue("DiscordMedialLoader"));
|
var github = new GitHubClient(new ProductHeaderValue("DiscordMediaLoader"));
|
||||||
|
|
||||||
var tag =
|
var tag =
|
||||||
(await github.Repository.Release.GetAll("Serraniel", "DiscordMediaLoader")).Where(x => x.Prerelease == false).OrderByDescending(x => x.CreatedAt).First().TagName.Replace("v", "") ?? "";
|
(await github.Repository.Release.GetAll("Serraniel", "DiscordMediaLoader")).OrderBy(x => x.CreatedAt).First().TagName.Replace("v", "") ?? "";
|
||||||
|
|
||||||
var version = new Version(tag);
|
var version = new Version(tag);
|
||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static async Task<string> DownloadLatestReleaseVersion()
|
internal static async Task<string> DownloadLatestReleaseVersion()
|
||||||
{
|
{
|
||||||
return await DownloadVersion(await GetReleaseVersion());
|
return await DownloadReleaseVersion(await GetLatestReleaseVersion());
|
||||||
}
|
}
|
||||||
|
|
||||||
internal static async Task<string> DownloadVersion(Version version)
|
internal static async Task<string> DownloadReleaseVersion(Version version)
|
||||||
{
|
{
|
||||||
var github = new GitHubClient(new ProductHeaderValue("DiscordMediaLoader"));
|
var github = new GitHubClient(new ProductHeaderValue("DiscordMediaLoader"));
|
||||||
var releaseVersion = (from release in (await github.Repository.Release.GetAll("Serraniel", "DiscordMediaLoader")) where release.TagName == $"v{version.Major}.{version.Minor}.{version.Build}.{version.Revision}" select release).First();
|
var releaseVersion = (from release in (await github.Repository.Release.GetAll("Serraniel", "DiscordMediaLoader")) where release.TagName == $"v{version.Major}.{version.Minor}.{version.Build}.{version.Revision}" select release).First();
|
||||||
|
//where release.TagName == $"v{version.Major}.{version.Minor}.{version.Revision}.{version.Build}"
|
||||||
return releaseVersion.Assets.FirstOrDefault()?.BrowserDownloadUrl;
|
/*var r = releases.ElementAt(0);
|
||||||
|
if (r.TagName == $"v{version.Major}.{version.Minor}.{version.Build}.{version.Revision}")
|
||||||
|
{
|
||||||
|
var releaseVersion = releases.First();
|
||||||
|
return releaseVersion.Url;
|
||||||
|
}*/
|
||||||
|
return releaseVersion.ZipballUrl;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
127
Discord Media Loader/LoginForm.Designer.cs
generated
Normal file
127
Discord Media Loader/LoginForm.Designer.cs
generated
Normal file
|
@ -0,0 +1,127 @@
|
||||||
|
namespace Discord_Media_Loader
|
||||||
|
{
|
||||||
|
partial class LoginForm
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Windows Form Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(LoginForm));
|
||||||
|
this.lbEmail = new System.Windows.Forms.Label();
|
||||||
|
this.lbPassword = new System.Windows.Forms.Label();
|
||||||
|
this.tbxEmail = new System.Windows.Forms.TextBox();
|
||||||
|
this.tbxPassword = new System.Windows.Forms.TextBox();
|
||||||
|
this.btnLogin = new System.Windows.Forms.Button();
|
||||||
|
this.btnAbort = new System.Windows.Forms.Button();
|
||||||
|
this.SuspendLayout();
|
||||||
|
//
|
||||||
|
// lbEmail
|
||||||
|
//
|
||||||
|
this.lbEmail.AutoSize = true;
|
||||||
|
this.lbEmail.Location = new System.Drawing.Point(12, 9);
|
||||||
|
this.lbEmail.Name = "lbEmail";
|
||||||
|
this.lbEmail.Size = new System.Drawing.Size(35, 13);
|
||||||
|
this.lbEmail.TabIndex = 0;
|
||||||
|
this.lbEmail.Text = "Email:";
|
||||||
|
//
|
||||||
|
// lbPassword
|
||||||
|
//
|
||||||
|
this.lbPassword.AutoSize = true;
|
||||||
|
this.lbPassword.Location = new System.Drawing.Point(12, 35);
|
||||||
|
this.lbPassword.Name = "lbPassword";
|
||||||
|
this.lbPassword.Size = new System.Drawing.Size(56, 13);
|
||||||
|
this.lbPassword.TabIndex = 1;
|
||||||
|
this.lbPassword.Text = "Password:";
|
||||||
|
//
|
||||||
|
// tbxEmail
|
||||||
|
//
|
||||||
|
this.tbxEmail.Location = new System.Drawing.Point(79, 6);
|
||||||
|
this.tbxEmail.Name = "tbxEmail";
|
||||||
|
this.tbxEmail.Size = new System.Drawing.Size(204, 20);
|
||||||
|
this.tbxEmail.TabIndex = 2;
|
||||||
|
this.tbxEmail.KeyUp += new System.Windows.Forms.KeyEventHandler(this.tbx_KeyUp);
|
||||||
|
//
|
||||||
|
// tbxPassword
|
||||||
|
//
|
||||||
|
this.tbxPassword.Location = new System.Drawing.Point(79, 32);
|
||||||
|
this.tbxPassword.Name = "tbxPassword";
|
||||||
|
this.tbxPassword.PasswordChar = '•';
|
||||||
|
this.tbxPassword.Size = new System.Drawing.Size(204, 20);
|
||||||
|
this.tbxPassword.TabIndex = 3;
|
||||||
|
this.tbxPassword.KeyUp += new System.Windows.Forms.KeyEventHandler(this.tbx_KeyUp);
|
||||||
|
//
|
||||||
|
// btnLogin
|
||||||
|
//
|
||||||
|
this.btnLogin.Location = new System.Drawing.Point(127, 78);
|
||||||
|
this.btnLogin.Name = "btnLogin";
|
||||||
|
this.btnLogin.Size = new System.Drawing.Size(75, 23);
|
||||||
|
this.btnLogin.TabIndex = 4;
|
||||||
|
this.btnLogin.Text = "&Login";
|
||||||
|
this.btnLogin.UseVisualStyleBackColor = true;
|
||||||
|
this.btnLogin.Click += new System.EventHandler(this.btnLogin_Click);
|
||||||
|
//
|
||||||
|
// btnAbort
|
||||||
|
//
|
||||||
|
this.btnAbort.Location = new System.Drawing.Point(208, 78);
|
||||||
|
this.btnAbort.Name = "btnAbort";
|
||||||
|
this.btnAbort.Size = new System.Drawing.Size(75, 23);
|
||||||
|
this.btnAbort.TabIndex = 5;
|
||||||
|
this.btnAbort.Text = "&Abort";
|
||||||
|
this.btnAbort.UseVisualStyleBackColor = true;
|
||||||
|
this.btnAbort.Click += new System.EventHandler(this.btnAbort_Click);
|
||||||
|
//
|
||||||
|
// LoginForm
|
||||||
|
//
|
||||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
|
this.ClientSize = new System.Drawing.Size(296, 114);
|
||||||
|
this.Controls.Add(this.btnAbort);
|
||||||
|
this.Controls.Add(this.btnLogin);
|
||||||
|
this.Controls.Add(this.tbxPassword);
|
||||||
|
this.Controls.Add(this.tbxEmail);
|
||||||
|
this.Controls.Add(this.lbPassword);
|
||||||
|
this.Controls.Add(this.lbEmail);
|
||||||
|
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
||||||
|
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||||
|
this.MaximizeBox = false;
|
||||||
|
this.MinimizeBox = false;
|
||||||
|
this.Name = "LoginForm";
|
||||||
|
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||||
|
this.Text = "Login";
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
this.PerformLayout();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private System.Windows.Forms.Label lbEmail;
|
||||||
|
private System.Windows.Forms.Label lbPassword;
|
||||||
|
private System.Windows.Forms.TextBox tbxEmail;
|
||||||
|
private System.Windows.Forms.TextBox tbxPassword;
|
||||||
|
private System.Windows.Forms.Button btnLogin;
|
||||||
|
private System.Windows.Forms.Button btnAbort;
|
||||||
|
}
|
||||||
|
}
|
47
Discord Media Loader/LoginForm.cs
Normal file
47
Discord Media Loader/LoginForm.cs
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
using System;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using Discord_Media_Loader.Helper;
|
||||||
|
|
||||||
|
namespace Discord_Media_Loader
|
||||||
|
{
|
||||||
|
public partial class LoginForm : Form
|
||||||
|
{
|
||||||
|
public static bool Exec(ref string email, out string password)
|
||||||
|
{
|
||||||
|
var loginForm = new LoginForm { tbxEmail = { Text = email } };
|
||||||
|
password = "";
|
||||||
|
|
||||||
|
if (loginForm.ShowDialog() == DialogResult.OK)
|
||||||
|
{
|
||||||
|
email = loginForm.tbxEmail.Text;
|
||||||
|
password = loginForm.tbxPassword.Text;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LoginForm()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnAbort_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
DialogResult = DialogResult.Abort;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnLogin_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
DialogResult = DialogResult.OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void tbx_KeyUp(object sender, KeyEventArgs e)
|
||||||
|
{
|
||||||
|
if (e.KeyCode == Keys.Return)
|
||||||
|
DialogResult = DialogResult.OK;
|
||||||
|
else if (e.KeyCode == Keys.Escape)
|
||||||
|
DialogResult = DialogResult.Abort;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
312
Discord Media Loader/MainForm.Designer.cs
generated
Normal file
312
Discord Media Loader/MainForm.Designer.cs
generated
Normal file
|
@ -0,0 +1,312 @@
|
||||||
|
namespace Discord_Media_Loader
|
||||||
|
{
|
||||||
|
partial class MainForm
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Required designer variable.
|
||||||
|
/// </summary>
|
||||||
|
private System.ComponentModel.IContainer components = null;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Clean up any resources being used.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
|
||||||
|
protected override void Dispose(bool disposing)
|
||||||
|
{
|
||||||
|
if (disposing && (components != null))
|
||||||
|
{
|
||||||
|
components.Dispose();
|
||||||
|
}
|
||||||
|
base.Dispose(disposing);
|
||||||
|
}
|
||||||
|
|
||||||
|
#region Windows Form Designer generated code
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Required method for Designer support - do not modify
|
||||||
|
/// the contents of this method with the code editor.
|
||||||
|
/// </summary>
|
||||||
|
private void InitializeComponent()
|
||||||
|
{
|
||||||
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
|
||||||
|
this.lbPath = new System.Windows.Forms.Label();
|
||||||
|
this.btnSearch = new System.Windows.Forms.Button();
|
||||||
|
this.tbxPath = new System.Windows.Forms.TextBox();
|
||||||
|
this.dtpLimit = new System.Windows.Forms.DateTimePicker();
|
||||||
|
this.btnDownload = new System.Windows.Forms.Button();
|
||||||
|
this.cbLimitDate = new System.Windows.Forms.CheckBox();
|
||||||
|
this.lbThread = new System.Windows.Forms.Label();
|
||||||
|
this.cbChannels = new System.Windows.Forms.ComboBox();
|
||||||
|
this.nupThreadCount = new System.Windows.Forms.NumericUpDown();
|
||||||
|
this.lbChannel = new System.Windows.Forms.Label();
|
||||||
|
this.lbScanCount = new System.Windows.Forms.Label();
|
||||||
|
this.lbUsername = new System.Windows.Forms.Label();
|
||||||
|
this.lbDownload = new System.Windows.Forms.Label();
|
||||||
|
this.cbGuilds = new System.Windows.Forms.ComboBox();
|
||||||
|
this.lbGuild = new System.Windows.Forms.Label();
|
||||||
|
this.cbSkip = new System.Windows.Forms.CheckBox();
|
||||||
|
this.lbCopyright = new System.Windows.Forms.Label();
|
||||||
|
this.lbGithub = new System.Windows.Forms.LinkLabel();
|
||||||
|
this.lbAbout = new System.Windows.Forms.LinkLabel();
|
||||||
|
this.lbVersion = new System.Windows.Forms.LinkLabel();
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.nupThreadCount)).BeginInit();
|
||||||
|
this.SuspendLayout();
|
||||||
|
//
|
||||||
|
// lbPath
|
||||||
|
//
|
||||||
|
this.lbPath.AutoSize = true;
|
||||||
|
this.lbPath.Location = new System.Drawing.Point(12, 110);
|
||||||
|
this.lbPath.Name = "lbPath";
|
||||||
|
this.lbPath.Size = new System.Drawing.Size(32, 13);
|
||||||
|
this.lbPath.TabIndex = 8;
|
||||||
|
this.lbPath.Text = "Path:";
|
||||||
|
//
|
||||||
|
// btnSearch
|
||||||
|
//
|
||||||
|
this.btnSearch.Location = new System.Drawing.Point(403, 105);
|
||||||
|
this.btnSearch.Name = "btnSearch";
|
||||||
|
this.btnSearch.Size = new System.Drawing.Size(25, 23);
|
||||||
|
this.btnSearch.TabIndex = 9;
|
||||||
|
this.btnSearch.Text = "...";
|
||||||
|
this.btnSearch.UseVisualStyleBackColor = true;
|
||||||
|
this.btnSearch.Click += new System.EventHandler(this.btnSearch_Click);
|
||||||
|
//
|
||||||
|
// tbxPath
|
||||||
|
//
|
||||||
|
this.tbxPath.Location = new System.Drawing.Point(50, 107);
|
||||||
|
this.tbxPath.Name = "tbxPath";
|
||||||
|
this.tbxPath.Size = new System.Drawing.Size(342, 20);
|
||||||
|
this.tbxPath.TabIndex = 7;
|
||||||
|
//
|
||||||
|
// dtpLimit
|
||||||
|
//
|
||||||
|
this.dtpLimit.Format = System.Windows.Forms.DateTimePickerFormat.Short;
|
||||||
|
this.dtpLimit.Location = new System.Drawing.Point(158, 70);
|
||||||
|
this.dtpLimit.Name = "dtpLimit";
|
||||||
|
this.dtpLimit.Size = new System.Drawing.Size(95, 20);
|
||||||
|
this.dtpLimit.TabIndex = 6;
|
||||||
|
//
|
||||||
|
// btnDownload
|
||||||
|
//
|
||||||
|
this.btnDownload.Location = new System.Drawing.Point(12, 167);
|
||||||
|
this.btnDownload.Name = "btnDownload";
|
||||||
|
this.btnDownload.Size = new System.Drawing.Size(415, 23);
|
||||||
|
this.btnDownload.TabIndex = 20;
|
||||||
|
this.btnDownload.Text = "Start downloading";
|
||||||
|
this.btnDownload.UseVisualStyleBackColor = true;
|
||||||
|
this.btnDownload.Click += new System.EventHandler(this.btnDownload_Click);
|
||||||
|
//
|
||||||
|
// cbLimitDate
|
||||||
|
//
|
||||||
|
this.cbLimitDate.AutoSize = true;
|
||||||
|
this.cbLimitDate.Checked = true;
|
||||||
|
this.cbLimitDate.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||||
|
this.cbLimitDate.Location = new System.Drawing.Point(15, 73);
|
||||||
|
this.cbLimitDate.Name = "cbLimitDate";
|
||||||
|
this.cbLimitDate.Size = new System.Drawing.Size(137, 17);
|
||||||
|
this.cbLimitDate.TabIndex = 5;
|
||||||
|
this.cbLimitDate.Text = "Only media posted after";
|
||||||
|
this.cbLimitDate.UseVisualStyleBackColor = true;
|
||||||
|
this.cbLimitDate.CheckedChanged += new System.EventHandler(this.cbLimitDate_CheckedChanged);
|
||||||
|
//
|
||||||
|
// lbThread
|
||||||
|
//
|
||||||
|
this.lbThread.AutoSize = true;
|
||||||
|
this.lbThread.Location = new System.Drawing.Point(12, 141);
|
||||||
|
this.lbThread.Name = "lbThread";
|
||||||
|
this.lbThread.Size = new System.Drawing.Size(64, 13);
|
||||||
|
this.lbThread.TabIndex = 11;
|
||||||
|
this.lbThread.Text = "Thread limit:";
|
||||||
|
//
|
||||||
|
// cbChannels
|
||||||
|
//
|
||||||
|
this.cbChannels.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||||
|
this.cbChannels.FormattingEnabled = true;
|
||||||
|
this.cbChannels.Location = new System.Drawing.Point(279, 32);
|
||||||
|
this.cbChannels.Name = "cbChannels";
|
||||||
|
this.cbChannels.Size = new System.Drawing.Size(149, 21);
|
||||||
|
this.cbChannels.TabIndex = 4;
|
||||||
|
//
|
||||||
|
// nupThreadCount
|
||||||
|
//
|
||||||
|
this.nupThreadCount.Location = new System.Drawing.Point(82, 139);
|
||||||
|
this.nupThreadCount.Name = "nupThreadCount";
|
||||||
|
this.nupThreadCount.Size = new System.Drawing.Size(70, 20);
|
||||||
|
this.nupThreadCount.TabIndex = 12;
|
||||||
|
this.nupThreadCount.Value = new decimal(new int[] {
|
||||||
|
50,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
0});
|
||||||
|
//
|
||||||
|
// lbChannel
|
||||||
|
//
|
||||||
|
this.lbChannel.AutoSize = true;
|
||||||
|
this.lbChannel.Location = new System.Drawing.Point(224, 38);
|
||||||
|
this.lbChannel.Name = "lbChannel";
|
||||||
|
this.lbChannel.Size = new System.Drawing.Size(49, 13);
|
||||||
|
this.lbChannel.TabIndex = 3;
|
||||||
|
this.lbChannel.Text = "Channel:";
|
||||||
|
//
|
||||||
|
// lbScanCount
|
||||||
|
//
|
||||||
|
this.lbScanCount.AutoSize = true;
|
||||||
|
this.lbScanCount.Location = new System.Drawing.Point(12, 203);
|
||||||
|
this.lbScanCount.Name = "lbScanCount";
|
||||||
|
this.lbScanCount.Size = new System.Drawing.Size(102, 13);
|
||||||
|
this.lbScanCount.TabIndex = 13;
|
||||||
|
this.lbScanCount.Text = "Messages scanned:";
|
||||||
|
//
|
||||||
|
// lbUsername
|
||||||
|
//
|
||||||
|
this.lbUsername.AutoSize = true;
|
||||||
|
this.lbUsername.Location = new System.Drawing.Point(12, 9);
|
||||||
|
this.lbUsername.Name = "lbUsername";
|
||||||
|
this.lbUsername.Size = new System.Drawing.Size(58, 13);
|
||||||
|
this.lbUsername.TabIndex = 2;
|
||||||
|
this.lbUsername.Text = "Username:";
|
||||||
|
//
|
||||||
|
// lbDownload
|
||||||
|
//
|
||||||
|
this.lbDownload.AutoSize = true;
|
||||||
|
this.lbDownload.Location = new System.Drawing.Point(234, 203);
|
||||||
|
this.lbDownload.Name = "lbDownload";
|
||||||
|
this.lbDownload.Size = new System.Drawing.Size(92, 13);
|
||||||
|
this.lbDownload.TabIndex = 14;
|
||||||
|
this.lbDownload.Text = "Files downloaded:";
|
||||||
|
//
|
||||||
|
// cbGuilds
|
||||||
|
//
|
||||||
|
this.cbGuilds.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||||
|
this.cbGuilds.FormattingEnabled = true;
|
||||||
|
this.cbGuilds.Location = new System.Drawing.Point(52, 32);
|
||||||
|
this.cbGuilds.Name = "cbGuilds";
|
||||||
|
this.cbGuilds.Size = new System.Drawing.Size(164, 21);
|
||||||
|
this.cbGuilds.TabIndex = 1;
|
||||||
|
this.cbGuilds.SelectedIndexChanged += new System.EventHandler(this.cbGuilds_SelectedIndexChanged);
|
||||||
|
//
|
||||||
|
// lbGuild
|
||||||
|
//
|
||||||
|
this.lbGuild.AutoSize = true;
|
||||||
|
this.lbGuild.Location = new System.Drawing.Point(12, 35);
|
||||||
|
this.lbGuild.Name = "lbGuild";
|
||||||
|
this.lbGuild.Size = new System.Drawing.Size(34, 13);
|
||||||
|
this.lbGuild.TabIndex = 0;
|
||||||
|
this.lbGuild.Text = "Guild:";
|
||||||
|
//
|
||||||
|
// cbSkip
|
||||||
|
//
|
||||||
|
this.cbSkip.AutoSize = true;
|
||||||
|
this.cbSkip.Checked = true;
|
||||||
|
this.cbSkip.CheckState = System.Windows.Forms.CheckState.Checked;
|
||||||
|
this.cbSkip.Location = new System.Drawing.Point(227, 141);
|
||||||
|
this.cbSkip.Name = "cbSkip";
|
||||||
|
this.cbSkip.Size = new System.Drawing.Size(106, 17);
|
||||||
|
this.cbSkip.TabIndex = 16;
|
||||||
|
this.cbSkip.Text = "Skip existing files";
|
||||||
|
this.cbSkip.UseVisualStyleBackColor = true;
|
||||||
|
//
|
||||||
|
// lbCopyright
|
||||||
|
//
|
||||||
|
this.lbCopyright.AutoSize = true;
|
||||||
|
this.lbCopyright.Location = new System.Drawing.Point(12, 274);
|
||||||
|
this.lbCopyright.Name = "lbCopyright";
|
||||||
|
this.lbCopyright.Size = new System.Drawing.Size(151, 13);
|
||||||
|
this.lbCopyright.TabIndex = 22;
|
||||||
|
this.lbCopyright.Text = "Copyright (c) 2017 by Serraniel";
|
||||||
|
//
|
||||||
|
// lbGithub
|
||||||
|
//
|
||||||
|
this.lbGithub.AutoSize = true;
|
||||||
|
this.lbGithub.Location = new System.Drawing.Point(169, 274);
|
||||||
|
this.lbGithub.Name = "lbGithub";
|
||||||
|
this.lbGithub.Size = new System.Drawing.Size(40, 13);
|
||||||
|
this.lbGithub.TabIndex = 23;
|
||||||
|
this.lbGithub.TabStop = true;
|
||||||
|
this.lbGithub.Text = "GitHub";
|
||||||
|
this.lbGithub.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lbGithub_LinkClicked);
|
||||||
|
//
|
||||||
|
// lbAbout
|
||||||
|
//
|
||||||
|
this.lbAbout.AutoSize = true;
|
||||||
|
this.lbAbout.Location = new System.Drawing.Point(223, 274);
|
||||||
|
this.lbAbout.Name = "lbAbout";
|
||||||
|
this.lbAbout.Size = new System.Drawing.Size(35, 13);
|
||||||
|
this.lbAbout.TabIndex = 24;
|
||||||
|
this.lbAbout.TabStop = true;
|
||||||
|
this.lbAbout.Text = "About";
|
||||||
|
this.lbAbout.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lbAbout_LinkClicked);
|
||||||
|
//
|
||||||
|
// lbVersion
|
||||||
|
//
|
||||||
|
this.lbVersion.Location = new System.Drawing.Point(328, 274);
|
||||||
|
this.lbVersion.Name = "lbVersion";
|
||||||
|
this.lbVersion.Size = new System.Drawing.Size(100, 15);
|
||||||
|
this.lbVersion.TabIndex = 26;
|
||||||
|
this.lbVersion.TabStop = true;
|
||||||
|
this.lbVersion.Text = "version";
|
||||||
|
this.lbVersion.TextAlign = System.Drawing.ContentAlignment.TopRight;
|
||||||
|
this.lbVersion.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.lbVersion_LinkClicked);
|
||||||
|
//
|
||||||
|
// MainForm
|
||||||
|
//
|
||||||
|
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
|
||||||
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
|
this.ClientSize = new System.Drawing.Size(439, 296);
|
||||||
|
this.Controls.Add(this.lbVersion);
|
||||||
|
this.Controls.Add(this.lbAbout);
|
||||||
|
this.Controls.Add(this.lbGithub);
|
||||||
|
this.Controls.Add(this.lbCopyright);
|
||||||
|
this.Controls.Add(this.cbSkip);
|
||||||
|
this.Controls.Add(this.lbDownload);
|
||||||
|
this.Controls.Add(this.lbScanCount);
|
||||||
|
this.Controls.Add(this.nupThreadCount);
|
||||||
|
this.Controls.Add(this.lbThread);
|
||||||
|
this.Controls.Add(this.btnDownload);
|
||||||
|
this.Controls.Add(this.tbxPath);
|
||||||
|
this.Controls.Add(this.lbPath);
|
||||||
|
this.Controls.Add(this.btnSearch);
|
||||||
|
this.Controls.Add(this.dtpLimit);
|
||||||
|
this.Controls.Add(this.cbLimitDate);
|
||||||
|
this.Controls.Add(this.cbChannels);
|
||||||
|
this.Controls.Add(this.lbChannel);
|
||||||
|
this.Controls.Add(this.lbUsername);
|
||||||
|
this.Controls.Add(this.cbGuilds);
|
||||||
|
this.Controls.Add(this.lbGuild);
|
||||||
|
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
|
||||||
|
this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
|
||||||
|
this.MaximizeBox = false;
|
||||||
|
this.Name = "MainForm";
|
||||||
|
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
|
||||||
|
this.Text = "Discord Media Loader";
|
||||||
|
this.Shown += new System.EventHandler(this.MainForm_Shown);
|
||||||
|
((System.ComponentModel.ISupportInitialize)(this.nupThreadCount)).EndInit();
|
||||||
|
this.ResumeLayout(false);
|
||||||
|
this.PerformLayout();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private System.Windows.Forms.Label lbPath;
|
||||||
|
private System.Windows.Forms.Button btnSearch;
|
||||||
|
private System.Windows.Forms.TextBox tbxPath;
|
||||||
|
private System.Windows.Forms.DateTimePicker dtpLimit;
|
||||||
|
private System.Windows.Forms.Button btnDownload;
|
||||||
|
private System.Windows.Forms.CheckBox cbLimitDate;
|
||||||
|
private System.Windows.Forms.Label lbThread;
|
||||||
|
private System.Windows.Forms.ComboBox cbChannels;
|
||||||
|
private System.Windows.Forms.NumericUpDown nupThreadCount;
|
||||||
|
private System.Windows.Forms.Label lbChannel;
|
||||||
|
private System.Windows.Forms.Label lbScanCount;
|
||||||
|
private System.Windows.Forms.Label lbUsername;
|
||||||
|
private System.Windows.Forms.Label lbDownload;
|
||||||
|
private System.Windows.Forms.ComboBox cbGuilds;
|
||||||
|
private System.Windows.Forms.Label lbGuild;
|
||||||
|
private System.Windows.Forms.CheckBox cbSkip;
|
||||||
|
private System.Windows.Forms.Label lbCopyright;
|
||||||
|
private System.Windows.Forms.LinkLabel lbGithub;
|
||||||
|
private System.Windows.Forms.LinkLabel lbAbout;
|
||||||
|
private System.Windows.Forms.LinkLabel lbVersion;
|
||||||
|
}
|
||||||
|
}
|
317
Discord Media Loader/MainForm.cs
Normal file
317
Discord Media Loader/MainForm.cs
Normal file
|
@ -0,0 +1,317 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Diagnostics;
|
||||||
|
using System.IO;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Net;
|
||||||
|
using System.Reflection;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using System.Windows.Forms;
|
||||||
|
using Discord;
|
||||||
|
using Discord.Net;
|
||||||
|
using Discord_Media_Loader.Helper;
|
||||||
|
using ConnectionState = Discord.ConnectionState;
|
||||||
|
|
||||||
|
namespace Discord_Media_Loader
|
||||||
|
{
|
||||||
|
public partial class MainForm : Form
|
||||||
|
{
|
||||||
|
private DiscordClient Client { get; } = new DiscordClient();
|
||||||
|
private event EventHandler<UpdateProgessEventArgs> UpdateProgress;
|
||||||
|
private static readonly DateTime Epoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
|
||||||
|
public MainForm()
|
||||||
|
{
|
||||||
|
InitializeComponent();
|
||||||
|
|
||||||
|
UpdateProgress += (s, e) =>
|
||||||
|
{
|
||||||
|
SetControlPropertyThreadSafe(lbDownload, "Text", $"Files downloaded: {e.Downloaded}");
|
||||||
|
SetControlPropertyThreadSafe(lbScanCount, "Text", $"Messages scanned: {e.Scanned}");
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
private delegate void SetControlPropertyThreadSafeDelegate(Control control, string propertyName, object propertyValue);
|
||||||
|
|
||||||
|
private static void SetControlPropertyThreadSafe(Control control, string propertyName, object propertyValue)
|
||||||
|
{
|
||||||
|
if (control.InvokeRequired)
|
||||||
|
{
|
||||||
|
control.Invoke(new SetControlPropertyThreadSafeDelegate(SetControlPropertyThreadSafe), control, propertyName, propertyValue);
|
||||||
|
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
control.GetType().InvokeMember(propertyName, BindingFlags.SetProperty, null, control, new[] { propertyValue });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<bool> Login()
|
||||||
|
{
|
||||||
|
var email = Properties.Settings.Default.email;
|
||||||
|
var abort = false;
|
||||||
|
|
||||||
|
while (Client.State != ConnectionState.Connected && !abort)
|
||||||
|
{
|
||||||
|
string password;
|
||||||
|
|
||||||
|
if (LoginForm.Exec(ref email, out password))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Cursor = Cursors.WaitCursor;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await Client.Connect(email, password);
|
||||||
|
|
||||||
|
Properties.Settings.Default.email = email;
|
||||||
|
Properties.Settings.Default.Save();
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
Cursor = Cursors.Default;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (HttpException)
|
||||||
|
{
|
||||||
|
// ignore http exception on invalid login
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
abort = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return !abort;
|
||||||
|
}
|
||||||
|
|
||||||
|
private async void MainForm_Shown(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
lbVersion.Text = $"v{VersionHelper.CurrentVersion}";
|
||||||
|
SetEnabled(false);
|
||||||
|
await CheckForUpdates();
|
||||||
|
|
||||||
|
if (!await Login())
|
||||||
|
{
|
||||||
|
Close();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cbGuilds.Items.AddRange((from g in Client.Servers orderby g.Name select g.Name).ToArray());
|
||||||
|
cbGuilds.SelectedIndex = 0;
|
||||||
|
lbUsername.Text = $"Username: {Client.CurrentUser.Name}#{Client.CurrentUser.Discriminator}";
|
||||||
|
|
||||||
|
SetEnabled(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Server FindServerByName(string name)
|
||||||
|
{
|
||||||
|
return (from s in Client.Servers where s.Name == name select s).FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
private Channel FindChannelByName(Server server, string name)
|
||||||
|
{
|
||||||
|
return (from c in server.TextChannels where c.Name == name select c).FirstOrDefault();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetEnabled(bool enabled)
|
||||||
|
{
|
||||||
|
foreach (Control c in Controls)
|
||||||
|
{
|
||||||
|
SetControlPropertyThreadSafe(c, "Enabled", enabled);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void cbGuilds_SelectedIndexChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
Cursor = Cursors.WaitCursor;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Server guild = FindServerByName(cbGuilds.Text);
|
||||||
|
|
||||||
|
if (guild != null)
|
||||||
|
{
|
||||||
|
cbChannels.Items.Clear();
|
||||||
|
cbChannels.Items.AddRange((from c in guild.TextChannels orderby c.Position select c.Name).ToArray());
|
||||||
|
|
||||||
|
cbChannels.SelectedIndex = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
Cursor = Cursors.Default;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void cbLimitDate_CheckedChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
dtpLimit.Enabled = cbLimitDate.Checked;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void btnSearch_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
var dlg = new FolderBrowserDialog();
|
||||||
|
if (dlg.ShowDialog() == DialogResult.OK)
|
||||||
|
{
|
||||||
|
tbxPath.Text = dlg.SelectedPath;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void OnUpdateProgress(UpdateProgessEventArgs e)
|
||||||
|
{
|
||||||
|
EventHandler<UpdateProgessEventArgs> handler = UpdateProgress;
|
||||||
|
handler?.Invoke(this, e);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static long DateTimeToUnixTimeStamp(DateTime dateTime)
|
||||||
|
{
|
||||||
|
TimeSpan elapsedTime = dateTime - Epoch;
|
||||||
|
return (long)elapsedTime.TotalSeconds;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private void btnDownload_Click(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
var path = tbxPath.Text;
|
||||||
|
var useStopDate = cbLimitDate.Checked;
|
||||||
|
var stopDate = dtpLimit.Value;
|
||||||
|
var threadLimit = nupThreadCount.Value;
|
||||||
|
var skipExisting = cbSkip.Checked;
|
||||||
|
|
||||||
|
if (!Directory.Exists(path))
|
||||||
|
{
|
||||||
|
MessageBox.Show("Please enter an existing directory.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
SetEnabled(false);
|
||||||
|
|
||||||
|
var guild = FindServerByName(cbGuilds.Text);
|
||||||
|
var channel = FindChannelByName(guild, cbChannels.Text);
|
||||||
|
|
||||||
|
var clients = new List<WebClient>();
|
||||||
|
|
||||||
|
var limit = 100;
|
||||||
|
var stop = false;
|
||||||
|
var lastId = ulong.MaxValue;
|
||||||
|
var isFirst = true;
|
||||||
|
|
||||||
|
ulong msgScanCount = 0;
|
||||||
|
ulong downloadCount = 0;
|
||||||
|
var locker = new object();
|
||||||
|
|
||||||
|
Task.Run(async () =>
|
||||||
|
{
|
||||||
|
|
||||||
|
while (!stop)
|
||||||
|
{
|
||||||
|
Discord.Message[] messages;
|
||||||
|
|
||||||
|
if (isFirst)
|
||||||
|
messages = await channel.DownloadMessages(limit, null);
|
||||||
|
else
|
||||||
|
messages = await channel.DownloadMessages(limit, lastId);
|
||||||
|
|
||||||
|
isFirst = false;
|
||||||
|
|
||||||
|
foreach (var m in messages)
|
||||||
|
{
|
||||||
|
if (m.Id < lastId)
|
||||||
|
lastId = m.Id;
|
||||||
|
|
||||||
|
if (useStopDate && m.Timestamp < stopDate.Date)
|
||||||
|
{
|
||||||
|
stop = true;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach (var a in m.Attachments)
|
||||||
|
{
|
||||||
|
if (!path.EndsWith(@"\"))
|
||||||
|
path += @"\";
|
||||||
|
|
||||||
|
var fname = $"{guild.Name}_{channel.Name}_{DateTimeToUnixTimeStamp(m.Timestamp)}_{a.Filename}";
|
||||||
|
fname = Path.GetInvalidFileNameChars().Aggregate(fname, (current, c) => current.Replace(c, '-'));
|
||||||
|
fname = path + fname;
|
||||||
|
|
||||||
|
if (skipExisting && File.Exists(fname))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
while (clients.Count >= threadLimit)
|
||||||
|
{
|
||||||
|
// wait
|
||||||
|
}
|
||||||
|
var wc = new WebClient();
|
||||||
|
clients.Add(wc);
|
||||||
|
|
||||||
|
wc.DownloadFileCompleted += (wcSender, wcE) =>
|
||||||
|
{
|
||||||
|
clients.Remove(wc);
|
||||||
|
lock (locker)
|
||||||
|
{
|
||||||
|
downloadCount++;
|
||||||
|
OnUpdateProgress(new UpdateProgessEventArgs() { Downloaded = downloadCount, Scanned = msgScanCount });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
wc.DownloadFileAsync(new Uri(a.Url), fname);
|
||||||
|
}
|
||||||
|
|
||||||
|
msgScanCount++;
|
||||||
|
OnUpdateProgress(new UpdateProgessEventArgs() { Downloaded = downloadCount, Scanned = msgScanCount });
|
||||||
|
}
|
||||||
|
|
||||||
|
stop = stop || messages.Length < limit;
|
||||||
|
}
|
||||||
|
|
||||||
|
await Task.Run(() =>
|
||||||
|
{
|
||||||
|
while (clients.Count > 0)
|
||||||
|
{
|
||||||
|
// wait until download finished
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Process.Start(path);
|
||||||
|
SetEnabled(true);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void lbGithub_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
||||||
|
{
|
||||||
|
Process.Start("https://github.com/Serraniel/DiscordMediaLoader/releases");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void lbAbout_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
||||||
|
{
|
||||||
|
MessageBox.Show(Properties.Resources.AboutString);
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task CheckForUpdates(bool manually = false)
|
||||||
|
{
|
||||||
|
if (VersionHelper.CurrentVersion < await VersionHelper.GetLatestReleaseVersion())
|
||||||
|
{
|
||||||
|
if (MessageBox.Show("A new version is available, do you want to update now?", "Update available", MessageBoxButtons.YesNo) != DialogResult.Yes)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Process.Start(await VersionHelper.DownloadLatestReleaseVersion());
|
||||||
|
}
|
||||||
|
else if (manually)
|
||||||
|
{
|
||||||
|
MessageBox.Show("You already use the newest version.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void lbVersion_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
|
||||||
|
{
|
||||||
|
CheckForUpdates(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
internal class UpdateProgessEventArgs : EventArgs
|
||||||
|
{
|
||||||
|
internal ulong Scanned { get; set; }
|
||||||
|
internal ulong Downloaded { get; set; }
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,28 +1,20 @@
|
||||||
using System;
|
using System;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using DML.Application.Classes;
|
using Discord_Media_Loader.Helper;
|
||||||
using Nito.AsyncEx;
|
|
||||||
|
|
||||||
namespace Discord_Media_Loader
|
namespace Discord_Media_Loader
|
||||||
{
|
{
|
||||||
internal static class Program
|
static class Program
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Der Haupteinstiegspunkt für die Anwendung.
|
||||||
|
/// </summary>
|
||||||
[STAThread]
|
[STAThread]
|
||||||
private static void Main(string[] paramStrings)
|
static void Main()
|
||||||
{
|
{
|
||||||
Application.EnableVisualStyles();
|
Application.EnableVisualStyles();
|
||||||
Application.SetCompatibleTextRenderingDefault(false);
|
Application.SetCompatibleTextRenderingDefault(false);
|
||||||
|
Application.Run(new MainForm());
|
||||||
var splashScreen = new FrmSplash();
|
|
||||||
if (splashScreen.ShowDialog() == DialogResult.OK)
|
|
||||||
DoLaunch(paramStrings);
|
|
||||||
else
|
|
||||||
Application.Restart();
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void DoLaunch(string[] paramStrings)
|
|
||||||
{
|
|
||||||
AsyncContext.Run(() => Core.Run(paramStrings));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
using System.Reflection;
|
using System.Reflection;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
|
||||||
// Allgemeine Informationen über eine Assembly werden über die folgenden
|
// Allgemeine Informationen über eine Assembly werden über die folgenden
|
||||||
|
@ -7,9 +7,9 @@ using System.Runtime.InteropServices;
|
||||||
[assembly: AssemblyTitle("Discord Media Loader")]
|
[assembly: AssemblyTitle("Discord Media Loader")]
|
||||||
[assembly: AssemblyDescription("")]
|
[assembly: AssemblyDescription("")]
|
||||||
[assembly: AssemblyConfiguration("")]
|
[assembly: AssemblyConfiguration("")]
|
||||||
[assembly: AssemblyCompany("Serraniel")]
|
[assembly: AssemblyCompany("")]
|
||||||
[assembly: AssemblyProduct("Discord Media Loader")]
|
[assembly: AssemblyProduct("Discord Media Loader")]
|
||||||
[assembly: AssemblyCopyright("Copyright © 2017 - 2019 by Serraniel")]
|
[assembly: AssemblyCopyright("Copyright © 2017 by Serraniel")]
|
||||||
[assembly: AssemblyTrademark("")]
|
[assembly: AssemblyTrademark("")]
|
||||||
[assembly: AssemblyCulture("")]
|
[assembly: AssemblyCulture("")]
|
||||||
|
|
||||||
|
@ -19,7 +19,7 @@ using System.Runtime.InteropServices;
|
||||||
[assembly: ComVisible(false)]
|
[assembly: ComVisible(false)]
|
||||||
|
|
||||||
// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
|
// Die folgende GUID bestimmt die ID der Typbibliothek, wenn dieses Projekt für COM verfügbar gemacht wird
|
||||||
[assembly: Guid("edc92554-dbc1-4f9c-9317-379a8bf441e8")]
|
[assembly: Guid("83e64057-7010-4df3-a011-f7e536508407")]
|
||||||
|
|
||||||
// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
|
// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
|
||||||
//
|
//
|
||||||
|
@ -31,5 +31,5 @@ using System.Runtime.InteropServices;
|
||||||
// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
|
// Sie können alle Werte angeben oder die standardmäßigen Build- und Revisionsnummern
|
||||||
// übernehmen, indem Sie "*" eingeben:
|
// übernehmen, indem Sie "*" eingeben:
|
||||||
// [assembly: AssemblyVersion("1.0.*")]
|
// [assembly: AssemblyVersion("1.0.*")]
|
||||||
[assembly: AssemblyVersion("1.1.0.0")]
|
[assembly: AssemblyVersion("0.2.99.0")]
|
||||||
[assembly: AssemblyFileVersion("1.1.0.0")]
|
[assembly: AssemblyFileVersion("0.2.99.0")]
|
||||||
|
|
|
@ -61,12 +61,19 @@ namespace Discord_Media_Loader.Properties {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Sucht eine lokalisierte Ressource vom Typ System.Drawing.Bitmap.
|
/// Sucht eine lokalisierte Zeichenfolge, die Discord Media Loader by Serraniel - Apache 2.0 License
|
||||||
|
///https://github.com/Serraniel/DiscordMediaLoader/
|
||||||
|
///
|
||||||
|
///Made with:
|
||||||
|
///Discord.Net (Copyright (c) 2015 RogueException - MIT License)
|
||||||
|
///Newtonsoft.Json (Copyright (c) 2007 James Newton-King - MIT License)
|
||||||
|
///Nito.AsyncEx (Copyright (c) 2014 StephenCleary - MIT License)
|
||||||
|
///RestSharp (Copyright (c) restsharp - Apache 2.0 License)
|
||||||
|
///WebSocket4Net (Copyright (c) kerryjiang - Apache 2.0 License) ähnelt.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
internal static System.Drawing.Bitmap Serraniel_Logo4_NO_BG {
|
internal static string AboutString {
|
||||||
get {
|
get {
|
||||||
object obj = ResourceManager.GetObject("Serraniel_Logo4_NO_BG", resourceCulture);
|
return ResourceManager.GetString("AboutString", resourceCulture);
|
||||||
return ((System.Drawing.Bitmap)(obj));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -117,8 +117,15 @@
|
||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
<data name="AboutString" xml:space="preserve">
|
||||||
<data name="Serraniel_Logo4_NO_BG" type="System.Resources.ResXFileRef, System.Windows.Forms">
|
<value>Discord Media Loader by Serraniel - Apache 2.0 License
|
||||||
<value>..\Resources\Serraniel-Logo4-NO-BG.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
|
https://github.com/Serraniel/DiscordMediaLoader/
|
||||||
|
|
||||||
|
Made with:
|
||||||
|
Discord.Net (Copyright (c) 2015 RogueException - MIT License)
|
||||||
|
Newtonsoft.Json (Copyright (c) 2007 James Newton-King - MIT License)
|
||||||
|
Nito.AsyncEx (Copyright (c) 2014 StephenCleary - MIT License)
|
||||||
|
RestSharp (Copyright (c) restsharp - Apache 2.0 License)
|
||||||
|
WebSocket4Net (Copyright (c) kerryjiang - Apache 2.0 License)</value>
|
||||||
</data>
|
</data>
|
||||||
</root>
|
</root>
|
14
Discord Media Loader/Properties/Settings.Designer.cs
generated
14
Discord Media Loader/Properties/Settings.Designer.cs
generated
|
@ -12,7 +12,7 @@ namespace Discord_Media_Loader.Properties {
|
||||||
|
|
||||||
|
|
||||||
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
|
||||||
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "15.1.0.0")]
|
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "14.0.0.0")]
|
||||||
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
|
||||||
|
|
||||||
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
|
||||||
|
@ -22,5 +22,17 @@ namespace Discord_Media_Loader.Properties {
|
||||||
return defaultInstance;
|
return defaultInstance;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[global::System.Configuration.UserScopedSettingAttribute()]
|
||||||
|
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
|
||||||
|
[global::System.Configuration.DefaultSettingValueAttribute("")]
|
||||||
|
public string email {
|
||||||
|
get {
|
||||||
|
return ((string)(this["email"]));
|
||||||
|
}
|
||||||
|
set {
|
||||||
|
this["email"] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,9 @@
|
||||||
<?xml version='1.0' encoding='utf-8'?>
|
<?xml version='1.0' encoding='utf-8'?>
|
||||||
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
|
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="Discord_Media_Loader.Properties" GeneratedClassName="Settings">
|
||||||
<Profiles>
|
<Profiles />
|
||||||
<Profile Name="(Default)" />
|
<Settings>
|
||||||
</Profiles>
|
<Setting Name="email" Type="System.String" Scope="User">
|
||||||
<Settings />
|
<Value Profile="(Default)" />
|
||||||
|
</Setting>
|
||||||
|
</Settings>
|
||||||
</SettingsFile>
|
</SettingsFile>
|
Binary file not shown.
Before Width: | Height: | Size: 300 KiB |
Binary file not shown.
Before Width: | Height: | Size: 412 KiB |
|
@ -1,30 +1,9 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<packages>
|
<packages>
|
||||||
<package id="Microsoft.Bcl.AsyncInterfaces" version="6.0.0" targetFramework="net461" />
|
<package id="Discord.Net" version="0.9.6" targetFramework="net461" />
|
||||||
<package id="Microsoft.NETCore.Platforms" version="5.0.1" targetFramework="net461" />
|
<package id="Newtonsoft.Json" version="8.0.3" targetFramework="net461" />
|
||||||
<package id="Microsoft.Win32.Primitives" version="4.3.0" targetFramework="net461" />
|
<package id="Nito.AsyncEx" version="3.0.1" targetFramework="net461" />
|
||||||
<package id="NETStandard.Library" version="2.0.3" targetFramework="net461" />
|
<package id="Octokit" version="0.24.1-alpha0001" targetFramework="net46" />
|
||||||
<package id="Newtonsoft.Json" version="12.0.2" targetFramework="net461" />
|
<package id="RestSharp" version="105.2.3" targetFramework="net461" />
|
||||||
<package id="Nito.AsyncEx" version="5.1.2" targetFramework="net461" />
|
<package id="WebSocket4Net" version="0.14.1" targetFramework="net461" />
|
||||||
<package id="Nito.AsyncEx.Context" version="5.1.2" targetFramework="net461" />
|
|
||||||
<package id="Nito.AsyncEx.Coordination" version="5.1.2" targetFramework="net461" />
|
|
||||||
<package id="Nito.AsyncEx.Interop.WaitHandles" version="5.1.2" targetFramework="net461" />
|
|
||||||
<package id="Nito.AsyncEx.Oop" version="5.1.2" targetFramework="net461" />
|
|
||||||
<package id="Nito.AsyncEx.Tasks" version="5.1.2" targetFramework="net461" />
|
|
||||||
<package id="Nito.Cancellation" version="1.1.2" targetFramework="net461" />
|
|
||||||
<package id="Nito.Collections.Deque" version="1.1.1" targetFramework="net461" />
|
|
||||||
<package id="Nito.Disposables" version="2.2.1" targetFramework="net461" />
|
|
||||||
<package id="Octokit" version="0.50.0" targetFramework="net461" />
|
|
||||||
<package id="System.Buffers" version="4.5.1" targetFramework="net461" />
|
|
||||||
<package id="System.Collections.Immutable" version="5.0.0" targetFramework="net461" />
|
|
||||||
<package id="System.Linq" version="4.3.0" targetFramework="net461" />
|
|
||||||
<package id="System.Memory" version="4.5.4" targetFramework="net461" />
|
|
||||||
<package id="System.Numerics.Vectors" version="4.5.0" targetFramework="net461" />
|
|
||||||
<package id="System.Runtime.CompilerServices.Unsafe" version="5.0.0" targetFramework="net461" />
|
|
||||||
<package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net461" />
|
|
||||||
<package id="System.Security.Cryptography.Algorithms" version="4.3.1" targetFramework="net461" />
|
|
||||||
<package id="System.Security.Cryptography.Encoding" version="4.3.0" targetFramework="net461" />
|
|
||||||
<package id="System.Security.Cryptography.Primitives" version="4.3.0" targetFramework="net461" />
|
|
||||||
<package id="System.Security.Cryptography.X509Certificates" version="4.3.2" targetFramework="net461" />
|
|
||||||
<package id="System.Threading.Tasks.Extensions" version="4.5.4" targetFramework="net461" />
|
|
||||||
</packages>
|
</packages>
|
18
README.md
18
README.md
|
@ -1,12 +1,7 @@
|
||||||
# Discord Media Loader
|
# Discord Media Loader
|
||||||
|
|
||||||
## IMPORTANT: This selfbot may violate discord TOS. Use at own risk!!!
|
|
||||||
|
|
||||||
*Discord Media Loader* is a small tool for downloading all attachments of *Discord* servers.
|
*Discord Media Loader* is a small tool for downloading all attachments of *Discord* servers.
|
||||||
|
|
||||||
**[Downloadlatest release](https://github.com/Serraniel/DiscordMediaLoader/releases)** or install with *winget*: `winget install -e --id Serraniel.DiscordMediaLoader`.
|
**[Download](https://github.com/Serraniel/DiscordMediaLoader/releases)**
|
||||||
|
|
||||||
**Build:** [![build status badge](https://ci.serraniel.com/app/rest/builds/buildType:(DiscordMediaLoader_BuildMaster)/statusIcon)](https://ci.serraniel.com/viewType.html?buildTypeId=DiscordMediaLoader_BuildMaster)
|
|
||||||
|
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
@ -24,14 +19,3 @@ Apache License 2.0
|
||||||
|
|
||||||
## Requirements
|
## Requirements
|
||||||
* [.Net Framework 4.6](https://www.microsoft.com/en-us/download/details.aspx?id=48137) by Microsoft
|
* [.Net Framework 4.6](https://www.microsoft.com/en-us/download/details.aspx?id=48137) by Microsoft
|
||||||
|
|
||||||
## How to use
|
|
||||||
First things first: **Do not use if you have MFA enabled** as long as login is only supported via username and password. That might get you lost your account. A switch to a token based login will come soon™!
|
|
||||||
|
|
||||||
Otherwise you may just do the following steps:
|
|
||||||
1. Login
|
|
||||||
2. Select a guild
|
|
||||||
3. Select a channel
|
|
||||||
4. Select a directory to save the files
|
|
||||||
5. Do other settings if wished
|
|
||||||
6. Press the magic button to download stuff
|
|
||||||
|
|
|
@ -1,216 +0,0 @@
|
||||||
; Script generated by the Inno Setup Script Wizard.
|
|
||||||
; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES!
|
|
||||||
|
|
||||||
#define MyAppName "Discord Media Loader"
|
|
||||||
#define MyAppVersion "1.5.3.0"
|
|
||||||
#define MyAppPublisher "Serraniel"
|
|
||||||
#define MyAppURL "https://github.com/Serraniel/DiscordMediaLoader"
|
|
||||||
#define MyAppExeName "Discord Media Loader.exe"
|
|
||||||
|
|
||||||
[Setup]
|
|
||||||
; NOTE: The value of AppId uniquely identifies this application. Do not use the same AppId value in installers for other applications.
|
|
||||||
; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)
|
|
||||||
AppId={{CC50DF25-9ECA-4F99-8DFF-9A0FB0A63DA3}
|
|
||||||
AppName={#MyAppName}
|
|
||||||
AppVersion={#MyAppVersion}
|
|
||||||
;AppVerName={#MyAppName} {#MyAppVersion}
|
|
||||||
AppPublisher={#MyAppPublisher}
|
|
||||||
AppPublisherURL={#MyAppURL}
|
|
||||||
AppSupportURL={#MyAppURL}
|
|
||||||
AppUpdatesURL={#MyAppURL}
|
|
||||||
DefaultDirName={localappdata}\Programs\{#MyAppName}
|
|
||||||
DisableProgramGroupPage=yes
|
|
||||||
; The [Icons] "quicklaunchicon" entry uses {userappdata} but its [Tasks] entry has a proper IsAdminInstallMode Check.
|
|
||||||
UsedUserAreasWarning=no
|
|
||||||
LicenseFile=C:\Users\Daniel\Documents\Projects\Discord Media Loader\LICENSE
|
|
||||||
; Remove the following line to run in administrative install mode (install for all users.)
|
|
||||||
PrivilegesRequired=lowest
|
|
||||||
PrivilegesRequiredOverridesAllowed=commandline
|
|
||||||
OutputDir=C:\Users\Daniel\Documents\Projects\Discord Media Loader\install
|
|
||||||
OutputBaseFilename=Discord_Media_Loader_Setup
|
|
||||||
Compression=lzma
|
|
||||||
WizardStyle=modern
|
|
||||||
|
|
||||||
[Languages]
|
|
||||||
Name: "english"; MessagesFile: "compiler:Default.isl"
|
|
||||||
|
|
||||||
[Tasks]
|
|
||||||
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
|
|
||||||
Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 6.1; Check: not IsAdminInstallMode
|
|
||||||
|
|
||||||
[Files]
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\{#MyAppExeName}"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Discord Media Loader.Application.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Discord Media Loader.Application.dll.config"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Discord Media Loader.Application.pdb"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Discord Media Loader.exe"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Discord Media Loader.exe.config"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Discord Media Loader.pdb"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Discord.Net.Core.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Discord.Net.Core.pdb"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Discord.Net.Core.xml"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Discord.Net.Rest.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Discord.Net.Rest.pdb"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Discord.Net.Rest.xml"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Discord.Net.WebSocket.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Discord.Net.WebSocket.pdb"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Discord.Net.WebSocket.xml"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\DML.Client.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\DML.Client.pdb"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\LiteDB.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\LiteDB.xml"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Microsoft.Bcl.AsyncInterfaces.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Microsoft.Bcl.AsyncInterfaces.xml"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Microsoft.Extensions.DependencyInjection.Abstractions.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Microsoft.Extensions.DependencyInjection.Abstractions.xml"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Microsoft.Extensions.DependencyInjection.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Microsoft.Extensions.DependencyInjection.xml"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Microsoft.Win32.Primitives.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Microsoft.Win32.Registry.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Microsoft.Win32.Registry.xml"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\netstandard.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Newtonsoft.Json.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Newtonsoft.Json.xml"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Nito.AsyncEx.Context.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Nito.AsyncEx.Context.xml"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Nito.AsyncEx.Coordination.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Nito.AsyncEx.Coordination.xml"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Nito.AsyncEx.Interop.WaitHandles.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Nito.AsyncEx.Interop.WaitHandles.xml"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Nito.AsyncEx.Oop.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Nito.AsyncEx.Oop.xml"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Nito.AsyncEx.Tasks.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Nito.AsyncEx.Tasks.xml"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Nito.Cancellation.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Nito.Cancellation.xml"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Nito.Collections.Deque.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Nito.Collections.Deque.xml"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Nito.Disposables.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Nito.Disposables.xml"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Octokit.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\Octokit.xml"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\SharpRaven.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\SweetLib.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\SweetLib.xml"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.AppContext.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Buffers.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Buffers.xml"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Collections.Concurrent.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Collections.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Collections.Immutable.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Collections.Immutable.xml"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Collections.NonGeneric.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Collections.Specialized.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.ComponentModel.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.ComponentModel.EventBasedAsync.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.ComponentModel.Primitives.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.ComponentModel.TypeConverter.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Console.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Data.Common.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Diagnostics.Contracts.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Diagnostics.Debug.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Diagnostics.DiagnosticSource.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Diagnostics.DiagnosticSource.xml"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Diagnostics.FileVersionInfo.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Diagnostics.Process.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Diagnostics.StackTrace.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Diagnostics.TextWriterTraceListener.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Diagnostics.Tools.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Diagnostics.TraceSource.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Diagnostics.Tracing.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Drawing.Primitives.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Dynamic.Runtime.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Globalization.Calendars.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Globalization.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Globalization.Extensions.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.IO.Compression.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.IO.Compression.ZipFile.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.IO.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.IO.FileSystem.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.IO.FileSystem.DriveInfo.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.IO.FileSystem.Primitives.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.IO.FileSystem.Watcher.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.IO.IsolatedStorage.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.IO.MemoryMappedFiles.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.IO.Pipes.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.IO.UnmanagedMemoryStream.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Linq.Async.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Linq.Async.xml"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Linq.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Linq.Expressions.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Linq.Parallel.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Linq.Queryable.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Memory.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Memory.xml"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Net.Http.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Net.NameResolution.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Net.NetworkInformation.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Net.Ping.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Net.Primitives.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Net.Requests.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Net.Security.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Net.Sockets.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Net.WebHeaderCollection.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Net.WebSockets.Client.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Net.WebSockets.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Numerics.Vectors.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Numerics.Vectors.xml"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.ObjectModel.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Reflection.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Reflection.Extensions.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Reflection.Primitives.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Resources.Reader.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Resources.ResourceManager.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Resources.Writer.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Runtime.CompilerServices.Unsafe.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Runtime.CompilerServices.Unsafe.xml"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Runtime.CompilerServices.VisualC.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Runtime.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Runtime.Extensions.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Runtime.Handles.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Runtime.InteropServices.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Runtime.InteropServices.RuntimeInformation.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Runtime.Numerics.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Runtime.Serialization.Formatters.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Runtime.Serialization.Json.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Runtime.Serialization.Primitives.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Runtime.Serialization.Xml.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Security.Claims.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Security.Cryptography.Algorithms.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Security.Cryptography.Csp.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Security.Cryptography.Encoding.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Security.Cryptography.Primitives.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Security.Cryptography.X509Certificates.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Security.Principal.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Security.SecureString.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Text.Encoding.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Text.Encoding.Extensions.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Text.RegularExpressions.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Threading.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Threading.Overlapped.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Threading.Tasks.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Threading.Tasks.Extensions.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Threading.Tasks.Extensions.xml"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Threading.Tasks.Parallel.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Threading.Thread.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Threading.ThreadPool.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Threading.Timer.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.ValueTuple.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Xml.ReaderWriter.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Xml.XDocument.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Xml.XmlDocument.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Xml.XmlSerializer.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Xml.XPath.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
Source: "C:\Users\Daniel\Documents\Projects\Discord Media Loader\Discord Media Loader\bin\Release\System.Xml.XPath.XDocument.dll"; DestDir: "{app}"; Flags: ignoreversion
|
|
||||||
; NOTE: Don't use "Flags: ignoreversion" on any shared system files
|
|
||||||
|
|
||||||
[Icons]
|
|
||||||
Name: "{autoprograms}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"
|
|
||||||
Name: "{autodesktop}\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: desktopicon
|
|
||||||
Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\{#MyAppName}"; Filename: "{app}\{#MyAppExeName}"; Tasks: quicklaunchicon
|
|
||||||
|
|
||||||
[Run]
|
|
||||||
Filename: "{app}\{#MyAppExeName}"; Description: "{cm:LaunchProgram,{#StringChange(MyAppName, '&', '&&')}}"; Flags: nowait postinstall skipifsilent
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,2 +0,0 @@
|
||||||
iscc install.iss /O+ /O. /Qp
|
|
||||||
pause
|
|
|
@ -1,21 +0,0 @@
|
||||||
Id: Serraniel.DiscordMediaLoader
|
|
||||||
Publisher: Serraniel
|
|
||||||
Name: Discord Media Loader
|
|
||||||
Version: 1.3.0.0
|
|
||||||
License: Copyright (C) 2016-2020 Serraniel - Apache License 2.0
|
|
||||||
InstallerType: NULLSOFT
|
|
||||||
LicenseUrl: https://github.com/Serraniel/DiscordMediaLoader/blob/master/LICENSE
|
|
||||||
AppMoniker: Discord Media Loader
|
|
||||||
Tags: DiscordMediaLoader,Discord,DML
|
|
||||||
Description: Tool to automatically download media files from Discord Servers.
|
|
||||||
Homepage: https://github.com/Serraniel/DiscordMediaLoader
|
|
||||||
Installers:
|
|
||||||
- Arch: x86
|
|
||||||
InstallerType: Inno
|
|
||||||
Url: https://github.com/Serraniel/DiscordMediaLoader/releases/download/v1.3.0.0/Discord_Media_Loader_Setup.exe
|
|
||||||
Sha256: 0A0FE038F655E9BC6343A9A6F43F2AECA1EF90EE7CE61DB0D822CC3C76908855
|
|
||||||
Language: EN
|
|
||||||
Switches:
|
|
||||||
Silent: /VERYSILENT
|
|
||||||
SilentWithProgress: /SILENT
|
|
||||||
# Generated by https://github.com/ptorr-msft/WinGetYamlGenerator
|
|
|
@ -1,21 +0,0 @@
|
||||||
Id: Serraniel.DiscordMediaLoader
|
|
||||||
Publisher: Serraniel
|
|
||||||
Name: Discord Media Loader
|
|
||||||
Version: 1.4.0.0
|
|
||||||
License: Copyright (C) 2016-2020 Serraniel - Apache License 2.0
|
|
||||||
InstallerType: NULLSOFT
|
|
||||||
LicenseUrl: https://github.com/Serraniel/DiscordMediaLoader/blob/master/LICENSE
|
|
||||||
AppMoniker: Discord Media Loader
|
|
||||||
Tags: DiscordMediaLoader,Discord,DML
|
|
||||||
Description: Tool to automatically download media files from Discord Servers.
|
|
||||||
Homepage: https://github.com/Serraniel/DiscordMediaLoader
|
|
||||||
Installers:
|
|
||||||
- Arch: x86
|
|
||||||
InstallerType: Inno
|
|
||||||
Url: https://github.com/Serraniel/DiscordMediaLoader/releases/download/v1.4.0.0/Discord_Media_Loader_Setup.exe
|
|
||||||
Sha256: a48ad932d176976209797e7cb6aaaafce90811d97c06b25491323312ee849b59
|
|
||||||
Language: EN
|
|
||||||
Switches:
|
|
||||||
Silent: /VERYSILENT
|
|
||||||
SilentWithProgress: /SILENT
|
|
||||||
# Generated by https://github.com/ptorr-msft/WinGetYamlGenerator
|
|
|
@ -1 +0,0 @@
|
||||||
Subproject commit 373318d3eae295f789c11a24948d86690db91a0f
|
|
Loading…
Reference in a new issue