Example #1
0
        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);
        }
Example #2
0
        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);
            }
        }
Example #3
0
        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);
        }
Example #4
0
        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;
        }
Example #5
0
        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);
            }
        }
Example #6
0
        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;
            }
        }