using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.IO; using Microsoft.Data.Sqlite; using System.Reflection; using System.Windows.Forms; using System.Configuration; namespace DataOrganizer { public class DB { public static string DatabasePath { get; private set; } public static string ConnectionString { get; private set; } public static string TempScriptLocal = "Y:\\Database Template.sql"; public DB() { DatabasePath = $"{new FileInfo(new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath).Directory.FullName}\\Organizer Data\\Main.sqlite"; ConnectionString = $"Data Source={DatabasePath}"; if (!Directory.Exists(new FileInfo(DatabasePath).Directory.FullName)) { Directory.CreateDirectory(new FileInfo(DatabasePath).Directory.FullName); CreateDatabase(); } } private void CreateDatabase() { //TODO: this is tmp var query = File.ReadAllText(TempScriptLocal); using (var connection = new SqliteConnection(ConnectionString)) { using(var command = new SqliteCommand(query, connection)) { connection.Open(); command.ExecuteNonQuery(); } } } public List GetProfiles() { var query = "SELECT * FROM profile"; var profiles = new List(); using (var connection = new SqliteConnection(ConnectionString)) { using (var command = new SqliteCommand(query, connection)) { connection.Open(); var reader = command.ExecuteReader(); while (reader.Read()) { profiles.Add(new Profile { Name = reader["profile_name"].ToString(), DefaultNewContentFolder = reader["default_new_content_folder_name"].ToString(), MachineName = reader["machine_name"].ToString(), RowId = Convert.ToInt32(reader["profile_id"]) }); } reader.Close(); command.CommandText = "SELECT root_id, name FROM folder_root WHERE profile_id = @ID"; foreach(var profile in profiles) { command.Parameters.Clear(); command.Parameters.AddWithValue("ID", profile.RowId); reader = command.ExecuteReader(); while(reader.Read()) { profile.FolderGroups.Add(new FolderGroup { Name = reader["name"].ToString(), rowId = Convert.ToInt32(reader["root_id"]) }); reader.Close(); } } } } return profiles; } public bool UpdateProfile(Profile profile) { var query = @"UPDATE main.profile SET machine_name = @MachineName, default_new_content_folder_name = @DefaultPath, profile_name = @Name WHERE profile_id = @ID"; using (var connection = new SqliteConnection(ConnectionString)) { using (var command = new SqliteCommand(query, connection)) { command.Parameters.AddWithValue("MachineName", profile.MachineName); command.Parameters.AddWithValue("DefaultPath", profile.DefaultNewContentFolder); command.Parameters.AddWithValue("Name", profile.Name); command.Parameters.AddWithValue("ID", profile.RowId); connection.Open(); command.ExecuteNonQuery(); } } return true; } public bool InsertNewProfile(Profile profile) { var query = @"INSERT INTO main.profile (machine_name, default_new_content_folder_name, profile_name) VALUES (@MachineName, @DefaultPath, @Name)"; using (var connection = new SqliteConnection(ConnectionString)) { using (var command = new SqliteCommand(query, connection)) { command.Parameters.AddWithValue("MachineName", profile.MachineName); command.Parameters.AddWithValue("DefaultPath", profile.DefaultNewContentFolder); command.Parameters.AddWithValue("Name", profile.Name); connection.Open(); command.ExecuteNonQuery(); } } return true; } public bool InsertNewFolderGroup(Profile profile, string name) { var query = @"INSERT INTO main.folder_root (name, profile_id) VALUES (@Name, @ProfileID)"; using (var connection = new SqliteConnection(ConnectionString)) { using (var command = new SqliteCommand(query, connection)) { command.Parameters.AddWithValue("ProfileID", profile.RowId); command.Parameters.AddWithValue("Name", name); connection.Open(); command.ExecuteNonQuery(); } } return true; } public struct Profile { public string Name; public string DefaultNewContentFolder; public string MachineName; public int RowId; public List FolderGroups; } public struct FolderGroup { public int rowId; public string Name; } } }