#region License Information (GPL v3)
/*
ShareX - A program that allows you to take screenshots and share any file type
Copyright © 2007-2015 ShareX Developers
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 .
*/
#endregion License Information (GPL v3)
using Microsoft.VisualBasic.FileIO;
using ShareX.HelpersLib;
using ShareX.Properties;
using ShareX.UploadersLib;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Windows.Forms;
namespace ShareX
{
public class UploadInfoManager
{
public UploadInfoStatus[] SelectedItems { get; private set; }
public UploadInfoStatus SelectedItem
{
get
{
if (IsItemSelected)
{
return SelectedItems[0];
}
return null;
}
}
public bool IsItemSelected
{
get
{
return SelectedItems != null && SelectedItems.Length > 0;
}
}
private ListView lv;
private UploadInfoParser parser;
public UploadInfoManager(ListView listView)
{
lv = listView;
parser = new UploadInfoParser();
}
private void CopyTexts(IEnumerable texts)
{
if (texts != null && texts.Count() > 0)
{
string urls = string.Join("\r\n", texts.ToArray());
if (!string.IsNullOrEmpty(urls))
{
ClipboardHelpers.CopyText(urls);
}
}
}
public void RefreshSelectedItems()
{
if (lv != null && lv.SelectedItems != null && lv.SelectedItems.Count > 0)
{
SelectedItems = lv.SelectedItems.Cast().Select(x => x.Tag as UploadTask).Where(x => x != null && x.Info != null).
Select(x => new UploadInfoStatus(x.Info)).ToArray();
}
else
{
SelectedItems = null;
}
}
#region Open
public void OpenURL()
{
if (IsItemSelected && SelectedItem.IsURLExist) URLHelpers.OpenURL(SelectedItem.Info.Result.URL);
}
public void OpenShortenedURL()
{
if (IsItemSelected && SelectedItem.IsShortenedURLExist) URLHelpers.OpenURL(SelectedItem.Info.Result.ShortenedURL);
}
public void OpenThumbnailURL()
{
if (IsItemSelected && SelectedItem.IsThumbnailURLExist) URLHelpers.OpenURL(SelectedItem.Info.Result.ThumbnailURL);
}
public void OpenDeletionURL()
{
if (IsItemSelected && SelectedItem.IsDeletionURLExist) URLHelpers.OpenURL(SelectedItem.Info.Result.DeletionURL);
}
public void OpenFile()
{
if (IsItemSelected && SelectedItem.IsFileExist) URLHelpers.OpenURL(SelectedItem.Info.FilePath);
}
public void OpenThumbnailFile()
{
if (IsItemSelected && SelectedItem.IsThumbnailFileExist) URLHelpers.OpenURL(SelectedItem.Info.ThumbnailFilePath);
}
public void OpenFolder()
{
if (IsItemSelected && SelectedItem.IsFileExist) Helpers.OpenFolderWithFile(SelectedItem.Info.FilePath);
}
public void TryOpen()
{
if (IsItemSelected)
{
if (SelectedItem.IsShortenedURLExist)
{
URLHelpers.OpenURL(SelectedItem.Info.Result.ShortenedURL);
}
else if (SelectedItem.IsURLExist)
{
URLHelpers.OpenURL(SelectedItem.Info.Result.URL);
}
else if (SelectedItem.IsFileExist)
{
URLHelpers.OpenURL(SelectedItem.Info.FilePath);
}
}
}
#endregion Open
#region Copy
public void CopyURL()
{
if (IsItemSelected) CopyTexts(SelectedItems.Where(x => x.IsURLExist).Select(x => x.Info.Result.URL));
}
public void CopyShortenedURL()
{
if (IsItemSelected) CopyTexts(SelectedItems.Where(x => x.IsShortenedURLExist).Select(x => x.Info.Result.ShortenedURL));
}
public void CopyThumbnailURL()
{
if (IsItemSelected) CopyTexts(SelectedItems.Where(x => x.IsThumbnailURLExist).Select(x => x.Info.Result.ThumbnailURL));
}
public void CopyDeletionURL()
{
if (IsItemSelected) CopyTexts(SelectedItems.Where(x => x.IsDeletionURLExist).Select(x => x.Info.Result.DeletionURL));
}
public void CopyFile()
{
if (IsItemSelected && SelectedItem.IsFileExist) ClipboardHelpers.CopyFile(SelectedItem.Info.FilePath);
}
public void CopyImage()
{
if (IsItemSelected && SelectedItem.IsImageFile) ClipboardHelpers.CopyImageFromFile(SelectedItem.Info.FilePath);
}
public void CopyText()
{
if (IsItemSelected && SelectedItem.IsTextFile) ClipboardHelpers.CopyTextFromFile(SelectedItem.Info.FilePath);
}
public void CopyThumbnailFile()
{
if (IsItemSelected && SelectedItem.IsThumbnailFileExist) ClipboardHelpers.CopyFile(SelectedItem.Info.ThumbnailFilePath);
}
public void CopyThumbnailImage()
{
if (IsItemSelected && SelectedItem.IsThumbnailFileExist) ClipboardHelpers.CopyImageFromFile(SelectedItem.Info.ThumbnailFilePath);
}
public void CopyHTMLLink()
{
if (IsItemSelected) CopyTexts(SelectedItems.Where(x => x.IsURLExist).Select(x => parser.Parse(x.Info, UploadInfoParser.HTMLLink)));
}
public void CopyHTMLImage()
{
if (IsItemSelected) CopyTexts(SelectedItems.Where(x => x.IsImageURL).Select(x => parser.Parse(x.Info, UploadInfoParser.HTMLImage)));
}
public void CopyHTMLLinkedImage()
{
if (IsItemSelected) CopyTexts(SelectedItems.Where(x => x.IsImageURL && x.IsThumbnailURLExist).Select(x => parser.Parse(x.Info, UploadInfoParser.HTMLLinkedImage)));
}
public void CopyForumLink()
{
if (IsItemSelected) CopyTexts(SelectedItems.Where(x => x.IsURLExist).Select(x => parser.Parse(x.Info, UploadInfoParser.ForumLink)));
}
public void CopyForumImage()
{
if (IsItemSelected) CopyTexts(SelectedItems.Where(x => x.IsImageURL).Select(x => parser.Parse(x.Info, UploadInfoParser.ForumImage)));
}
public void CopyForumLinkedImage()
{
if (IsItemSelected) CopyTexts(SelectedItems.Where(x => x.IsImageURL && x.IsThumbnailURLExist).Select(x => parser.Parse(x.Info, UploadInfoParser.ForumLinkedImage)));
}
public void CopyFilePath()
{
if (IsItemSelected) CopyTexts(SelectedItems.Where(x => x.IsFilePathValid).Select(x => x.Info.FilePath));
}
public void CopyFileName()
{
if (IsItemSelected) CopyTexts(SelectedItems.Where(x => x.IsFilePathValid).Select(x => Path.GetFileNameWithoutExtension(x.Info.FilePath)));
}
public void CopyFileNameWithExtension()
{
if (IsItemSelected) CopyTexts(SelectedItems.Where(x => x.IsFilePathValid).Select(x => Path.GetFileName(x.Info.FilePath)));
}
public void CopyFolder()
{
if (IsItemSelected) CopyTexts(SelectedItems.Where(x => x.IsFilePathValid).Select(x => Path.GetDirectoryName(x.Info.FilePath)));
}
public void CopyCustomFormat(string format)
{
if (!string.IsNullOrEmpty(format) && IsItemSelected) CopyTexts(SelectedItems.Where(x => x.IsURLExist).Select(x => parser.Parse(x.Info, format)));
}
#endregion Copy
#region Other
public void ShowImagePreview()
{
if (IsItemSelected && SelectedItem.IsImageFile) ImageViewer.ShowImage(SelectedItem.Info.FilePath);
}
public void ShowErrors()
{
if (IsItemSelected && SelectedItem.Info.Result != null && SelectedItem.Info.Result.IsError)
{
string errors = SelectedItem.Info.Result.ErrorsToString();
if (!string.IsNullOrEmpty(errors))
{
using (ErrorForm form = new ErrorForm(Resources.UploadInfoManager_ShowErrors_Upload_errors, errors, Program.LogsFilePath, Links.URL_ISSUES))
{
form.ShowDialog();
}
}
}
}
public void Upload()
{
if (IsItemSelected && SelectedItem.IsFileExist) UploadManager.UploadFile(SelectedItem.Info.FilePath);
}
public void EditImage()
{
if (IsItemSelected && SelectedItem.IsImageFile) TaskHelpers.OpenImageEditor(SelectedItem.Info.FilePath);
}
public void DeleteFile()
{
if (IsItemSelected && SelectedItem.IsFileExist) FileSystem.DeleteFile(SelectedItem.Info.FilePath, UIOption.OnlyErrorDialogs, RecycleOption.SendToRecycleBin);
}
public void ShortenURL(UrlShortenerType urlShortener)
{
if (IsItemSelected && SelectedItem.IsURLExist) UploadManager.ShortenURL(SelectedItem.Info.Result.ToString(), urlShortener);
}
public void ShareURL(URLSharingServices urlSharingService)
{
if (IsItemSelected && SelectedItem.IsURLExist) UploadManager.ShareURL(SelectedItem.Info.Result.ToString(), urlSharingService);
}
public void ShowQRCode()
{
if (IsItemSelected && SelectedItem.IsURLExist) new QRCodeForm(SelectedItem.Info.Result.URL).Show();
}
public void ShowResponse()
{
if (IsItemSelected && SelectedItem.Info.Result != null && !string.IsNullOrEmpty(SelectedItem.Info.Result.Response))
{
using (ResponseForm form = new ResponseForm(SelectedItem.Info.Result.Response))
{
form.Icon = ShareXResources.Icon;
form.ShowDialog();
}
}
}
#endregion Other
}
}