Пример #1
0
        /// <summary>get first file that is a match in the filesystem</summary>
        /// <param name="extensions">comma seperated string with extensions</param>
        /// <param name="colorInfo">null by default; will be wildcarded if null</param>
        /// <returns>false if no file exists for any passed-in extensions - extends the ImageTreeFile accordingly otherwise and returns true</returns>
        public bool ExtendToFirstExistingFile(string extensions, ColorInfo colorInfo = null)
        {
            //try
            //{
            var itf = new ImageTreeFile(FullName);

            itf.Color = colorInfo ?? new ColorInfo("#0DEAD0");
            itf.Ext   = "*";
            var searchPattern = colorInfo == null?itf.NameWithExtension.Replace("_0DEAD0", "*") : itf.NameWithExtension;

            string[] dirEntries = Directory.GetFileSystemEntries(Path, searchPattern);
            string[] extArray   = extensions.Split(new char[] { ',', ' ' }, StringSplitOptions.RemoveEmptyEntries);
            if (extArray.Length > 0)
            {
                foreach (var dirEntry in dirEntries)
                {
                    itf = new ImageTreeFile(dirEntry);
                    foreach (string extension in extArray)
                    {
                        if (extension == itf.Ext)
                        {
                            Ext   = extension;
                            Color = itf.Color;
                            if (ImageNumber == NoImageNumber)   // BildInArbeit.tiff requested; BildInArbeit_01.tiff exists => take it
                            {
                                ImageNumber = new ImageTreeFile(dirEntry).ImageNumber;
                            }
                            return(true);
                        }
                    }
                }
            }
            //}
            //catch (DirectoryNotFoundException) { }
            //catch (FileNotFoundException) { }
            //catch (Exception) { }
            return(false);
        }
Пример #2
0
 /// <summary>
 /// convert string representation into ImageFile representation
 /// </summary>
 /// <example>"c:/temp/kill/308024_01_200x300,4x4tile-17.tiff"</example>
 /// <remarks>new features
 /// + removes/replaces name prefixes for iphones and windows phones
 /// + removes blanks (-> caMelCase)</remarks>
 protected void Parse()
 {
     #region translate special phone and camera naming conventions - removed; RSB 20150705
     Name = BlankToCamelCase(
         Name
         .Replace("_Film", "Film_")
         .Replace("(", "")
         .Replace(")", ""));
     if (Name.ToUpper().StartsWith("WP_20"))
     {
         Name = Name.Substring(5);
     }
     if (Name.ToLower().StartsWith("photo-"))
     {
         Name = DateTimeOffset.UtcNow.ToString("yyMMdd") + "_" + Name.Substring(6);
     }
     if (Name.ToLower().StartsWith("photo") || Name.ToLower().StartsWith("image"))
     {
         Name = DateTimeOffset.UtcNow.ToString("yyMMdd") + Name.Substring(5);
     }
     if (Name.ToUpper().StartsWith("IMG") || Name.ToUpper().StartsWith("_MG"))
     {
         Name = DateTimeOffset.UtcNow.ToString("yyMMdd") + Name.Substring(3);
     }
     if (Name.StartsWith("20") && Name.Length > 5 && Name.Substring(0, 5).Contains('-')) // assume: u: 2008-06-15 21.15.07Z
     {
         var fields = Name.Split(new char[] { '-', ' ', '.', ':' });
         Name = (int.Parse(fields[0]) - 2000).ToString("D2") + fields[1] + fields[2] + fields[3] + "_" + fields[4] + fields[5];
     }
     #endregion
     int j, k;
     var csvValues = base.Name.Split(new char[] { ',' });
     #region Sku, Color, ImageNumber and NameExt
     var parts = csvValues[0].Split(new char[] { '_' });
     j           = parts.Length;
     imageNumber = NoImageNumber;
     Color       = null;
     NameExt     = string.Empty;
     if (j == 2) // Sku_Number or Sku_NameExt => Sku_Dye without Number is not allowed
     {
         if (char.IsLetter(parts[1][0]))
         {
             NameExt = parts[1];
         }
         else
         {
             SetImageNumber(parts[1]);
         }
     }
     else if (j == 3)    // Sku_Dye_Number or Sku_Number_NameExt
     {
         ColorInfo cInfo;
         if (parts[1].Length != 6 || (cInfo = new ColorInfo("#" + parts[1])).Color == System.Drawing.Color.Empty)    // throws FormatException
         {
             SetImageNumber(parts[1]);
             NameExt = BlankToCamelCase(parts[2]);
         }
         else
         {
             Color = cInfo;
             SetImageNumber(parts[2]);
             NameExt = null;
         }
     }
     else if (j >= 4) // Sku_Dye_Number_NameExt or Sku_Number_NameExt_SomeOtherStuff
     {
         ColorInfo cInfo         = null;
         bool      correctLength = parts[1].Length == 6;
         if (correctLength)
         {
             cInfo = new ColorInfo("#" + parts[1]);
         }
         if (correctLength && cInfo.Color != System.Drawing.Color.Empty)
         {
             Color = cInfo;
             SetImageNumber(parts[2]);
             NameExt = BlankToCamelCase(parts[3]);
         }
         else
         {
             Color = null;
             SetImageNumber(parts[1]);
             NameExt = BlankToCamelCase(parts[2]);;
         }
     }
     Sku = parts[0]; // also sets topdir and subdir if called for a ImageTreeFile since property Sku is virtual
     #endregion
     #region TileTemplate
     if (csvValues.Length > 1)
     {
         tileTemplate = csvValues[1];
         k            = tileTemplate.IndexOf('-');
         if (k >= 0)
         {
             string tileNumberString = tileTemplate.Substring(k + 1);
             #region only keep leading digits for tileNumberString
             int i   = 0;
             int len = tileNumberString.Length;
             while (i < len && char.IsDigit(tileNumberString[i]))
             {
                 i++;
             }
             if (i < len)
             {
                 tileNumberString = tileNumberString.Remove(i);
             }
             #endregion
             tileNumber   = tileNumberString;
             tileTemplate = tileTemplate.Substring(0, k);
         }
         else
         {
             tileNumber = string.Empty;
         }
     }
     #endregion
 }