예제 #1
0
 public void Succeeded(FileDownloadManagerItem item)
 {
     if ((item.Success ?? false) && item.Url.HasValue() && !DownloadedItems.ContainsKey(item.Url))
     {
         DownloadedItems.Add(item.Url, Path.GetFileName(item.Path));
     }
 }
예제 #2
0
        public FileDownloadManagerItem CreateDownloadImage(ImportExecuteContext context, string urlOrPath, int displayOrder)
        {
            try
            {
                var item = new FileDownloadManagerItem
                {
                    Id           = displayOrder,
                    DisplayOrder = displayOrder
                };

                if (urlOrPath.IsWebUrl())
                {
                    // We append quality to avoid importing of image duplicates.
                    item.Url = context.Services.WebHelper.ModifyQueryString(urlOrPath, "q=100", null);

                    if (DownloadedItems.ContainsKey(urlOrPath))
                    {
                        // URL has already been downloaded.
                        item.Success  = true;
                        item.FileName = DownloadedItems[urlOrPath];
                    }
                    else
                    {
                        var localPath = string.Empty;

                        try
                        {
                            // Exclude query string parts!
                            localPath = new Uri(urlOrPath).LocalPath;
                        }
                        catch { }

                        item.FileName = Path.GetFileName(localPath).ToValidFileName().NullEmpty() ?? Path.GetRandomFileName();
                    }

                    item.Path = Path.Combine(ImageDownloadFolder, item.FileName);
                }
                else
                {
                    item.Success  = true;
                    item.FileName = Path.GetFileName(urlOrPath).ToValidFileName().NullEmpty() ?? Path.GetRandomFileName();

                    item.Path = Path.IsPathRooted(urlOrPath)
                        ? urlOrPath
                        : Path.Combine(ImageFolder, urlOrPath);
                }

                item.MimeType = MimeTypes.MapNameToMimeType(item.FileName);

                return(item);
            }
            catch
            {
                context.Result.AddWarning($"Failed to prepare image download for '{urlOrPath.NaIfEmpty()}'. Skipping file.");

                return(null);
            }
        }
예제 #3
0
        public FileDownloadManagerItem CreateDownloadImage(string urlOrPath, string seoName, int displayOrder)
        {
            var item = new FileDownloadManagerItem
            {
                Id           = displayOrder,
                DisplayOrder = displayOrder,
                MimeType     = MimeTypes.MapNameToMimeType(urlOrPath)
            };

            if (item.MimeType.IsEmpty())
            {
                item.MimeType = MediaTypeNames.Image.Jpeg;
            }

            var extension = MimeTypes.MapMimeTypeToExtension(item.MimeType);

            if (extension.HasValue())
            {
                if (urlOrPath.IsWebUrl())
                {
                    item.Url      = urlOrPath;
                    item.FileName = "{0}-{1}".FormatInvariant(seoName, item.Id).ToValidFileName();

                    if (DownloadedItems.ContainsKey(urlOrPath))
                    {
                        item.Path    = Path.Combine(ImageDownloadFolder, DownloadedItems[urlOrPath]);
                        item.Success = true;
                    }
                    else
                    {
                        item.Path = Path.Combine(ImageDownloadFolder, item.FileName + extension.EnsureStartsWith("."));
                    }
                }
                else if (Path.IsPathRooted(urlOrPath))
                {
                    item.Path    = urlOrPath;
                    item.Success = true;
                }
                else
                {
                    item.Path    = Path.Combine(ImageFolder, urlOrPath);
                    item.Success = true;
                }

                return(item);
            }

            return(null);
        }
예제 #4
0
        public FileDownloadManagerItem CreateDownloadImage(ImportExecuteContext context, string urlOrPath, string seoName, int displayOrder)
        {
            var item = new FileDownloadManagerItem
            {
                Id           = displayOrder,
                DisplayOrder = displayOrder,
                MimeType     = MimeTypes.MapNameToMimeType(urlOrPath)
            };

            if (item.MimeType.IsEmpty())
            {
                item.MimeType = MediaTypeNames.Image.Jpeg;
            }

            if (urlOrPath.IsWebUrl())
            {
                item.Url      = context.Services.WebHelper.ModifyQueryString(urlOrPath, "q=100", null);
                item.FileName = "{0}-{1}".FormatInvariant(seoName, item.Id).ToValidFileName();

                if (DownloadedItems.ContainsKey(urlOrPath))
                {
                    item.Path    = Path.Combine(ImageDownloadFolder, DownloadedItems[urlOrPath]);
                    item.Success = true;
                }
                else
                {
                    var extension = MimeTypes.MapMimeTypeToExtension(item.MimeType).NullEmpty() ?? ".jpg";

                    item.Path = Path.Combine(ImageDownloadFolder, item.FileName + extension.EnsureStartsWith("."));
                }
            }
            else if (Path.IsPathRooted(urlOrPath))
            {
                item.Path    = urlOrPath;
                item.Success = true;
            }
            else
            {
                item.Path    = Path.Combine(ImageFolder, urlOrPath);
                item.Success = true;
            }

            return(item);
        }
예제 #5
0
        public static FileDownloadManagerItem ToDownloadItem(this XPathNavigator nav, ICommonServices services, string imageDirectory, int displayOrder)
        {
            var image = new FileDownloadManagerItem
            {
                Id           = nav.GetValue <int>("Id"),
                Url          = nav.GetString("FullSizeImageUrl"),
                MimeType     = nav.GetString("MimeType"),
                DisplayOrder = displayOrder
            };

            if (image.Url.HasValue())
            {
                image.Url = services.WebHelper.ModifyQueryString(image.Url, "q=100", null);

                var extension = MimeTypes.MapMimeTypeToExtension(image.MimeType);
                if (extension.HasValue())
                {
                    if (image.Id == 0)
                    {
                        image.Id = CommonHelper.GenerateRandomInteger();
                    }

                    var seoFileName = nav.GetString("SeoFilename");
                    if (seoFileName.IsEmpty())
                    {
                        seoFileName = CommonHelper.GenerateRandomInteger().ToString();
                    }

                    image.FileName = "{0}-{1}".FormatInvariant(image.Id, seoFileName).ToValidFileName();
                    image.Path     = Path.Combine(imageDirectory, image.FileName + extension.EnsureStartsWith("."));

                    return(image);
                }
            }

            return(null);
        }
예제 #6
0
 public static void AddDownloadItem(this List <FileDownloadManagerItem> images, FileDownloadManagerItem item)
 {
     if (item != null && !images.Any(x => x.Path.IsCaseInsensitiveEqual(item.Path) || x.Id == item.Id))
     {
         images.Add(item);
     }
 }