private ImageLink GetSingleImageFromUrlWithKnownExtention(Post post, string outputPath, string extention, CancellationToken token, bool appendExtensionToUrl = false, string prefixSubDomain = "") { token.ThrowIfCancellationRequested(); var ext = extention.StartsWith(".") ? extention : "." + extention; var url = post.Url.ToString().Replace("&", "&"); if (appendExtensionToUrl) { url = url + ext; } if (!string.IsNullOrWhiteSpace(prefixSubDomain)) { url = url.Insert(url.IndexOf("//") + 2, prefixSubDomain + "."); } var filename = GetFilename(post, outputPath); filename = filename.EndsWith(ext) ? filename : filename + ext; OutputLine($"\tAdding Link {url}", true); var link = new ImageLink(post, url, filename); return(link); }
private async Task <Boolean> SaveFile(ImageLink imageLink, String filename, String extention) { using (var wc = new WebClient()) { try { var uri = new Uri(imageLink.Url); var domain = uri.DnsSafeHost; var link = imageLink.Url.StartsWith("http://") ? imageLink.Url : "http://" + imageLink.Url.Substring(imageLink.Url.IndexOf(domain, StringComparison.Ordinal)); var tempFilename = Path.GetTempPath() + Path.GetRandomFileName() + extention; await wc.DownloadFileTaskAsync(new Uri( link ), tempFilename); using (var stream = new FileStream(tempFilename, FileMode.Open, FileAccess.Read)) { using (var image = Image.FromStream(stream)) { //XPTitle SetImageProperty(image, 40091, Encoding.Unicode.GetBytes(imageLink.Post.Title + Char.MinValue)); //XPComment SetImageProperty(image, 40092, Encoding.Unicode.GetBytes(link + Char.MinValue)); //XPAuthor SetImageProperty(image, 40093, Encoding.Unicode.GetBytes(imageLink.Post.AuthorName + Char.MinValue)); //XPKeywords SetImageProperty(image, 40094, Encoding.Unicode.GetBytes(imageLink.Post.SubredditName + ";" + imageLink.Post.AuthorName + ";" + imageLink.Post.AuthorFlairText + ";" + imageLink.Post.Domain + Char.MinValue)); //Save to desination image.Save(filename); } } //Delete temp file after web client has been disposed (makes sure no handles to file left over) File.Delete(tempFilename); OutputLine($"Downloaded: {imageLink.Url} to {filename}", true); } catch (OperationCanceledException) { throw; } catch (Exception e) { OutputLine($"Error: {imageLink.Url} to {filename}", true); OutputLine(e.Message, true); return(false); } return(true); } }
public static string GetPostDetails(ImageLink imageLink, KeyValuePair <string, List <ImageLink> > post) { var sb = new StringBuilder(); sb.AppendLine($"Subreddit:\t{imageLink?.Post.SubredditName}"); sb.Append($"User:\t\t{imageLink?.Post.AuthorName}"); sb.Append(string.IsNullOrWhiteSpace(imageLink?.Post.AuthorFlairText) ? string.Empty : imageLink?.Post.AuthorFlairText); sb.AppendLine(); if (imageLink?.Post?.Title != null) { sb.AppendLine(imageLink.Post.NSFW ? " - NSFW" : ""); sb.AppendLine($"Post:\t\t{imageLink?.Post.Title}"); sb.AppendLine($"Score:\t\t{imageLink?.Post.Score}"); sb.AppendLine($"Link:\t\t{imageLink?.Post.Url}"); sb.AppendLine(); if (!string.IsNullOrWhiteSpace(imageLink?.Post.SelfText)) { sb.AppendLine(); sb.AppendLine($"Message:\t\t{imageLink?.Post.SelfText}"); sb.AppendLine(); } sb.AppendLine($"Images:\t\t{post.Value.Count}"); sb.AppendLine(); } foreach (var link in post.Value) { sb.AppendLine(link.Url); } var details = sb.ToString(); return(details); }
public static string GetPostDetails(ImageLink imageLink, KeyValuePair<string, List<ImageLink>> post) { var sb = new StringBuilder(); sb.AppendLine($"Subreddit:\t{imageLink?.Post.SubredditName}"); sb.Append($"User:\t\t{imageLink?.Post.AuthorName}"); sb.Append(string.IsNullOrWhiteSpace(imageLink?.Post.AuthorFlairText) ? string.Empty : imageLink?.Post.AuthorFlairText); sb.AppendLine(); if (imageLink?.Post?.Title != null) { sb.AppendLine(imageLink.Post.NSFW ? " - NSFW" : ""); sb.AppendLine($"Post:\t\t{imageLink?.Post.Title}"); sb.AppendLine($"Score:\t\t{imageLink?.Post.Score}"); sb.AppendLine($"Link:\t\t{imageLink?.Post.Url}"); sb.AppendLine(); if (!string.IsNullOrWhiteSpace(imageLink?.Post.SelfText)) { sb.AppendLine(); sb.AppendLine($"Message:\t\t{imageLink?.Post.SelfText}"); sb.AppendLine(); } sb.AppendLine($"Images:\t\t{post.Value.Count}"); sb.AppendLine(); } foreach (var link in post.Value) { sb.AppendLine(link.Url); } var details = sb.ToString(); return details; }
private async Task <bool> SaveFile(ImageLink imageLink, string filename, string extention) { var isImage = videoExtensions.Contains(extention.Replace(".", "")); using (var wc = new WebClient()) { try { var uri = new Uri(imageLink.Url); var domain = uri.DnsSafeHost; var link = imageLink.Url.StartsWith("http://") ? imageLink.Url : "http://" + imageLink.Url.Substring(imageLink.Url.IndexOf(domain, StringComparison.Ordinal)); var tempFilename = isImage ? Path.GetTempPath() + Path.GetRandomFileName() + extention : filename; await wc.DownloadFileTaskAsync(new Uri(link), tempFilename); if (isImage) { using (var stream = new FileStream(tempFilename, FileMode.Open, FileAccess.Read)) { using (var image = Image.FromStream(stream)) { //XPTitle SetImageProperty(image, 40091, Encoding.Unicode.GetBytes(imageLink.Post.Title + char.MinValue)); //XPComment SetImageProperty(image, 40092, Encoding.Unicode.GetBytes(link + char.MinValue)); //XPAuthor SetImageProperty(image, 40093, Encoding.Unicode.GetBytes(imageLink.Post.AuthorName + char.MinValue)); //XPKeywords var keywords = new List <string> { imageLink.Post.SubredditName, imageLink.Post.AuthorName, imageLink.Post.AuthorFlairText, imageLink.Post.Domain, imageLink.Post.LinkFlairText }; if (imageLink.Post.NSFW) { keywords.Add("NSFW"); } var title = imageLink.Post.Title .Replace('(', '[') .Replace(')', ']') .Replace('{', '[') .Replace('}', ']'); keywords.AddRange(from Match match in Regex.Matches(title, @"\[(.*?)\]") select match.Groups[1].Value.Replace(" ", "")); SetImageProperty(image, 40094, Encoding.Unicode.GetBytes(string.Join(";", keywords) + char.MinValue)); //Save to desination image.Save(filename); } } } //Delete temp file after web client has been disposed (makes sure no handles to file left over) if (isImage) { File.Delete(tempFilename); } OutputLine($"Downloaded: {imageLink.Url} to {filename}", true); } catch (OperationCanceledException) { throw; } catch (Exception e) { OutputLine($"Error: {imageLink.Url} to {filename}", true); OutputLine(e.Message, true); return(false); } return(true); } }
private async Task<bool> SaveFile(ImageLink imageLink, string filename, string extention) { using (var wc = new WebClient()) { try { var uri = new Uri(imageLink.Url); var domain = uri.DnsSafeHost; var link = imageLink.Url.StartsWith("http://") ? imageLink.Url : "http://" + imageLink.Url.Substring(imageLink.Url.IndexOf(domain, StringComparison.Ordinal)); var tempFilename = Path.GetTempPath() + Path.GetRandomFileName() + extention; await wc.DownloadFileTaskAsync(new Uri(link), tempFilename); using (var stream = new FileStream(tempFilename, FileMode.Open, FileAccess.Read)) { using (var image = Image.FromStream(stream)) { //XPTitle SetImageProperty(image, 40091, Encoding.Unicode.GetBytes(imageLink.Post.Title + char.MinValue)); //XPComment SetImageProperty(image, 40092, Encoding.Unicode.GetBytes(link + char.MinValue)); //XPAuthor SetImageProperty(image, 40093, Encoding.Unicode.GetBytes(imageLink.Post.AuthorName + char.MinValue)); //XPKeywords SetImageProperty(image, 40094, Encoding.Unicode.GetBytes(imageLink.Post.SubredditName + ";" + imageLink.Post.AuthorName + ";" + imageLink.Post.AuthorFlairText + ";" + imageLink.Post.Domain + char.MinValue)); //Save to desination image.Save(filename); } } //Delete temp file after web client has been disposed (makes sure no handles to file left over) File.Delete(tempFilename); OutputLine($"Downloaded: {imageLink.Url} to {filename}", true); } catch (OperationCanceledException) { throw; } catch (Exception e) { OutputLine($"Error: {imageLink.Url} to {filename}", true); OutputLine(e.Message, true); return false; } return true; } }