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(); }
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]; } }
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; } } }
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); }