private void ShareFileSelectDialog_Load(object sender, EventArgs e) { lstPreviousfolder.Add("/"); string strUrl = Globals.ThisAddIn.GetSeafileURL(); if (strUrl != null && strUrl != "" && strUrl != String.Empty) { httpClient = new WosHttpClient(strUrl); LogTrace.TraceVerbose("Connect to fileshare with URL {0}", strUrl); } else { LogTrace.TraceError("Got fileshare URL failed."); this.Close(); return; } strToken = SeafileLogon(); if (strToken == null) { this.DialogResult = DialogResult.Cancel; this.Close(); return; } HttpSeaFileGetDefaultLibraryResponse gdlRsp = httpClient.ExecuteSeaFileGetDefaultLibraryRequest(strToken); if (gdlRsp != null) { strRepoID = gdlRsp.RepoId; LogTrace.TraceVerbose("Retrieve Repro Id [{0}]", strRepoID); } else { LogTrace.TraceError("Retrieve Repro ID failed."); this.DialogResult = DialogResult.Abort; this.Close(); return; } HttpSeaFileGetDirectoryEntriesResponse gdresp = httpClient.ExecuteSeaFileGetDirectoryEntriesRequest(strToken, strRepoID, strCurrentFolder); if (gdresp != null) { ListDirectory(gdresp); } else { LogTrace.TraceError("Get Default Directory list failed."); this.DialogResult = DialogResult.Abort; this.Close(); } }
private void lvFilelist_MouseDoubleClick(object sender, MouseEventArgs e) { int iSelected = lvFilelist.SelectedItems.Count; // Double click should only process one item if (iSelected == 1) { ListViewItem item = lvFilelist.SelectedItems[0]; LogTrace.TraceInfo("Selected item [{0}:{1}]", item.Name, item.Tag); // If selected item is folder, list the items in the folder if (item.Tag.ToString() == "dir" || item.Tag.ToString() == "dirback") { if (item.Tag.ToString() == "dir") { lstPreviousfolder.Add(strCurrentFolder); LogTrace.TraceInfo("Add current folder [{0}] into previous folder list.", strCurrentFolder); strCurrentFolder = strCurrentFolder + "/" + item.Text; LogTrace.TraceInfo("Current folder changed to [{0}].", strCurrentFolder); } else { int iPrev = lstPreviousfolder.Count; if (iPrev > 0) { strCurrentFolder = lstPreviousfolder[iPrev - 1]; LogTrace.TraceInfo("Retrieve current folder [{0}] from previous folder list.", strCurrentFolder); lstPreviousfolder.RemoveAt(iPrev - 1); } } HttpSeaFileGetDirectoryEntriesResponse gdResp = httpClient.ExecuteSeaFileGetDirectoryEntriesRequest(strToken, strRepoID, strCurrentFolder); lvFilelist.Items.Clear(); ListDirectory(gdResp); } //dir process else if (item.Tag.ToString() == "file") { strSelectedFile = strCurrentFolder + "/" + item.Text; this.DialogResult = DialogResult.OK; this.Close(); } } }
/// <summary> /// 开始上传附件到OBS云端存储 /// </summary> private void bgwUploadFile_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e) { if (m_bRegisterWindowClose == false) { ((Outlook.ItemEvents_10_Event)(dynamic) Globals.ThisAddIn.Application.ActiveInspector().CurrentItem).Close += new Microsoft.Office.Interop.Outlook.ItemEvents_10_CloseEventHandler(MailItem_Close); m_bRegisterWindowClose = true; } Outlook.Application objApplication = Globals.ThisAddIn.Application; Outlook.Inspector objInspector = objApplication.ActiveInspector(); //获取入参 Object[] objArray = (Object[])e.Argument; String[] strArrFilePath = (String[])objArray[0]; String[] strArrFileName = (String[])objArray[1]; if (!SeafileLogon()) { LogTrace.TraceError("Seafile Logon failed."); return; } UploadInProgress = true; for (int i = 0; i < strArrFilePath.Count <String>(); i++) { String strFilePath = strArrFilePath[i]; String strFileName = strArrFileName[i]; LogTrace.TraceInfo("Start upload file {0} : {1}", strFileName, strFilePath); //获取文件信息 FileInfo fInfo = new FileInfo(strFileName, strFilePath); if (fInfo.FileLength > Globals.ThisAddIn.GetMaxFileSize() * 1024 * 1024) { MessageBox.Show("文件" + strFileName + "大小超过管理员规定(" + Globals.ThisAddIn.GetMaxFileSize().ToString() + ")", "警告", MessageBoxButtons.OK, MessageBoxIcon.Warning); break; } if (uploadProgressBar.InvokeRequired) { uploadProgressBar.Invoke(new MethodInvoker(delegate { uploadProgressBar.Minimum = 0; uploadProgressBar.Maximum = CaculateProgressBarMaxSize(fInfo.FileLength); uploadProgressBar.Value = 0; LogTrace.TraceInfo("Reset ProgressBar bar, Min {0} Max {1} value {2}", uploadProgressBar.Minimum, uploadProgressBar.Maximum, uploadProgressBar.Value); })); } if (!m_bUploadFolder) { HttpSeaFileGetDirectoryEntriesResponse gdeRsp = httpClient.ExecuteSeaFileGetDirectoryEntriesRequest(m_strToken, m_strRepoID, "/" + m_strDefaultUploadFolder); if (gdeRsp == null) { m_bUploadFolder = httpClient.ExecuteCreateSeaFileCreateNewDirectoryRequest(m_strToken, m_strRepoID, "/" + m_strDefaultUploadFolder); } } HttpSeaFileGetUpdateLinkResponse gulDlg = httpClient.ExecuteSeaFileGetUpdateLinkRequest(m_strToken, m_strRepoID); if (gulDlg != null) { //upload File to ShareFile httpClient.AttachFile(strFilePath, strFileName); String strResult = httpClient.ExecuteBackGroundShareFileUploadFileStream(m_bgwUploadFile, m_strToken, gulDlg.URL, "/" + m_strDefaultUploadFolder); if (strResult == null || strResult == String.Empty) { MessageBox.Show("上传文件 " + strFileName + " 失败!"); LogTrace.TraceError("Upload file {0} failed.", strFileName); } else { String strDownloadLink = httpClient.ExecuteCreateSeaFileCreateDownloadLinkRequest(m_strToken, m_strRepoID, "/" + m_strDefaultUploadFolder + "/" + strFileName, "", 0); if (strDownloadLink != null && strDownloadLink != "" && strDownloadLink != String.Empty) { LogTrace.TraceInfo("Replace attachment {0} with Link {1}", strFileName, strDownloadLink); ReplceAttachment(strFileName, strDownloadLink); } else { MessageBox.Show("文件(" + strFileName + ")下载链接获取失败"); LogTrace.TraceError("Get Download Link for file {0} is empty", strFileName); } } } else { LogTrace.TraceError("Retrieve Upload URL failed."); } } UploadInProgress = false; }
private void ListDirectory(HttpSeaFileGetDirectoryEntriesResponse gdResp) { if (gdResp == null) { LogTrace.TraceError("The entries ar empty."); return; } ImageList imgList = new ImageList(); imgList.ImageSize = new Size(48, 48); imgList.ColorDepth = ColorDepth.Depth32Bit; imgList.Images.Add("Folder", Properties.Resources.folder); imgList.Images.Add("File", Properties.Resources.file); lvFilelist.LargeImageList = imgList; //Add Return folder if (strCurrentFolder != "/") { LogTrace.TraceInfo("Current folder [{0}] is not root folder, add back folder.", strCurrentFolder); ListViewItem lvItem = new ListViewItem(); lvItem.ImageIndex = 0; lvItem.Text = "上一层目录..."; lvItem.Tag = "dirback"; lvItem.ToolTipText = ""; lvFilelist.Items.Add(lvItem); } List <HttpSeaFileGetDirectoryEntriesNode> lstDirectry = gdResp.GetDirectoryEntries(); foreach (HttpSeaFileGetDirectoryEntriesNode node in lstDirectry) { ListViewItem lvItem = new ListViewItem(); lvItem.ImageIndex = 0; lvItem.Text = node.Name; lvItem.Tag = node.Type; lvItem.ToolTipText = node.ID; lvFilelist.Items.Add(lvItem); LogTrace.TraceVerbose("Add folder [{0}:{1}:{2}] into list.", node.Name, node.Type, node.ID); } List <HttpSeaFileGetDirectoryEntriesNode> lstEntry = gdResp.GetFileEntries(); foreach (HttpSeaFileGetDirectoryEntriesNode node in lstEntry) { ListViewItem lvi = new ListViewItem(); //lvi.ImageIndex = 1; lvi.Text = node.Name; lvi.Tag = node.Type; lvi.ToolTipText = node.ID; int iExtStart = node.Name.LastIndexOf('.'); iExtStart = iExtStart < 0 ? 0 : iExtStart; String strExt = node.Name.Substring(iExtStart); try { if (lvFilelist.LargeImageList.Images[strExt] == null) { LogTrace.TraceVerbose("Add Icon for extention {0} into image list.", strExt); lvFilelist.LargeImageList.Images.Add(strExt, Icons.IconFromExtension(strExt, Icons.SystemIconSize.Large)); } lvi.ImageKey = strExt; LogTrace.TraceVerbose("Add {0} Icon for file {1}", strExt, node.Name); } catch (Exception ept) { LogTrace.TraceInfo("Ignore this exception."); LogTrace.TraceException(ept); lvi.ImageKey = "file"; } lvFilelist.Items.Add(lvi); LogTrace.TraceVerbose("Add file [{0}:{1}:{2}] into list.", node.Name, node.Type, node.ID); } }
/// <summary> /// 发送PutOid请求,并返回获得的回应 /// </summary> /// <param name="oid">Wos对象标识</param> /// <returns>返回HttpWosPutOidResponse对象</returns> public HttpSeaFileGetDirectoryEntriesResponse ExecuteSeaFileGetDirectoryEntriesRequest(String strToken, String strRepoId, string strPath) { LogTrace.TraceInfo("ExecuteSeaFileGetDirectoryEntriesRequest"); try { HttpSeaFileGetDirectoryEntriesResponse rsp = new HttpSeaFileGetDirectoryEntriesResponse(); HttpWebRequest req = CreateSeaFileGetDirectoryEntriesRequest(strToken, strRepoId, strPath); if (req != null) { HttpWebResponse res = (HttpWebResponse)req.GetResponse(); LogTrace.TraceInfo("Response code for GetDirectoryEntries is {0}", res.StatusCode); String strResponse = String.Empty; Stream rStream = res.GetResponseStream(); StreamReader sr = new StreamReader(rStream); strResponse = sr.ReadToEnd(); LogTrace.TraceVerbose("Got Server response [{0}]", strResponse); strResponse = strResponse.Replace("[", "{\"root\":["); strResponse = strResponse.Replace("]", "]}"); LogTrace.TraceVerbose("Got Server response replace [{0}]", strResponse); JObject jo = (JObject)JsonConvert.DeserializeObject(strResponse); JToken token = (JToken)jo["root"].First; while (token != null) { int iSize = 0; if (token["type"].ToString() == "file") { iSize = Convert.ToInt32(token["size"].ToString()); } rsp.AddEntry( token["permission"].ToString(), token["mtime"].ToString(), token["type"].ToString(), token["name"].ToString(), token["id"].ToString(), iSize); token = (JToken)token.Next; } req.Abort(); res.Close(); return(rsp); } return(null); } catch (Exception ept) { LogTrace.TraceException(ept); return(null); } }