Пример #1
0
        public async void DeleteSelected()
        {
            if (this.SelectedItems.Count == 0)
            {
                return;
            }

            HubicDriveForm form = this.GetForm();

            foreach (ListViewItem selectedItem in this.SelectedItems)
            {
                OSFile selectedFile = (OSFile)selectedItem.Tag;

                form.GetConnectionStatus().SetStatus("Status: deleting file " + selectedFile.Name + "...", true);

                string path = this.OSContainer.Name + "/" + selectedFile.Path;

                if (!await OSAPI.DeleteObject(path))
                {
                    MessageBox.Show("Failed deleting the file " + selectedFile.Name, "Communication error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    form.GetConnectionStatus().SetStatus("Status: connected");
                    return;
                }

                this.Items.Remove(selectedItem);
                this.OSFolder.Files.Remove(selectedFile.Name);
                form.GetConnectionStatus().SetStatus("Status: connected");
            }
        }
        ///
        /// <summary>
        /// Constructor of compressed file
        /// </summary>
        /// <param name="dataFilePath">path to the data file</param>
        /// <param name="cipherKey">cipher key (if null, then no encryption is performed)</param>
        /// <param name="indexFilePath">path to the index file</param>
        /// <param name="parameters">file parameters</param>
        ///
        public CompressedFile(string dataFilePath,
                              string cipherKey,
                              string indexFilePath,
                              FileParameters parameters)
            : base(dataFilePath, parameters)
        {
            indexFile = new OSFile(indexFilePath, parameters);

            if (cipherKey != null)
            {
                setKey(Encoding.Unicode.GetBytes(cipherKey));
            }
            if (!parameters.readOnly)
            {
                bitmapExtensionQuantum = (int)(parameters.fileExtensionQuantum >> (ALLOCATION_QUANTUM_LOG + 3));
                bitmap    = new byte[(int)(base.Length >> (ALLOCATION_QUANTUM_LOG + 3)) + bitmapExtensionQuantum];
                bitmapPos = bitmapStart = Page.pageSize >> (ALLOCATION_QUANTUM_LOG + 3);

                pageMap = new PageMap();

                byte[] buf = new byte[8];
                for (long indexPos = 0, indexSize = indexFile.Length; indexPos < indexSize; indexPos += 8)
                {
                    indexFile.Read(indexPos, buf);
                    long pagePos     = Bytes.unpack8(buf, 0);
                    long pageBitOffs = pagePos >> (Page.pageSizeLog + ALLOCATION_QUANTUM_LOG);
                    long pageBitSize = ((pagePos & (Page.pageSize - 1)) + ALLOCATION_QUANTUM) >> ALLOCATION_QUANTUM_LOG;
                    Bitmap.reserve(bitmap, pageBitOffs, pageBitSize);
                }
            }
        }
 private ReplicationMasterFile(ReplicationMasterStorageImpl storage, IFile file, string localhost, int port, string[] hosts, bool ack, String pageTimestampFilePath) 
 {         
     this.storage = storage;
     this.file = file;
     this.ack = ack;
     this.localhost = localhost;
     this.port = port;
     mutex = new object();
     replicas = new Replica[hosts.Length];
     rcBuf = new byte[1];
     nHosts = 0;
     if (pageTimestampFilePath != null) { 
         FileParameters fileParameters = storage != null ? storage.fileParameters : new FileParameters(false, false, false, 1024*1024);
         pageTimestampFile = new OSFile(pageTimestampFilePath, fileParameters);
         long fileLength = pageTimestampFile.Length;
         if (fileLength == 0) { 
             pageTimestamps = new int[InitPageTimestampsLength];
         } else {
             pageTimestamps = new int[(int)(fileLength/4)];
             byte[] page = new byte[Page.pageSize];
             int i = 0;
             for (long pos = 0; pos < fileLength; pos += Page.pageSize) { 
                 int rc = pageTimestampFile.Read(pos, page);
                 for (int offs = 0; offs < rc; offs += 4, i++) { 
                     pageTimestamps[i] = Bytes.unpack4(page, offs);
                     if (pageTimestamps[i] > timestamp) { 
                         timestamp = pageTimestamps[i];
                     }
                 }
             }
             if (i != pageTimestamps.Length) { 
                 throw new StorageError(StorageError.ErrorCode.FILE_ACCESS_ERROR);
             }
         }
         dirtyPageTimestampMap = new int[(((pageTimestamps.Length*4 + Page.pageSize - 1) >> Page.pageSizeLog) + 31) >> 5];
         txBuf = new byte[12 + Page.pageSize];
     } else { 
         txBuf = new byte[8 + Page.pageSize];
     }
     for (int i = 0; i < hosts.Length; i++) 
     { 
         replicas[i] = new Replica();
         replicas[i].host = hosts[i];
         Connect(i);
     }
     if (port >= 0) 
     {
         storage.SetProperty("perst.alternative.btree", true); // prevent direct modification of pages
         listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
         listenSocket.Bind(new IPEndPoint(localhost != null && localhost != "localhost" ? IPAddress.Parse(localhost) : IPAddress.Any, port));          
         listenSocket.Listen(ListenQueueSize);
         listening = true;
         listenThread = new Thread(new ThreadStart(run));
         listenThread.Start();
     }
     watchdogThread = new Thread(new ThreadStart(watchdog));
     watchdogThread.Start();
 }
Пример #4
0
        public void DownloadSelected()
        {
            if (this.SelectedItems.Count == 0)
            {
                return;
            }

            HubicDriveForm form = this.GetForm();

            if (this.SelectedItems.Count == 1)
            {
                SaveFileDialog sfd = new SaveFileDialog();
                sfd.Title = "Save as..";

                OSFile selectedFile = this.GetSelectedFile();
                sfd.FileName = selectedFile.Name;

                if (sfd.ShowDialog() == DialogResult.OK)
                {
                    form.queueForm.Add(this.OSContainer.Name, selectedFile.Path, sfd.FileName, selectedFile.Size, "download");
                    form.queueForm.Show();
                }
            }
            else
            {
                FolderBrowserDialog fbd = new FolderBrowserDialog();

                if (fbd.ShowDialog() == DialogResult.OK)
                {
                    foreach (ListViewItem fileItem in this.SelectedItems)
                    {
                        OSFile selectedFile = (OSFile)fileItem.Tag;
                        form.queueForm.Add(this.OSContainer.Name, selectedFile.Path, fbd.SelectedPath + "\\" + selectedFile.Name, selectedFile.Size, "download");
                    }

                    form.queueForm.Show();
                }
            }
        }
 protected ReplicationSlaveStorageImpl(String pageTimestampFilePath) 
 { 
     if (pageTimestampFilePath != null) { 
         pageTimestampFile = new OSFile(pageTimestampFilePath,fileParameters);
         long fileLength = pageTimestampFile.Length;
         if (fileLength == 0) { 
             pageTimestamps = new int[INIT_PAGE_TIMESTAMPS_LENGTH];
         } else {
             pageTimestamps = new int[(int)(fileLength/4)];
             byte[] page = new byte[Page.pageSize];
             int i = 0;
             for (long pos = 0; pos < fileLength; pos += Page.pageSize) { 
                 int rc = pageTimestampFile.Read(pos, page);
                 for (int offs = 0; offs < rc; offs += 4) { 
                     pageTimestamps[i++] = Bytes.unpack4(page, offs);
                 }
             }
             if (i != pageTimestamps.Length) { 
                 throw new StorageError(StorageError.ErrorCode.FILE_ACCESS_ERROR);
             }
         }
         dirtyPageTimestampMap = new int[(((pageTimestamps.Length*4 + Page.pageSize - 1) >> Page.pageSizeLog) + 31) >> 5];
     }
 }        
Пример #6
0
        public virtual void Open(string filePath, int pagePoolSize)
        {
            lock (this)
            {
            #if OMIT_MULTIFILE
                IFile file = new OSFile(filePath, readOnly, noFlush);
            #else
                IFile file;
                if (filePath.StartsWith("@"))
                    file = new MultiFile(filePath.Substring(1), readOnly, noFlush);
                else
                    file = new OSFile(filePath, readOnly, noFlush);
            #endif

                try
                {
                    Open(file, pagePoolSize);
                }
                catch (StorageError ex)
                {
                    file.Close();
                    throw ex;
                }
            }
        }
     ///
     /// <summary>
     /// Constructor of compressed file
     /// </summary>
     /// <param name="dataFilePath">path to the data file</param> 
     /// <param name="cipherKey">cipher key (if null, then no encryption is performed)</param> 
     /// <param name="indexFilePath">path to the index file</param> 
     /// <param name="parameters">file parameters</param> 
     ///
     public CompressedFile(string dataFilePath,        
                           string cipherKey,
                           string indexFilePath, 
                           FileParameters parameters)
     : base(dataFilePath, parameters)
     {
         indexFile = new OSFile(indexFilePath, parameters);
             
         if (cipherKey != null) 
         {
             setKey(Encoding.Unicode.GetBytes(cipherKey)); 
         }
         if (!parameters.readOnly)
         {
             bitmapExtensionQuantum = (int)(parameters.fileExtensionQuantum >> (ALLOCATION_QUANTUM_LOG + 3));
             bitmap = new byte[(int)(base.Length >> (ALLOCATION_QUANTUM_LOG + 3)) + bitmapExtensionQuantum];
             bitmapPos = bitmapStart = Page.pageSize >> (ALLOCATION_QUANTUM_LOG + 3);
 
             pageMap = new PageMap();            
 
             byte[] buf = new byte[8];  
             for (long indexPos = 0, indexSize = indexFile.Length; indexPos < indexSize; indexPos += 8) 
             {
                 indexFile.Read(indexPos, buf);
                 long pagePos = Bytes.unpack8(buf, 0);
                 long pageBitOffs = pagePos >> (Page.pageSizeLog + ALLOCATION_QUANTUM_LOG);
                 long pageBitSize = ((pagePos & (Page.pageSize - 1)) + ALLOCATION_QUANTUM) >> ALLOCATION_QUANTUM_LOG;
                 Bitmap.reserve(bitmap, pageBitOffs, pageBitSize);
             }
         }
     }
Пример #8
0
        private async void FoldersTreeView_AfterSelect(Object sender, TreeViewEventArgs e)
        {
            HubicDriveForm form = this.GetForm();

            TreeNode selectedNode   = this.GetSelectedNode();
            OSFolder selectedFolder = this.GetSelectedFolder();

            if (selectedFolder.Loaded == false)
            {
                form.GetConnectionStatus().SetStatus("Status: reading content...", true);

                selectedFolder.Subfolders = new Dictionary <string, OSFolder>();
                selectedFolder.Files      = new Dictionary <string, OSFile>();

                JArray jsonObjects = await this.OSAPI.GetObjects(this.OSContainer.Name, selectedFolder.Path);

                OSFolder folder;
                OSFile   file;
                TreeNode node;

                for (int i = 0; i < jsonObjects.Count; i++)
                {
                    if (jsonObjects[i]["content_type"].ToString() == "application/directory")
                    {
                        folder = new OSFolder(
                            jsonObjects[i]["hash"].ToString(),
                            jsonObjects[i]["last_modified"].ToString(),
                            jsonObjects[i]["bytes"].ToString(),
                            jsonObjects[i]["name"].ToString(),
                            jsonObjects[i]["content_type"].ToString()
                            );

                        selectedFolder.Subfolders.Add(folder.Name, folder);

                        node      = new TreeNode(folder.Name);
                        node.Name = folder.Name;
                        node.Tag  = folder;
                        selectedNode.Nodes.Add(node);
                    }
                    else
                    {
                        file = new OSFile(
                            jsonObjects[i]["hash"].ToString(),
                            jsonObjects[i]["last_modified"].ToString(),
                            jsonObjects[i]["bytes"].ToString(),
                            jsonObjects[i]["name"].ToString(),
                            jsonObjects[i]["content_type"].ToString()
                            );

                        selectedFolder.Bytes += file.Bytes;
                        selectedFolder.Files.Add(file.Name, file);
                    }
                }

                selectedFolder.Loaded = true;
                selectedNode.Expand();
                form.GetConnectionStatus().SetStatus("Status: connected");
            }

            form.createFolderToolButton.Enabled = true;
            form.deleteFolderToolButton.Enabled = selectedFolder.Name.Length > 0;
            form.uploadToolButton.Enabled       = true;

            Label folderInfoLabel = form.GetFolderInfoLabel();

            folderInfoLabel.Visible = true;
            folderInfoLabel.Text    = selectedFolder.Files.Count.ToString() + " files (" + selectedFolder.Size + ")";

            FilesListView filesListView = form.GetFilesListView();

            filesListView.Load(this.OSAPI, this.OSContainer, selectedFolder);
        }