private List <TXFileInfo> GetFilesAndFolders() { using (var proxy = new ProxyFileEnum()) { proxy.SetHost(HostAndPort); proxy.SetCredentials(GetCreds()); // If there's an exception, it probably occurs on the first call to the proxy. Log.Info("Exchanging version numbers with. ", HostAndPort); int serverVersion = proxy.ExchangeVersion(1); // We pass _savedViewedFiles and _savedViewedFolders to the service so it can // check if they still exist. If they do, they will be in the result list. Log.Info("Getting remote files from ", HostName); List <TXFileInfo> filesAndFolders = proxy.GetRecentFilesAndFolders(_savedViewedFiles.Select(f => f.Path), _savedViewedFolders.Select(f => f.Path)); Log.Info("Got ", filesAndFolders.Count, " results."); // TODO: This might be the place to remove files and folders that have // FoundInRecentFiles == false and whose last viewed time isn't very recent. return(filesAndFolders); } }
/// <summary> /// Calls the TracerX-Service on the remote server to /// get the files in the specified folder. Returns /// only the .tx1 files, if any. /// </summary> public List <PathItem> GetFilesInFolder(string folder) { var result = new List <PathItem>(); List <TXFileInfo> files = null; using (var proxy = new ProxyFileEnum()) { proxy.SetHost(HostAndPort); proxy.SetCredentials(GetCreds()); Log.Info("Getting remote files from ", HostAndPort); files = proxy.GetFilesInFolder(folder); } foreach (TXFileInfo file in files) { ViewedPath viewedFile = _savedViewedFiles.FirstOrDefault(svf => svf.Path.Equals(file.FullPath, StringComparison.OrdinalIgnoreCase)); PathItem pathItem; if (_dictFiles.TryGetValue(file.FullPath, out pathItem)) { // We already know about this file so just update the properties that might have changed. pathItem.WriteTime = file.LastModified; pathItem.CreateTime = file.Created; pathItem.Size = file.Size; if (viewedFile != null) { pathItem.ViewTime = viewedFile.ViewTime; } } else { pathItem = new PathItem(file, viewedFile); _dictFiles.Add(pathItem.FullPath, pathItem); } // Create a new PathItem to return to the caller. // We never return an existing item from _dictFiles because that can cause the same // PathItem to be associated with two PathGridRows, which causes problems. pathItem = new PathItem(file, viewedFile); result.Add(pathItem); } return(result); }
/// <summary> /// Attempts to connect to the TraceX-Service on the specified server and /// returns true if successful. /// </summary> public bool CheckForService() { try { using (var proxy = new ProxyFileEnum()) { proxy.SetHost(HostAndPort); proxy.SetCredentials(GetCreds()); Log.Info("Exchanging version numbers with ", HostAndPort); int serverVersion = proxy.ExchangeVersion(1); return(true); } } catch (Exception ex) { // The TracerX-Service probably just isn't running on the remote server. Log.Info("Exception checking for TracerX-Service on ", HostAndPort, ": ", ex.Message); return(false); } }
public TestConnectionResult TestConnection() { var result = new TestConnectionResult() { HostAndPort = this.HostAndPort }; try { using (ProxyFileEnum serviceProxy = new ProxyFileEnum()) { serviceProxy.SetHost(HostAndPort); serviceProxy.SetCredentials(GetCreds()); result.ServiceVersion = serviceProxy.ExchangeVersion(1); if (result.ServiceVersion < 3) { // That's all we can get (the interface version). } else if (result.ServiceVersion < 5) { serviceProxy.GetServiceHostInfo(out result.HostExe, out result.HostVersion, out result.HostAccount); } else { // As of version 5, we can get whether or not the service is impersonating clients or not. bool isImpersonating; serviceProxy.GetServiceHostInfo2(out result.HostExe, out result.HostVersion, out result.HostAccount, out isImpersonating); result.IsImpersonatingClients = isImpersonating; } } } catch (Exception ex) { result.Exception = ex; } return(result); }
// Returns true if any files were deleted or listed. private void Go(bool listFiles) { try { List <string> files = null; if (_server == null) { // Process local files directly. if (listFiles || DialogResult.Yes == MainForm.ShowMessageBoxBtns("Delete specified files?", MessageBoxButtons.YesNo)) { files = DeleteRelated.DeleteMany( txtFileSpec.Text, txtFolderSpec.Text, dtpFromTime.Value, dtpToTime.Value, int.Parse(txtFromSize.Text) * 1024, int.Parse(txtToSize.Text) * 1024, chkBinary.Checked, chkText.Checked, chkDeleteFolders.Checked, listFiles, Log); } } else { // Process remote files via the WCF server. using (ProxyFileEnum serviceProxy = new ProxyFileEnum()) { // Need to use host:port and credentials. serviceProxy.SetHost(_server.HostAndPort); serviceProxy.SetCredentials(_server.GetCreds()); int serverVersion = serviceProxy.ExchangeVersion(1); if (serverVersion >= 4) { // This version of the server has a method for deleting all the // matching files and parent folder(s) in one call, so display the // appropriate message and call that method. if (listFiles || DialogResult.Yes == MainForm.ShowMessageBoxBtns("Delete specified files?", MessageBoxButtons.YesNo)) { files = serviceProxy.DeleteMany( txtFileSpec.Text, txtFolderSpec.Text, dtpFromTime.Value, dtpToTime.Value, int.Parse(txtFromSize.Text) * 1024, int.Parse(txtToSize.Text) * 1024, chkBinary.Checked, chkText.Checked, chkDeleteFolders.Checked, listFiles); } } else { string msg = "Sorry, the TracerX-Service you're connected to is an old version that doesn't support this feature."; MainForm.ShowMessageBox(msg); } } } if (files != null) { Log.Info(files.Count, " files were returned by DeleteMany()."); if (files.Any()) { if (listFiles) { // Display the files. var dlg = new FullText(string.Join("\r\n", files), false, true); dlg.Height = 500; dlg.Text = "Matching Log Files (" + files.Count + ")"; dlg.ShowDialog(); } else { MainForm.ShowMessageBox(files.Count.ToString() + " files were deleted."); DidDeleteFiles = true; } } else { MainForm.ShowMessageBox("No files matched the specified criteria."); } } } catch (Exception ex) { MainForm.ShowMessageBox("An error occurred in the Clean Up Files dialog.\n\n" + ex.ToString()); } }