public static void SaveScript(Package.Script script) { using (IDbConnection cnn = new SQLiteConnection(LoadConnectionString())) { try { cnn.Execute(@"insert into Script (PackageId, OSVer, Environment, FileName, Authors, Path, Text, Info, CreationTime, CreationTimeUtc, LastAccessTime, LastAccessTimeUtc, LastWriteTime, LastWriteTimeUtc, Length) values (@PackageId, @OSVer, @Environment, @FileName, @Authors, @Path, @Text, @Info, @CreationTime, @CreationTimeUtc, @LastAccessTime, @LastAccessTimeUtc, @LastWriteTime, @LastWriteTimeUtc, @Length) ", new { PackageID = script.PackageID, OSVer = script.OSVer, Environment = script.Environment, FileName = script.FileName, Authors = script.Authors, Path = script.Path, Text = script.Text, Info = script.Info, CreationTime = script.CreationTime, CreationTimeUtc = script.CreationTimeUtc, LastAccessTime = script.LastAccessTime, LastAccessTimeUtc = script.LastAccessTimeUtc, LastWriteTime = script.LastWriteTime, LastWriteTimeUtc = script.LastWriteTimeUtc, Length = script.Length }); } catch (SQLiteException ex) { if (ex.Message.Contains("UNIQUE")) { cnn.Execute(@"UPDATE Script SET Authors = @Authors, Text = @Text, Info = @Info, CreationTime = @CreationTime, CreationTimeUtc = @CreationTimeUtc, LastAccessTime = @LastAccessTime, LastAccessTimeUtc = @LastAccessTimeUtc, LastWriteTime = @LastWriteTime, LastWriteTimeUtc = @LastWriteTimeUtc, Length = @Length WHERE Path = @Path ", new { PackageID = script.PackageID, OSVer = script.OSVer, Environment = script.Environment, FileName = script.FileName, Authors = script.Authors, Path = script.Path, Text = script.Text, Info = script.Info, CreationTime = script.CreationTime, CreationTimeUtc = script.CreationTimeUtc, LastAccessTime = script.LastAccessTime, LastAccessTimeUtc = script.LastAccessTimeUtc, LastWriteTime = script.LastWriteTime, LastWriteTimeUtc = script.LastWriteTimeUtc, Length = script.Length }); } else { throw; } } } }
public static List <Script> FindScripts(string dir, int maxDepth) { List <FileInfo> FindFiles(List <FileInfo> results, string curDir, int depth) { try { results.AddRange(new DirectoryInfo(curDir).GetFiles("*.pl")); } catch (System.UnauthorizedAccessException) { } if (depth > 1) { try { foreach (DirectoryInfo d in new DirectoryInfo(curDir).GetDirectories()) { FindFiles(results, d.FullName, depth - 1); } } catch (System.UnauthorizedAccessException) { } } return(results); } List <Script> scripts = new List <Script>(); List <FileInfo> fsis = FindFiles(new List <FileInfo>(), dir, maxDepth); foreach (FileInfo fsi in fsis) { if (!SqliteDataAccess.ScriptIsUpToDate(fsi.FullName, UnixTimestampFromDateTime(fsi.LastWriteTimeUtc), fsi.Length)) { string text = File.ReadAllText(fsi.FullName); Regex commentBlocksR = new Regex(@"\=pod(?:(?:(?!\=pod))|(?:[^\*]))*\=cut|\/\/[^\n\r]*(?=[\n\r])", RegexOptions.Multiline); MatchCollection commentBlocks = commentBlocksR.Matches(text); Regex commentLinesR = new Regex(@"#(.*)", RegexOptions.Multiline); MatchCollection commentLines = commentLinesR.Matches(text); Dictionary <string, string> authors = new Dictionary <string, string>(); using (var reader = new StreamReader(@"C:\Users\t-als9xd\source\repos\MSTPackagingHub\MSTPackagingHub\CSV_Database_of_First_Names.csv")) { List <string> firstNames = new List <string>(); while (!reader.EndOfStream) { firstNames.Add(reader.ReadLine().Trim()); } foreach (Match m in commentLines) { foreach (string firstName in firstNames) { Regex firstNameExistsR = new Regex(firstName + @"\s", RegexOptions.Multiline); var test = m.ToString(); var nMatches = firstNameExistsR.Matches(m.ToString()); if (m.Length != 0) { Regex firstNameR = new Regex(firstName + @"\s([A-Z][a-z]*\.?)?\s?([A-Z][a-z]*\,?)?\s?", RegexOptions.Multiline); MatchCollection fNameMatches = firstNameR.Matches(m.ToString()); foreach (Match fnm in fNameMatches) { string fNameResult = fnm.ToString().Replace("\n", "").Replace("\r", "").Trim(); authors[firstName] = fNameResult; } } } } string joinedAuthors = string.Join(", ", authors.Select(x => x.Value)); List <string> readmeInfo = new List <string>(); List <FileInfo> readmeFsis = new List <FileInfo>(); readmeFsis.AddRange(new DirectoryInfo(fsi.Directory.ToString()).GetFiles("readme*")); readmeFsis.AddRange(new DirectoryInfo(fsi.Directory.ToString()).Parent.GetFiles("readme*")); if (readmeFsis.Count() != 0) { readmeInfo.Add(HttpUtility.JavaScriptStringEncode(File.ReadAllText(readmeFsis[0].FullName), true)); } Script script = new Script { Authors = joinedAuthors, FileName = fsi.Name, Path = fsi.FullName, Length = fsi.Length, Extension = fsi.Extension, CreationTime = UnixTimestampFromDateTime(fsi.CreationTime), CreationTimeUtc = UnixTimestampFromDateTime(fsi.CreationTimeUtc), LastWriteTime = UnixTimestampFromDateTime(fsi.LastWriteTime), LastWriteTimeUtc = UnixTimestampFromDateTime(fsi.LastWriteTimeUtc), LastAccessTime = UnixTimestampFromDateTime(fsi.LastAccessTime), LastAccessTimeUtc = UnixTimestampFromDateTime(fsi.LastAccessTimeUtc), Text = text, Info = $"[{String.Join(",", readmeInfo.ToArray())}]" }; string[] scriptPath = script.Path.Split(System.IO.Path.DirectorySeparatorChar); Dictionary <string, int> dirAttrIndexes = Package.FindPackageDirAttrs(scriptPath); Package.Script scriptObj = new Package.Script { PackageID = scriptPath[dirAttrIndexes["PackageID"]], OSVer = scriptPath[dirAttrIndexes["OSVer"]], Environment = dirAttrIndexes.ContainsKey("Environment") ? scriptPath[dirAttrIndexes["Environment"]] : null, FileName = script.FileName, Authors = script.Authors, Path = script.Path, Text = script.Text, Info = script.Info, CreationTime = script.CreationTime, CreationTimeUtc = script.CreationTimeUtc, LastAccessTime = script.LastAccessTime, LastAccessTimeUtc = script.LastAccessTimeUtc, LastWriteTime = script.LastWriteTime, LastWriteTimeUtc = script.LastWriteTimeUtc, Length = script.Length }; SqliteDataAccess.SaveScript(scriptObj); } } } return(scripts); }