Exemplo n.º 1
0
    public List <DbFileInfo> CacheFileList()
    {
        List <DbFileInfo> file_info_array = new List <DbFileInfo>();

        if (this.m_sqlite_db != null)
        {
            string      sql = "select hash0, hash1, hash2, version, file_name, file_md5, data_type, data_len, zip_flag, unzip_len, crypto_flag, ctl_flag from file_info";
            SQLiteQuery qr  = new SQLiteQuery(this.m_sqlite_db, sql);
            while (qr.Step())
            {
                DbFileInfo fi = new DbFileInfo();
                fi.hash_info       = new PathHashInfo();
                fi.hash_info.hash0 = qr.GetInteger("hash0");
                fi.hash_info.hash1 = qr.GetInteger("hash1");
                fi.hash_info.hash2 = qr.GetInteger("hash2");
                fi.version         = qr.GetInteger("version");
                fi.file_name       = qr.GetString("file_name");
                fi.file_md5        = qr.GetString("file_md5");
                fi.data_type       = qr.GetInteger("data_type");
                fi.data_len        = qr.GetInteger("data_len");
                fi.zip_flag        = qr.GetInteger("zip_flag");
                fi.unzip_len       = qr.GetInteger("unzip_len");
                fi.crypto_flag     = qr.GetInteger("crypto_flag");
                fi.ctl_flag        = qr.GetInteger("ctl_flag");
                file_info_array.Add(fi);
            }
        }
        return(file_info_array);
    }
Exemplo n.º 2
0
 protected override void Dispose(bool disposing)
 {
     _db         = null;
     _dir        = null;
     _file       = null;
     _file_block = null;
 }
        public IActionResult Post()
        {
            string fileName = Request.Headers["FileName"];

            Guid g          = Guid.NewGuid();
            var  fileCrypto = new ChaChaFileCrypto();
            var  cs         = fileCrypto.BcEncryptStream(Request.Body);

            _googleDriveInterface.UploadFile(g.ToString(), cs);
            var fileInfo = new DbFileInfo
            {
                FileId   = g,
                FileName = fileName,
                Key      = fileCrypto.Key,
                Iv       = fileCrypto.Iv
            };

            _databaseInterface.StoreFileDetails(fileInfo);

            Dictionary <string, string> responseDict = new Dictionary <string, string>
            {
                ["fileId"] = g.ToString()
            };

            Response.Headers.Add("Access-Control-Allow-Origin", "*");

            return(Ok(responseDict));
        }
Exemplo n.º 4
0
        public void Create(string fileName, long buffer_size = kDefaultBufferSize)
        {
            // Create a new file
            var file = _dir.FileSet.SingleOrDefault(obj => obj.FileName.Equals(fileName));

            if (file != null)
            {
                TruncateBlocks(_db, file.Id);
                _file.Length = 0;
                _file        = file;
            }
            else
            {
                file             = new DbFileInfo();
                file.FileName    = fileName;
                file.DirectoryId = _dir.Id;
                file.BufferSize  = buffer_size;

                _dir.FileSet.Add(file);
                _db.FileSet.Add(file);
                _db.SaveChanges();

                _file = file;
            }

            ResetProperties();
        }
Exemplo n.º 5
0
        public static void FetchRebrickableDownloadLinks()
        {
            DatabaseFileLinks.Clear();

            var web = new HtmlWeb();

            var htmlDoc = web.Load("https://rebrickable.com/downloads/");

            var downloadLinkNodes = htmlDoc.DocumentNode.SelectNodes("//a[contains(., \".csv\")]").ToList();

            var downloadLinks = new List <Tuple <string, string> >();

            foreach (var linkNode in downloadLinkNodes)
            {
                string fileName = Path.GetFileNameWithoutExtension(linkNode.InnerText);
                if (fileName.Contains(".csv"))
                {
                    fileName = Path.GetFileNameWithoutExtension(fileName);
                }

                if (Enum.TryParse(fileName.Replace("_", string.Empty), true, out RbDatabaseFile fileType))
                {
                    DatabaseFileLinks[fileType] = new DbFileInfo()
                    {
                        FileType    = fileType,
                        DownloadUrl = linkNode.Attributes["href"].Value,
                        FileName    = linkNode.InnerText.Trim()
                    };
                }
            }
        }
Exemplo n.º 6
0
        public override long FileModified(string name)
        {
            DbFileInfo file = _dir.FileSet.Single(obj => obj.FileName.Equals(name));

            Debug.Assert(file != null);

            return(file.ModifiedTimeUTC.ToLongInt());
        }
Exemplo n.º 7
0
        public override void TouchFile(string name)
        {
            DbFileInfo file = _dir.FileSet.SingleOrDefault(obj => obj.FileName.Equals(name));

            Debug.Assert(file != null);

            file.ModifiedTimeUTC = DateTime.UtcNow;
            _db.SaveChanges();
        }
Exemplo n.º 8
0
        public override void DeleteFile(string name)
        {
            DbFileInfo file = _dir.FileSet.SingleOrDefault(obj => obj.FileName.Equals(name));

            if (file != null)
            {
                _dir.FileSet.Remove(file);
                _db.FileSet.Remove(file);
                _db.SaveChanges();
            }
        }
