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); } }
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; } }
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); }