ShareX/ShareX.UploadersLib/FileUploaders/Pomf.cs
Les De Ridder beb74ec4ac Update URL of pomf.lesderid.net to p.fuwafuwa.moe
The preferred domain name of pomf.lesderid.net was recently changed to p.fuwafuwa.moe. The old domain still works (both uploading new files and downloading existing ones), but might be deprecated at some point in the (far) future.

Sorry for the commit noise.
2016-05-11 02:52:26 +02:00

192 lines
7.3 KiB
C#

#region License Information (GPL v3)
/*
ShareX - A program that allows you to take screenshots and share any file type
Copyright (c) 2007-2016 ShareX Team
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Optionally you can also view the license at <http://www.gnu.org/licenses/>.
*/
#endregion License Information (GPL v3)
using Newtonsoft.Json;
using ShareX.HelpersLib;
using ShareX.UploadersLib.Properties;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Windows.Forms;
namespace ShareX.UploadersLib.FileUploaders
{
public class PomfFileUploaderService : FileUploaderService
{
public override FileDestination EnumValue { get; } = FileDestination.Pomf;
public override bool CheckConfig(UploadersConfig config)
{
return config.PomfUploader != null && !string.IsNullOrEmpty(config.PomfUploader.UploadURL);
}
public override GenericUploader CreateUploader(UploadersConfig config, TaskReferenceHelper taskInfo)
{
return new Pomf(config.PomfUploader);
}
public override TabPage GetUploadersConfigTabPage(UploadersConfigForm form) => form.tpPomf;
}
public class Pomf : FileUploader
{
// Pomf clones: https://docs.google.com/spreadsheets/d/1kh1TZdtyX7UlRd55OBxf7DB-JGj2rsfWckI0FPQRYhE
public static List<PomfUploader> Uploaders = new List<PomfUploader>()
{
//new PomfUploader("https://pomf.se/upload.php"),
new PomfUploader("http://1339.cf/upload.php", "http://b.1339.cf"),
new PomfUploader("https://catgirlsare.sexy/upload.php"),
new PomfUploader("http://comfy.moe/upload.php"),
new PomfUploader("https://cocaine.ninja/upload.php"),
new PomfUploader("https://cuntflaps.me/upload.php"),
new PomfUploader("http://files.plebeianparty.com/upload.php", "http://a.plebeianparty.com"),
new PomfUploader("http://g.zxq.co/upload.php", "http://y.zxq.co"),
new PomfUploader("http://glop.me/upload.php", "http://gateway.glop.me/ipfs"),
new PomfUploader("http://kyaa.sg/upload.php", "https://r.kyaa.sg"),
new PomfUploader("https://maxfile.ro/static/upload.php", "https://d2.maxfile.ro"),
new PomfUploader("https://mixtape.moe/upload.php"),
new PomfUploader("https://nigger.cat/upload.php"),
new PomfUploader("https://pomf.cat/upload.php", "https://a.pomf.cat"),
new PomfUploader("http://pomf.hummingbird.moe/upload.php", "http://a.pomf.hummingbird.moe"),
new PomfUploader("https://pomf.is/upload.php"),
new PomfUploader("http://reich.io/upload.php"),
new PomfUploader("https://sugoi.vidyagam.es/upload.php"),
new PomfUploader("http://up.che.moe/upload.php", "http://cdn.che.moe"),
new PomfUploader("https://filebunker.pw/upload.php"),
new PomfUploader("https://p.fuwafuwa.moe/upload.php")
};
public PomfUploader Uploader { get; private set; }
public Pomf(PomfUploader uploader)
{
Uploader = uploader;
}
public override UploadResult Upload(Stream stream, string fileName)
{
UploadResult result = UploadData(stream, Uploader.UploadURL, fileName, "files[]");
if (result.IsSuccess)
{
PomfResponse response = JsonConvert.DeserializeObject<PomfResponse>(result.Response);
if (response.success && response.files != null && response.files.Count > 0)
{
string url = response.files[0].url;
if (!URLHelpers.HasPrefix(url) && !string.IsNullOrEmpty(Uploader.ResultURL))
{
url = URLHelpers.CombineURL(Uploader.ResultURL, url);
}
result.URL = url;
}
}
return result;
}
public static string TestUploaders()
{
List<PomfTest> successful = new List<PomfTest>();
List<PomfTest> failed = new List<PomfTest>();
using (MemoryStream ms = new MemoryStream())
{
using (Image logo = ShareXResources.Logo)
{
logo.Save(ms, ImageFormat.Png);
}
foreach (PomfUploader uploader in Uploaders)
{
try
{
Pomf pomf = new Pomf(uploader);
string filename = Helpers.GetRandomAlphanumeric(10) + ".png";
Stopwatch timer = Stopwatch.StartNew();
UploadResult result = pomf.Upload(ms, filename);
long uploadTime = timer.ElapsedMilliseconds;
if (result != null && result.IsSuccess && !string.IsNullOrEmpty(result.URL))
{
successful.Add(new PomfTest { Name = uploader.ToString(), UploadTime = uploadTime });
}
else
{
failed.Add(new PomfTest { Name = uploader.ToString() });
}
}
catch (Exception e)
{
DebugHelper.WriteException(e);
failed.Add(new PomfTest { Name = uploader.ToString() });
}
}
}
return string.Format("Successful uploads ({0}):\r\n\r\n{1}\r\n\r\nFailed uploads ({2}):\r\n\r\n{3}",
successful.Count, string.Join("\r\n", successful.OrderBy(x => x.UploadTime)), failed.Count, string.Join("\r\n", failed));
}
private class PomfResponse
{
public bool success { get; set; }
public object error { get; set; }
public List<PomfFile> files { get; set; }
}
private class PomfFile
{
public string hash { get; set; }
public string name { get; set; }
public string url { get; set; }
public string size { get; set; }
}
private class PomfTest
{
public string Name { get; set; }
public long UploadTime { get; set; } = -1;
public override string ToString()
{
if (UploadTime >= 0)
{
return $"{Name} ({UploadTime}ms)";
}
return Name;
}
}
}
}