Exemplo n.º 9
0
        public override long FileLength(string name)
        {
            /// <summary>Returns the length in bytes of a file in the directory. </summary>
            DbFileInfo file = _dir.FileSet.SingleOrDefault(obj => obj.FileName.Equals(name));

            if (file == null)
            {
                return(0);
            }

            return(file.Length);
        }
Exemplo n.º 10
0
        protected override void Dispose(bool disposing)
        {
            if (_isDisposed)
            {
                return;
            }
            if (disposing)
            {
                Flush();

                _db         = null;
                _dir        = null;
                _file       = null;
                _file_block = null;
            }
            _isDisposed = true;
        }
Exemplo n.º 11
0
        public void OpenOrCreate(string fileName, long buffer_size = kDefaultBufferSize)
        {
            var file = _dir.FileSet.SingleOrDefault(obj => obj.FileName.Equals(fileName));

            if (file == null)
            {
                file             = new DbFileInfo();
                file.FileName    = fileName;
                file.DirectoryId = _dir.Id;
                file.BufferSize  = buffer_size;

                _dir.FileSet.Add(file);
                _db.FileSet.Add(file);
                _db.SaveChanges();
            }

            _file = file;
            ResetProperties();
        }
Exemplo n.º 12
0
        public int UploadFile(string name, byte[] content)
        {
            var file = new DbFileInfo
            {
                Name    = name,
                Content = content,
            };

            var  x           = Files.Add(file);
            var  beforeState = x.State;
            int  r           = this.SaveChanges();
            var  afterState  = x.State;
            bool ok          = beforeState == EntityState.Added && afterState == EntityState.Unchanged && r == 1;

            if (!ok)
            {
                return(-1);
            }

            return(file.Id);
        }
        public IActionResult Get(string fileId)
        {
            Guid fileGuid;

            try
            {
                fileGuid = new Guid(fileId);
            }
            catch (FormatException)
            {
                return(NotFound());
            }

            DbFileInfo fileInfo = _databaseInterface.GetFileInfo(fileGuid);

            if (fileInfo == null)
            {
                return(NotFound());
            }
            var fileCrypto = new ChaChaFileCrypto()
            {
                Key = fileInfo.Key,
                Iv  = fileInfo.Iv
            };

            var dloadStream = new ProducerConsumerStream(1048576);

            _googleDriveInterface.DownloadFileAsync(fileId, dloadStream);
            var outStream = fileCrypto.BcDecryptStream(dloadStream);

            return(new FileCallbackResult(new MediaTypeHeaderValue("application/octet-stream"), async(outputStream, _) =>
            {
                await outStream.CopyToAsync(outputStream);
                await outputStream.FlushAsync();
            })
            {
                FileDownloadName = fileInfo.FileName
            });
        }
Exemplo n.º 14
0
        public void TestDBSchema()
        {
            Guid guid = Guid.NewGuid();

            using (DbFileContext db = new DbFileContext()) {
                DbDirectory dir = new DbDirectory()
                {
                    Name = "a_dir_" + guid.ToString(),
                };
                db.DirectorySet.Add(dir);

                DbFileInfo file = new DbFileInfo("a_file");
                dir.FileSet.Add(file);

                DbFileBlock block = new DbFileBlock(100);
                byte[]      bytes = Encoding.UTF8.GetBytes("Hello World");
                Array.Copy(bytes, block.RawData, bytes.Length);
                file.BlockSet.Add(block);

                db.SaveChanges();
            }
        }
Exemplo n.º 15
0
    public bool ReplaceFileInfoToDb(DbFileInfo file_info)
    {
        bool flag = this.m_sqlite_db == null;
        bool result2;

        if (flag)
        {
            result2 = false;
        }
        else
        {
            string replace_sql = string.Format("replace into file_info( hash0, hash1, hash2, data_len, version, file_name, file_md5, data_type, zip_flag, unzip_len, crypto_flag, ctl_flag) values('{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}', '{7}', '{8}', '{9}', '{10}', '{11}')", new object[]
            {
                file_info.hash_info.hash0.ToString(),
                file_info.hash_info.hash1.ToString(),
                file_info.hash_info.hash2.ToString(),
                file_info.data_len.ToString(),
                file_info.version.ToString(),
                file_info.file_name.ToString(),
                file_info.file_md5.ToString(),
                file_info.data_type.ToString(),
                file_info.zip_flag.ToString(),
                file_info.unzip_len.ToString(),
                file_info.crypto_flag.ToString(),
                file_info.ctl_flag.ToString()
            });
            int  result     = this.m_sqlite_db.ExcuteQueryNoResult(replace_sql);
            bool debug_mode = this.m_debug_mode;
            if (debug_mode)
            {
                LogMgr.Log(string.Format("excute sql:{0}, result:{1}", replace_sql, result));
            }
            result2 = (result == 0);
        }
        return(result2);
    }
