/// <summary>
        /// Get image details | Returns all details of image selected by ID in a c_ImageDetails object
        /// </summary>
        public c_ImageDetails   getDetails(int d_id)
        {
            SQLiteColumn[] imgColumns = new SQLiteColumn[] {
                new SQLiteColumn()
                {
                    columnName = "id", dataType = SQLiteDataType.INTEGER
                },
                new SQLiteColumn()
                {
                    columnName = "md5", dataType = SQLiteDataType.TEXT
                },
                new SQLiteColumn()
                {
                    columnName = "artist", dataType = SQLiteDataType.TEXT
                },
                new SQLiteColumn()
                {
                    columnName = "tags", dataType = SQLiteDataType.TEXT
                },
                new SQLiteColumn()
                {
                    columnName = "artists", dataType = SQLiteDataType.TEXT
                },

                new SQLiteColumn()
                {
                    columnName = "description", dataType = SQLiteDataType.TEXT
                },
                new SQLiteColumn()
                {
                    columnName = "score", dataType = SQLiteDataType.INTEGER
                },
                new SQLiteColumn()
                {
                    columnName = "rating", dataType = SQLiteDataType.TEXT
                },

                new SQLiteColumn()
                {
                    columnName = "parent_id", dataType = SQLiteDataType.INTEGER
                },
                new SQLiteColumn()
                {
                    columnName = "children", dataType = SQLiteDataType.TEXT
                },
                new SQLiteColumn()
                {
                    columnName = "source", dataType = SQLiteDataType.TEXT
                },
                new SQLiteColumn()
                {
                    columnName = "sources", dataType = SQLiteDataType.TEXT
                },

                new SQLiteColumn()
                {
                    columnName = "file_url", dataType = SQLiteDataType.TEXT
                },
                new SQLiteColumn()
                {
                    columnName = "width", dataType = SQLiteDataType.INTEGER
                },
                new SQLiteColumn()
                {
                    columnName = "height", dataType = SQLiteDataType.INTEGER
                },
                new SQLiteColumn()
                {
                    columnName = "file_ext", dataType = SQLiteDataType.TEXT
                },
                new SQLiteColumn()
                {
                    columnName = "file_size", dataType = SQLiteDataType.INTEGER
                },

                new SQLiteColumn()
                {
                    columnName = "sample_url", dataType = SQLiteDataType.TEXT
                },
                new SQLiteColumn()
                {
                    columnName = "sample_width", dataType = SQLiteDataType.INTEGER
                },
                new SQLiteColumn()
                {
                    columnName = "sample_height", dataType = SQLiteDataType.INTEGER
                },

                new SQLiteColumn()
                {
                    columnName = "preview_url", dataType = SQLiteDataType.TEXT
                },
                new SQLiteColumn()
                {
                    columnName = "preview_width", dataType = SQLiteDataType.INTEGER
                },
                new SQLiteColumn()
                {
                    columnName = "preview_height", dataType = SQLiteDataType.INTEGER
                },

                new SQLiteColumn()
                {
                    columnName = "downloaded", dataType = SQLiteDataType.TEXT
                },
            };

            var reader = cs.GetDbContent("images", imgColumns, $" id={ d_id }").ExecuteReader();
            var det    = (c_ImageDetails)null;

            while (reader.Read())
            {
                det = new c_ImageDetails()
                {
                    id      = reader.GetInt32(reader.GetOrdinal("id")),
                    md5     = reader.GetString(reader.GetOrdinal("md5")),
                    artist  = reader.GetString(reader.GetOrdinal("artist")),
                    tags    = reader.GetString(reader.GetOrdinal("tags")).Split('×'),
                    artists = reader.GetString(reader.GetOrdinal("artists")).Split('×'),

                    description = reader.GetString(reader.GetOrdinal("description")),
                    score       = reader.GetInt32(reader.GetOrdinal("score")),
                    rating      = reader.GetString(reader.GetOrdinal("rating")),

                    parent_id = reader.GetInt32(reader.GetOrdinal("parent_id")),
                    children  = reader.GetString(reader.GetOrdinal("children")).Split('×'),
                    source    = reader.GetString(reader.GetOrdinal("source")),
                    sources   = reader.GetString(reader.GetOrdinal("sources")).Split('×'),

                    file_url  = reader.GetString(reader.GetOrdinal("file_url")),
                    width     = reader.GetInt32(reader.GetOrdinal("width")),
                    height    = reader.GetInt32(reader.GetOrdinal("height")),
                    file_ext  = reader.GetString(reader.GetOrdinal("file_ext")),
                    file_size = reader.GetInt32(reader.GetOrdinal("file_size")),

                    sample_url    = reader.GetString(reader.GetOrdinal("sample_url")),
                    sample_width  = reader.GetInt32(reader.GetOrdinal("sample_width")),
                    sample_height = reader.GetInt32(reader.GetOrdinal("sample_height")),

                    preview_url    = reader.GetString(reader.GetOrdinal("preview_url")),
                    preview_width  = reader.GetInt32(reader.GetOrdinal("preview_width")),
                    preview_height = reader.GetInt32(reader.GetOrdinal("preview_height")),

                    downloaded = reader.GetString(reader.GetOrdinal("downloaded")),
                };
            }

            return(det);
        }
        public List <c_Image> donloadImageData(string tags)
        {
            List <c_Image> ret = new List <c_Image>();

            Stopwatch sw = new Stopwatch();

            sw.Start();
            int    i      = 0;
            string idList = "id \r\n\tIN \r\n(";
            bool   run    = false;
            List <c_ImageDetails> images = cd.getImages(tags);

            foreach (var v in images)
            {
                idList += "\r\n\t" + v.id + ", ";

                if (images.Last().Equals(v))
                {
                    run = true;
                }

                cs.buildInsert("images", new string[][] {
                    new string[] { "id", "false", v.id + "" },
                    new string[] { "md5", "true", v.md5 },
                    new string[] { "artist", "true", v.artist },
                    new string[] { "artists", "true", v.artists == null ? "" : string.Join("×", v.artists) },
                    new string[] { "tags", "true", v.tags == null ? "" : string.Join("×", v.tags) },
                    new string[] { "description", "true", v.description },
                    new string[] { "rating", "true", v.rating },
                    new string[] { "parent_id", "false", v.parent_id + "" },
                    new string[] { "children", "true", v.children == null ? "" : string.Join("×", v.children) },
                    new string[] { "source", "true", v.source },
                    new string[] { "file_ext", "true", v.file_ext },
                    new string[] { "sources", "true", v.sources == null ? "" : string.Join("×", v.sources) },
                    new string[] { "score", "false", v.score + "" },
                    new string[] { "file_url", "true", v.file_url },
                    new string[] { "height", "false", v.height + "" },
                    new string[] { "width", "false", v.width + "" },
                    new string[] { "preview_url", "true", v.preview_url },
                    new string[] { "preview_height", "false", v.preview_height + "" },
                    new string[] { "preview_width", "false", v.preview_width + "" },
                    new string[] { "sample_url", "true", v.sample_url },
                    new string[] { "sample_height", "false", v.sample_height + "" },
                    new string[] { "sample_width", "false", v.sample_width + "" },
                    new string[] { "file_size", "false", v.file_size + "" },
                    new string[] { "downloaded", "true", v.downloaded }
                }, run);
                i++;
            }

            idList = idList.Substring(0, idList.Length - 2) + "\r\n)";

            var imgColumns = new SQLiteColumn[] {
                new SQLiteColumn()
                {
                    columnName = "id", dataType = SQLiteDataType.INTEGER
                },
                new SQLiteColumn()
                {
                    columnName = "md5", dataType = SQLiteDataType.TEXT
                },
                new SQLiteColumn()
                {
                    columnName = "(SELECT id FROM artists a WHERE a.name=artist) as artist_id", dataType = SQLiteDataType.INTEGER
                },

                new SQLiteColumn()
                {
                    columnName = "preview_url", dataType = SQLiteDataType.TEXT
                },
                new SQLiteColumn()
                {
                    columnName = "preview_width", dataType = SQLiteDataType.INTEGER
                },
                new SQLiteColumn()
                {
                    columnName = "preview_height", dataType = SQLiteDataType.INTEGER
                },

                new SQLiteColumn()
                {
                    columnName = "file_ext", dataType = SQLiteDataType.TEXT
                },
                new SQLiteColumn()
                {
                    columnName = "file_url", dataType = SQLiteDataType.TEXT
                },
                new SQLiteColumn()
                {
                    columnName = "width", dataType = SQLiteDataType.INTEGER
                },
                new SQLiteColumn()
                {
                    columnName = "height", dataType = SQLiteDataType.INTEGER
                },
                new SQLiteColumn()
                {
                    columnName = "file_size", dataType = SQLiteDataType.INTEGER
                }
            };

            var reader = cs.GetDbContent("images", imgColumns, idList).ExecuteReader();

            while (reader.Read())
            {
                c_Artist       c_art = getArtist(reader.GetInt32(reader.GetOrdinal("artist_id")));
                c_ImageDetails c_det = getDetails(reader.GetInt32(reader.GetOrdinal("id")));

                ret.Add(new c_Image()
                {
                    id        = reader.GetInt32(reader.GetOrdinal("id")),
                    md5       = reader.GetString(reader.GetOrdinal("md5")),
                    artist_id = reader.GetInt32(reader.GetOrdinal("artist_id")),


                    previewUrl  = reader.GetString(reader.GetOrdinal("preview_url")),
                    previewSize = new Size(
                        reader.GetInt32(reader.GetOrdinal("preview_width")),
                        reader.GetInt32(reader.GetOrdinal("preview_height"))),


                    fileExt   = reader.GetString(reader.GetOrdinal("file_ext")),
                    fileUrl   = reader.GetString(reader.GetOrdinal("file_url")),
                    imageSize = new Size(
                        reader.GetInt32(reader.GetOrdinal("width")),
                        reader.GetInt32(reader.GetOrdinal("height"))),
                    fileSize = reader.GetInt32(reader.GetOrdinal("file_size")),

                    artist  = c_art,
                    details = c_det
                });
            }


            return(ret);
        }