コード例 #1
0
        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();
            }
        }
コード例 #2
0
        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();
                }
            }
        }
コード例 #3
0
        /// <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;
        }
コード例 #4
0
        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);
            }
        }
コード例 #5
0
        /// <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);
            }
        }