Exemplo n.º 16
0
    private void InsertFile(string filePath)
    {
        Debug.Log(filePath);
        DbFileInfo file_info = new DbFileInfo();

        file_info.hash_info       = new PathHashInfo();
        file_info.hash_info.hash0 = -567439084;
        file_info.hash_info.hash1 = -94960054;
        file_info.hash_info.hash2 = -1365269703;
        file_info.version         = 1;
        file_info.file_name       = "/client/assets/icon/0.png";
        file_info.file_md5        = "BEAD7EDBF049F6E8CEADE7EC7D94EAC5";
        file_info.data_type       = 0;
        file_info.data_len        = 17820;
        file_info.zip_flag        = 0;
        file_info.unzip_len       = 17820;
        file_info.crypto_flag     = 0;
        file_info.ctl_flag        = 0;

        string insert_sql = string.Format("insert into file_info( hash0, hash1, hash2, data_len, version, file_name, file_md5, data_type, zip_flag, unzip_len, crypto_flag, ctl_flag) values('{0}', '{1}', '{2}', '{3}', '{4}', '{5}', '{6}', '{7}', '{8}', '{9}', '{10}', '{11}')", new object[]
        {
            file_info.hash_info.hash0.ToString(),
            file_info.hash_info.hash1.ToString(),
            file_info.hash_info.hash2.ToString(),
            file_info.data_len.ToString(),
            file_info.version.ToString(),
            file_info.file_name.ToString(),
            file_info.file_md5.ToString(),
            file_info.data_type.ToString(),
            file_info.zip_flag.ToString(),
            file_info.unzip_len.ToString(),
            file_info.crypto_flag.ToString(),
            file_info.ctl_flag.ToString()
        });
        //db.ExcuteQueryNoResult(insert_sql);
    }
Exemplo n.º 17
0
 public bool Open(string fileName)
 {
     //! Open existed file
     _file = _dir.FileSet.SingleOrDefault(obj => obj.FileName.Equals(fileName));
     return(_file != null);
 }
Exemplo n.º 18
0
    public static bool OpenCyMzq(string file_name, ref Dictionary <string, DbFileInfo> map)
    {
        FileStream   fs         = new FileStream(file_name, FileMode.Open);
        int          nLength    = (int)fs.Length;
        BinaryReader tmp_reader = new BinaryReader(fs);
        int          unzip      = tmp_reader.ReadInt32();

        bool result;

        if (unzip == 0)
        {
            result = false;
        }
        else
        {
            int md5_data_size     = 4;
            int version_data_size = 4;
            int len_data_size     = 4;

            byte[] buffs       = tmp_reader.ReadBytes(nLength - 4);
            int    len         = 0;
            byte[] DecompBuffs = Sqlite3tool.DecompNetBuffer(buffs, nLength, unzip, out len);
            if (unzip != len)
            {
                LogMgr.LogError("error: unzip != len");
            }
            MemoryStream decomp_ms     = new MemoryStream(DecompBuffs);
            BinaryReader decomp_reader = new BinaryReader(decomp_ms);

            int    file_path_count = decomp_reader.ReadInt32();
            int    file_count      = decomp_reader.ReadInt32();
            byte[] file_path_byte  = decomp_reader.ReadBytes(file_path_count);
            byte[] md5_code_byte   = decomp_reader.ReadBytes(file_count * md5_data_size);
            byte[] version_byte    = decomp_reader.ReadBytes(file_count * version_data_size);
            byte[] len_byte        = decomp_reader.ReadBytes(file_count * len_data_size);

            MemoryStream md5_code_mem = new MemoryStream(md5_code_byte);
            BinaryReader md5_code_all = new BinaryReader(md5_code_mem);
            MemoryStream version_mem  = new MemoryStream(version_byte);
            BinaryReader version_all  = new BinaryReader(version_mem);
            MemoryStream len_mem      = new MemoryStream(len_byte);
            BinaryReader len_all      = new BinaryReader(len_mem);

            int file_path_begin_pos = 0;
            for (int index = 0; index < file_count; index++)
            {
                string        file_path = "";
                byte[]        md5       = md5_code_all.ReadBytes(4);
                StringBuilder sb        = new StringBuilder();
                for (int i = 0; i < md5.Length; i++)
                {
                    sb.Append(md5[i].ToString("X2"));
                }

                int version = version_all.ReadInt32();
                int length  = len_all.ReadInt32();
                int end_pos = 0;
                Sqlite3tool.ParseFilePath(ref file_path_byte, file_path_begin_pos, file_path_count, out end_pos, out file_path);
                file_path_begin_pos = end_pos;

                DbFileInfo info = new DbFileInfo();
                info.file_name = file_path;
                info.hash_info = DataEncrypt.GetPathHashInfo(file_path);
                info.version   = version;
                info.data_len  = length;
                info.unzip_len = length;
                info.file_md5  = sb.ToString();
                map.Add(info.file_name, info);
            }
            fs.Close();
            fs.Dispose();
            result = true;
        }
#if  UNITY_EDITOR
        //ExportCyMzq(file_name);
#endif
        return(result);
    }