示例#1
0
        public string GetVlImageFromServerIfAvailable(string vlName)
        {
            try
            {
                vlName = vlName.Trim();
                var imageServiceDirectory = ImageServiceFilesFolder;
                if (!imageServiceDirectory.Exists)
                {
                    imageServiceDirectory.Create();
                }
                var record = Register.FirstOrDefault(r => r.VlName == vlName);
                if (record == null)
                {
                    record = new VlUrlRecord {
                        VlName = vlName
                    };
                    Register.Add(record);
                }

                if (string.IsNullOrWhiteSpace(record.FtpPath))
                {
                    var ftppath = CheckImageForVlAvailable(ref record);
                    if (ftppath == null)
                    {
                        return(null);
                    }
                    record.FtpPath = ftppath;
                }
                if (string.IsNullOrWhiteSpace(record.CdrPath))
                {
                    var cdrFolder = new DirectoryInfo(Path.Combine(IndicoConfiguration.AppConfiguration.PathToDataFolder, "ImageServiceFiles", "CDRFiles"));
                    if (!cdrFolder.Exists)
                    {
                        Directory.CreateDirectory(cdrFolder.FullName);
                    }

                    var fileData = DownloadFile(record.FtpPath);
                    var cdrFile  = new FileInfo(Path.Combine(cdrFolder.FullName, record.ImageFileName + ".cdr"));
                    File.WriteAllBytes(cdrFile.FullName, fileData);
                    record.CdrPath = cdrFile.FullName;
                }

                if (string.IsNullOrWhiteSpace(record.ImagePath))
                {
                    try { ConvertToImage(ref record); }
                    catch (Exception) { /*ignored*/ }
                }

                if (string.IsNullOrEmpty(record.ImagePath))
                {
                    return(null);
                }
                CleanFiles();
                return("/IndicoData/ImageServiceFiles/ImageFiles/" + new FileInfo(record.ImagePath).Name);
            }
            catch (Exception)
            {
                return(null);
            }
        }
示例#2
0
        private void ConvertToImage(ref VlUrlRecord record)
        {
            if (!string.IsNullOrEmpty(record.ImagePath) && string.IsNullOrWhiteSpace(record.CdrPath))
            {
                return;
            }

            var imageFilesFolder = new DirectoryInfo(Path.Combine(IndicoConfiguration.AppConfiguration.PathToDataFolder, "ImageServiceFiles", "ImageFiles"));

            if (!imageFilesFolder.Exists)
            {
                Directory.CreateDirectory(imageFilesFolder.FullName);
            }

            var imageFile = new FileInfo(Path.Combine(imageFilesFolder.FullName, record.ImageFileName + ".png"));

            var pathtoConverter = IndicoConfiguration.AppConfiguration.PathToDataFolder + "\\Applications\\CDRConverter.exe";
            var converter       = new Process
            {
                StartInfo =
                {
                    FileName               = pathtoConverter,
                    RedirectStandardOutput = true,
                    UseShellExecute        = false,
                    Arguments             = string.Format("\"{0}\" \"{1}\"", record.CdrPath, imageFile.FullName),
                    RedirectStandardError = true
                }
            };

            converter.Start();

            converter.WaitForExit();

            if (imageFile.Exists)
            {
                record.ImagePath = imageFile.FullName;
            }
        }
示例#3
0
        private string CheckImageForVlAvailable(ref VlUrlRecord record)
        {
            var vlName = record.VlName.Trim();

            if (!Regex.IsMatch(vlName, @"^[Vv][Ll]\d{1,}$"))
            {
                return(null);
            }
            var folders = GetFilesInAFolder(IndicoConfiguration.AppConfiguration.ImagesFtpUrl);

            if (folders == null)
            {
                return(null);
            }
            folders = folders.Where(f => f.StartsWith("VL")).ToList();
            if (folders.Count < 1)
            {
                return(null);
            }
            var vlNumberMatch = Regex.Match(vlName, @"\d{1,}");
            var vlNumber      = Convert.ToInt32(vlNumberMatch.Value);
            var containFolder = "";

            foreach (var folder in folders)
            {
                var splitted = folder.Split('-');
                if (splitted.Length < 1)
                {
                    continue;
                }
                var startStr   = splitted[0].Trim();
                var endStr     = splitted[1].Trim();
                var startMatch = Regex.Match(startStr, @"\d{1,}");
                var endMatch   = Regex.Match(endStr, @"\d{1,}");
                var start      = Convert.ToInt32(startMatch.Value);
                var end        = Convert.ToInt32(endMatch.Value);
                if (vlNumber >= start && vlNumber <= end)
                {
                    containFolder = folder;
                }
            }
            if (containFolder == "")
            {
                return(null);
            }
            var files = GetFilesInAFolder(IndicoConfiguration.AppConfiguration.ImagesFtpUrl + containFolder);

            if (files == null)
            {
                return(null);
            }
            var targetFile = "";

            foreach (var f in files)
            {
                var fileName = f.TrimEnd('/').Split('/').Last();
                if (!fileName.Trim().StartsWith(vlName))
                {
                    continue;
                }
                record.ImageFileName = fileName.Replace("|||", "");
                targetFile           = f;
                break;
            }
            return(targetFile == "" ? null : "ftp://mail.indico.net.au/" + targetFile);
        }