diff --git a/ShareX.UploadersLib/URLShorteners/AdFlyURLShortener.cs b/ShareX.UploadersLib/URLShorteners/AdFlyURLShortener.cs index a1dac8d18..c961dfa87 100644 --- a/ShareX.UploadersLib/URLShorteners/AdFlyURLShortener.cs +++ b/ShareX.UploadersLib/URLShorteners/AdFlyURLShortener.cs @@ -29,6 +29,25 @@ You should have received a copy of the GNU General Public License namespace ShareX.UploadersLib.URLShorteners { + public class AdFlyURLShortenerService : URLShortenerService + { + public override UrlShortenerType EnumValue { get; } = UrlShortenerType.AdFly; + + public override bool CheckConfig(UploadersConfig uploadersConfig) + { + return !string.IsNullOrEmpty(uploadersConfig.AdFlyAPIKEY) && !string.IsNullOrEmpty(uploadersConfig.AdFlyAPIUID); + } + + public override URLShortener CreateShortener(UploadersConfig uploadersConfig) + { + return new AdFlyURLShortener + { + APIKEY = uploadersConfig.AdFlyAPIKEY, + APIUID = uploadersConfig.AdFlyAPIUID + }; + } + } + public class AdFlyURLShortener : URLShortener { public string APIKEY { get; set; } diff --git a/ShareX.UploadersLib/URLShorteners/CoinURLShortener.cs b/ShareX.UploadersLib/URLShorteners/CoinURLShortener.cs index 4c4475add..f96dc5ced 100644 --- a/ShareX.UploadersLib/URLShorteners/CoinURLShortener.cs +++ b/ShareX.UploadersLib/URLShorteners/CoinURLShortener.cs @@ -29,6 +29,24 @@ You should have received a copy of the GNU General Public License namespace ShareX.UploadersLib.URLShorteners { + public class CoinURLShortenerService : URLShortenerService + { + public override UrlShortenerType EnumValue { get; } = UrlShortenerType.CoinURL; + + public override bool CheckConfig(UploadersConfig uploadersConfig) + { + return !string.IsNullOrEmpty(uploadersConfig.CoinURLUUID); + } + + public override URLShortener CreateShortener(UploadersConfig uploadersConfig) + { + return new CoinURLShortener + { + UUID = uploadersConfig.CoinURLUUID + }; + } + } + public sealed class CoinURLShortener : URLShortener { private const string API_ENDPOINT = "https://coinurl.com/api.php"; diff --git a/ShareX.UploadersLib/URLShorteners/CustomURLShortener.cs b/ShareX.UploadersLib/URLShorteners/CustomURLShortener.cs index c749a7ff1..e563fac21 100644 --- a/ShareX.UploadersLib/URLShorteners/CustomURLShortener.cs +++ b/ShareX.UploadersLib/URLShorteners/CustomURLShortener.cs @@ -23,12 +23,36 @@ You should have received a copy of the GNU General Public License #endregion License Information (GPL v3) +using ShareX.HelpersLib; using System; using System.Collections.Generic; using System.Linq; namespace ShareX.UploadersLib.URLShorteners { + public class CustomURLShortenerService : URLShortenerService + { + public override UrlShortenerType EnumValue { get; } = UrlShortenerType.CustomURLShortener; + + public override bool CheckConfig(UploadersConfig uploadersConfig) + { + return uploadersConfig.CustomUploadersList != null && uploadersConfig.CustomUploadersList.IsValidIndex(uploadersConfig.CustomURLShortenerSelected); + } + + public override URLShortener CreateShortener(UploadersConfig uploadersConfig) + { + // TODO: Check TaskSettings override index (WorkerTask.GetCustomUploader) + CustomUploaderItem customUploader = uploadersConfig.CustomUploadersList.ReturnIfValidIndex(uploadersConfig.CustomURLShortenerSelected); + + if (customUploader != null) + { + return new CustomURLShortener(customUploader); + } + + return null; + } + } + public sealed class CustomURLShortener : URLShortener { private CustomUploaderItem customUploader; diff --git a/ShareX.UploadersLib/URLShorteners/GoogleURLShortener.cs b/ShareX.UploadersLib/URLShorteners/GoogleURLShortener.cs index bb60b671e..8159b4805 100644 --- a/ShareX.UploadersLib/URLShorteners/GoogleURLShortener.cs +++ b/ShareX.UploadersLib/URLShorteners/GoogleURLShortener.cs @@ -30,6 +30,21 @@ You should have received a copy of the GNU General Public License namespace ShareX.UploadersLib.URLShorteners { + public class GoogleURLShortenerService : URLShortenerService + { + public override UrlShortenerType EnumValue { get; } = UrlShortenerType.Google; + + public override bool CheckConfig(UploadersConfig uploadersConfig) + { + return uploadersConfig.GoogleURLShortenerAccountType == AccountType.Anonymous || OAuth2Info.CheckOAuth(uploadersConfig.GoogleURLShortenerOAuth2Info); + } + + public override URLShortener CreateShortener(UploadersConfig uploadersConfig) + { + return new GoogleURLShortener(uploadersConfig.GoogleURLShortenerAccountType, APIKeys.GoogleAPIKey, uploadersConfig.GoogleURLShortenerOAuth2Info); + } + } + public class GoogleURLShortener : URLShortener, IOAuth2 { public AccountType UploadMethod { get; set; } diff --git a/ShareX.UploadersLib/URLShorteners/IsgdURLShortener.cs b/ShareX.UploadersLib/URLShorteners/IsgdURLShortener.cs index 8011a23bd..f53d1d0c8 100644 --- a/ShareX.UploadersLib/URLShorteners/IsgdURLShortener.cs +++ b/ShareX.UploadersLib/URLShorteners/IsgdURLShortener.cs @@ -28,6 +28,18 @@ You should have received a copy of the GNU General Public License namespace ShareX.UploadersLib.URLShorteners { + public class IsgdURLShortenerService : URLShortenerService + { + public override UrlShortenerType EnumValue { get; } = UrlShortenerType.ISGD; + + public override bool CheckConfig(UploadersConfig uploadersConfig) => true; + + public override URLShortener CreateShortener(UploadersConfig uploadersConfig) + { + return new IsgdURLShortener(); + } + } + public class IsgdURLShortener : URLShortener { protected virtual string APIURL { get { return "http://is.gd/create.php"; } } diff --git a/ShareX.UploadersLib/URLShorteners/PolrURLShortener.cs b/ShareX.UploadersLib/URLShorteners/PolrURLShortener.cs index 86d062dc2..eb4bb2881 100644 --- a/ShareX.UploadersLib/URLShorteners/PolrURLShortener.cs +++ b/ShareX.UploadersLib/URLShorteners/PolrURLShortener.cs @@ -30,6 +30,25 @@ You should have received a copy of the GNU General Public License namespace ShareX.UploadersLib.URLShorteners { + public class PolrURLShortenerService : URLShortenerService + { + public override UrlShortenerType EnumValue { get; } = UrlShortenerType.Polr; + + public override bool CheckConfig(UploadersConfig uploadersConfig) + { + return !string.IsNullOrEmpty(uploadersConfig.PolrAPIKey); + } + + public override URLShortener CreateShortener(UploadersConfig uploadersConfig) + { + return new PolrURLShortener + { + API_HOST = uploadersConfig.PolrAPIHostname, + API_KEY = uploadersConfig.PolrAPIKey + }; + } + } + public sealed class PolrURLShortener : URLShortener { public string API_HOST { get; set; } diff --git a/ShareX.UploadersLib/URLShorteners/QRnetURLShortener.cs b/ShareX.UploadersLib/URLShorteners/QRnetURLShortener.cs index 31ca16045..442912885 100644 --- a/ShareX.UploadersLib/URLShorteners/QRnetURLShortener.cs +++ b/ShareX.UploadersLib/URLShorteners/QRnetURLShortener.cs @@ -30,6 +30,18 @@ You should have received a copy of the GNU General Public License namespace ShareX.UploadersLib.URLShorteners { + public class QRnetURLShortenerService : URLShortenerService + { + public override UrlShortenerType EnumValue { get; } = UrlShortenerType.QRnet; + + public override bool CheckConfig(UploadersConfig uploadersConfig) => true; + + public override URLShortener CreateShortener(UploadersConfig uploadersConfig) + { + return new QRnetURLShortener(); + } + } + public sealed class QRnetURLShortener : URLShortener { private const string API_ENDPOINT = "http://qr.net/api/short"; diff --git a/ShareX.UploadersLib/URLShorteners/TinyURLShortener.cs b/ShareX.UploadersLib/URLShorteners/TinyURLShortener.cs index 7b1145b91..ec780ff01 100644 --- a/ShareX.UploadersLib/URLShorteners/TinyURLShortener.cs +++ b/ShareX.UploadersLib/URLShorteners/TinyURLShortener.cs @@ -27,6 +27,18 @@ You should have received a copy of the GNU General Public License namespace ShareX.UploadersLib.URLShorteners { + public class TinyURLShortenerService : URLShortenerService + { + public override UrlShortenerType EnumValue { get; } = UrlShortenerType.TINYURL; + + public override bool CheckConfig(UploadersConfig uploadersConfig) => true; + + public override URLShortener CreateShortener(UploadersConfig uploadersConfig) + { + return new TinyURLShortener(); + } + } + public sealed class TinyURLShortener : URLShortener { public override UploadResult ShortenURL(string url) diff --git a/ShareX.UploadersLib/URLShorteners/TurlURLShortener.cs b/ShareX.UploadersLib/URLShorteners/TurlURLShortener.cs index 6bb1fb047..f00d392eb 100644 --- a/ShareX.UploadersLib/URLShorteners/TurlURLShortener.cs +++ b/ShareX.UploadersLib/URLShorteners/TurlURLShortener.cs @@ -27,6 +27,18 @@ You should have received a copy of the GNU General Public License namespace ShareX.UploadersLib.URLShorteners { + public class TurlURLShortenerService : URLShortenerService + { + public override UrlShortenerType EnumValue { get; } = UrlShortenerType.TURL; + + public override bool CheckConfig(UploadersConfig uploadersConfig) => true; + + public override URLShortener CreateShortener(UploadersConfig uploadersConfig) + { + return new TurlURLShortener(); + } + } + public sealed class TurlURLShortener : URLShortener { public override UploadResult ShortenURL(string url) diff --git a/ShareX.UploadersLib/URLShorteners/TwoGPURLShortener.cs b/ShareX.UploadersLib/URLShorteners/TwoGPURLShortener.cs index 4d6953e10..88846c3ff 100644 --- a/ShareX.UploadersLib/URLShorteners/TwoGPURLShortener.cs +++ b/ShareX.UploadersLib/URLShorteners/TwoGPURLShortener.cs @@ -30,6 +30,18 @@ You should have received a copy of the GNU General Public License namespace ShareX.UploadersLib.URLShorteners { + public class TwoGPURLShortenerService : URLShortenerService + { + public override UrlShortenerType EnumValue { get; } = UrlShortenerType.TwoGP; + + public override bool CheckConfig(UploadersConfig uploadersConfig) => true; + + public override URLShortener CreateShortener(UploadersConfig uploadersConfig) + { + return new TwoGPURLShortener(); + } + } + public sealed class TwoGPURLShortener : URLShortener { private const string API_ENDPOINT = "http://2.gp/api/short"; diff --git a/ShareX.UploadersLib/URLShorteners/VURLShortener.cs b/ShareX.UploadersLib/URLShorteners/VURLShortener.cs index 950f48cae..9cdcce29b 100644 --- a/ShareX.UploadersLib/URLShorteners/VURLShortener.cs +++ b/ShareX.UploadersLib/URLShorteners/VURLShortener.cs @@ -29,6 +29,18 @@ You should have received a copy of the GNU General Public License namespace ShareX.UploadersLib.URLShorteners { + public class VURLShortenerService : URLShortenerService + { + public override UrlShortenerType EnumValue { get; } = UrlShortenerType.VURL; + + public override bool CheckConfig(UploadersConfig uploadersConfig) => true; + + public override URLShortener CreateShortener(UploadersConfig uploadersConfig) + { + return new VURLShortener(); + } + } + public sealed class VURLShortener : URLShortener { private const string API_ENDPOINT = "http://vurl.com/api.php"; diff --git a/ShareX.UploadersLib/URLShorteners/VgdURLShortener.cs b/ShareX.UploadersLib/URLShorteners/VgdURLShortener.cs index 98ea73efa..b52cef77a 100644 --- a/ShareX.UploadersLib/URLShorteners/VgdURLShortener.cs +++ b/ShareX.UploadersLib/URLShorteners/VgdURLShortener.cs @@ -25,6 +25,18 @@ You should have received a copy of the GNU General Public License namespace ShareX.UploadersLib.URLShorteners { + public class VgdURLShortenerService : URLShortenerService + { + public override UrlShortenerType EnumValue { get; } = UrlShortenerType.VGD; + + public override bool CheckConfig(UploadersConfig uploadersConfig) => true; + + public override URLShortener CreateShortener(UploadersConfig uploadersConfig) + { + return new VgdURLShortener(); + } + } + public class VgdURLShortener : IsgdURLShortener { protected override string APIURL { get { return "http://v.gd/create.php"; } } diff --git a/ShareX.UploadersLib/URLShorteners/YourlsURLShortener.cs b/ShareX.UploadersLib/URLShorteners/YourlsURLShortener.cs index 860d02a03..c497a7da4 100644 --- a/ShareX.UploadersLib/URLShorteners/YourlsURLShortener.cs +++ b/ShareX.UploadersLib/URLShorteners/YourlsURLShortener.cs @@ -28,6 +28,28 @@ You should have received a copy of the GNU General Public License namespace ShareX.UploadersLib.URLShorteners { + public class YourlsURLShortenerService : URLShortenerService + { + public override UrlShortenerType EnumValue { get; } = UrlShortenerType.YOURLS; + + public override bool CheckConfig(UploadersConfig uploadersConfig) + { + return !string.IsNullOrEmpty(uploadersConfig.YourlsAPIURL) && (!string.IsNullOrEmpty(uploadersConfig.YourlsSignature) || + (!string.IsNullOrEmpty(uploadersConfig.YourlsUsername) && !string.IsNullOrEmpty(uploadersConfig.YourlsPassword))); + } + + public override URLShortener CreateShortener(UploadersConfig uploadersConfig) + { + return new YourlsURLShortener + { + APIURL = uploadersConfig.YourlsAPIURL, + Signature = uploadersConfig.YourlsSignature, + Username = uploadersConfig.YourlsUsername, + Password = uploadersConfig.YourlsPassword + }; + } + } + public sealed class YourlsURLShortener : URLShortener { public string APIURL { get; set; } diff --git a/ShareX.UploadersLib/UploadersConfig.cs b/ShareX.UploadersLib/UploadersConfig.cs index 65f75a4b6..521e198b1 100644 --- a/ShareX.UploadersLib/UploadersConfig.cs +++ b/ShareX.UploadersLib/UploadersConfig.cs @@ -432,22 +432,6 @@ public bool IsValid(UrlShortenerType destination) return service.CheckConfig(this); } - switch (destination) - { - case UrlShortenerType.Google: - return GoogleURLShortenerAccountType == AccountType.Anonymous || OAuth2Info.CheckOAuth(GoogleURLShortenerOAuth2Info); - case UrlShortenerType.YOURLS: - return !string.IsNullOrEmpty(YourlsAPIURL) && (!string.IsNullOrEmpty(YourlsSignature) || (!string.IsNullOrEmpty(YourlsUsername) && !string.IsNullOrEmpty(YourlsPassword))); - case UrlShortenerType.AdFly: - return !string.IsNullOrEmpty(AdFlyAPIKEY) && !string.IsNullOrEmpty(AdFlyAPIUID); - case UrlShortenerType.CoinURL: - return !string.IsNullOrEmpty(CoinURLUUID); - case UrlShortenerType.Polr: - return !string.IsNullOrEmpty(PolrAPIKey); - case UrlShortenerType.CustomURLShortener: - return CustomUploadersList != null && CustomUploadersList.IsValidIndex(CustomURLShortenerSelected); - } - return true; } diff --git a/ShareX/WorkerTask.cs b/ShareX/WorkerTask.cs index ab04417e6..5e07982fd 100644 --- a/ShareX/WorkerTask.cs +++ b/ShareX/WorkerTask.cs @@ -881,85 +881,16 @@ public UploadResult UploadFile(Stream stream, string fileName) public UploadResult ShortenURL(string url) { - URLShortener urlShortener = null; - URLShortenerService service = UploaderFactory.GetURLShortenerServiceByEnum(Info.TaskSettings.URLShortenerDestination); if (service != null) { - urlShortener = service.CreateShortener(Program.UploadersConfig); - } - else - { - switch (Info.TaskSettings.URLShortenerDestination) - { - case UrlShortenerType.Google: - urlShortener = new GoogleURLShortener(Program.UploadersConfig.GoogleURLShortenerAccountType, APIKeys.GoogleAPIKey, - Program.UploadersConfig.GoogleURLShortenerOAuth2Info); - break; - case UrlShortenerType.ISGD: - urlShortener = new IsgdURLShortener(); - break; - case UrlShortenerType.VGD: - urlShortener = new VgdURLShortener(); - break; - case UrlShortenerType.TINYURL: - urlShortener = new TinyURLShortener(); - break; - case UrlShortenerType.TURL: - urlShortener = new TurlURLShortener(); - break; - case UrlShortenerType.YOURLS: - urlShortener = new YourlsURLShortener - { - APIURL = Program.UploadersConfig.YourlsAPIURL, - Signature = Program.UploadersConfig.YourlsSignature, - Username = Program.UploadersConfig.YourlsUsername, - Password = Program.UploadersConfig.YourlsPassword - }; - break; - case UrlShortenerType.AdFly: - urlShortener = new AdFlyURLShortener - { - APIKEY = Program.UploadersConfig.AdFlyAPIKEY, - APIUID = Program.UploadersConfig.AdFlyAPIUID - }; - break; - case UrlShortenerType.CoinURL: - urlShortener = new CoinURLShortener - { - UUID = Program.UploadersConfig.CoinURLUUID - }; - break; - case UrlShortenerType.QRnet: - urlShortener = new QRnetURLShortener(); - break; - case UrlShortenerType.VURL: - urlShortener = new VURLShortener(); - break; - case UrlShortenerType.TwoGP: - urlShortener = new TwoGPURLShortener(); - break; - case UrlShortenerType.Polr: - urlShortener = new PolrURLShortener - { - API_HOST = Program.UploadersConfig.PolrAPIHostname, - API_KEY = Program.UploadersConfig.PolrAPIKey - }; - break; - case UrlShortenerType.CustomURLShortener: - CustomUploaderItem customUploader = GetCustomUploader(Program.UploadersConfig.CustomURLShortenerSelected); - if (customUploader != null) - { - urlShortener = new CustomURLShortener(customUploader); - } - break; - } - } + URLShortener urlShortener = service.CreateShortener(Program.UploadersConfig); - if (urlShortener != null) - { - return urlShortener.ShortenURL(url); + if (urlShortener != null) + { + return urlShortener.ShortenURL(url); + } } return null;