/* * Copyright 1995, 2000 Perforce Software. All rights reserved. * * This file is part of Perforce - the FAST SCM System. */ # include "stdhdrs.h" # include "strbuf.h" # include "strdict.h" # include "error.h" # include "handler.h" # include "filesys.h" # include "p4tags.h" # include "clientmerge.h" # include "clientresolvea.h" # include "clientuser.h" # include "keepalive.h" /* * ClientApi - the Perforce client API * * Basic flow: * * ClientUser ui; * ClientApi client; * * // SetPort(), SetProtocol() must happen _before_ the Init(). * * client.SetPort( somefunctionof( client.GetPort() ) ); //optional * client.SetProtocol( "var", "value" ); //optional * * client.Init( e ); * * // GetClient(), SetBreak(), SetProg() must happen _after_ the Init(). * * client.SetBreak( &k ); // optional * * client.SetProg( "MyApp" ); // optional * * client.SetVersion( "version" ); // optional * * client.SetClient( somefunctionof( client.GetClient() ) ); //optional * client.SetCwd( somefunctionof( client.GetCwd() ) ); //optional * client.SetUser( somefunctionof( client.GetUser() ) ); //optional * * while( !client.Dropped() ) * { * client.SetArgv( argc, argv ) * client.Run( func, &ui ) * } * * return client.Final( e ); * * Public methods: * * ClientApi::SetUi() - reset the ClientUser object used * ClientApi::SetProtocol() - ask for special server treatment * ClientApi::GetProtocol() - get a protocol capability * SetProtocol() is called before Init(); GetProtocol() after Run(). * * ClientApi::Init() - establish connection and prepare to run commands. * * ClientApi::SetVar() - set variable * ClientApi::SetVarV() - set variable using var=value syntax * ClientApi::SetArgv() - set unnamed variables (args for Run()) * ClientApi::GetVar() - get variable * * ClientApi::Run() - run a single command * ClientApi::Final() - clean up end of connection, returning error count. * ClientApi::Dropped() - check if connection is no longer serviceable * ClientApi::GetErrors() - get count of errors returned by server. * * ClientApi::RunTag() - run a single command (potentially) asynchronously. * ClientApi::WaitTag() - wait for a RunTag()/all RunTag()s to complete. * * ClientApi::SetCharset() * ClientApi::SetClient() * ClientApi::SetCwd() * ClientApi::SetHost() * ClientApi::SetLanguage() * ClientApi::SetPassword() * ClientApi::SetPort() * ClientApi::SetUser() - set client, current directory, host, port, or * user, overridding all defaults. SetPort() must be called * before Init() in order to take effect. The others must be * set before Run() to take effect. * * SetCwd() additionally searches for a new P4CONFIG file. * * ClientApi::SetBreak() - set a subclassed KeepAlive object (only * method IsAlive returns zero on dropped connection). Must * be called after Init() it order to take affect. * * ClientApi::SetProg() - set the name of the application program, * this will show up in 'p4 monitor' and server log output. * Should be called before Init(). * * ClientApi::SetVersion() - sets the version string of the application. * If not called, the version defaults to protocolClient. This * will be appended to the program name in 'p4 monitor' and * server log output. It should be called after Init() and * before each call to Run(). * * ClientApi::SetTicketFile() - set the location of the users ticketfile, * must be the full pathname to the file and not a directory. * * ClientApi::DefineCharset() * ClientApi::DefineClient() * ClientApi::DefineHost() * ClientApi::DefineLanguage() * ClientApi::DefinePassword() * ClientApi::DefinePort() * ClientApi::DefineUser() - sets client, port, or user in the registry * and (so as to take permanent effect) then calls SetClient(), * etc. to take immediate effect. * * ClientApi::GetBuild() * ClientApi::GetCharset() * ClientApi::GetClient() * ClientApi::GetCwd() * ClientApi::GetHost() * ClientApi::GetLanguage() * ClientApi::GetOs() * ClientApi::GetPassword() * ClientApi::GetPort() * ClientApi::GetUser() - get current directory, client, OS, port or user, * as determined by defaults or by corresponding set value. * GetClient()/GetHost() are not valid until after Init() * establishes the connection, because the hostname of the * local endpoint may serve as the default client name. * * Client::GetConfig() - get the filename pointed to by P4CONFIG, as * determined by enviro::Config(). * * ClientApi::SetIgnorePassword() - This function ignores passwords * that are found in the registry (NT), host environments or * configuration files. If this function is set then only * passwords supplied through SetPassword() will be honored. * Tickets continue to work as normal. Must be called before * Init() in order to take affect. */ class Client; class Ignore; class ClientApi : public StrDict { public: // caller's main interface ClientApi(); ~ClientApi(); void SetTrans( int output, int content = -2, int fnames = -2, int dialog = -2 ); void SetProtocol( const char *p, const char *v ); void SetProtocolV( const char *p ); StrPtr * GetProtocol( const char *v ); void Init( Error *e ); void Run( const char *func, ClientUser *ui ); int Final( Error *e ); int Dropped(); int GetErrors(); int GetTrans(); int IsUnicode(); void RunTag( const char *func, ClientUser *ui ); void WaitTag( ClientUser *ui = 0 ); void SetCharset( const char *c ); void SetClient( const char *c ); void SetCwd( const char *c ); void SetCwdNoReload( const char *c ); void SetHost( const char *c ); void SetIgnoreFile( const char *c ); void SetLanguage( const char *c ); void SetPassword( const char *c ); void SetPort( const char *c ); void SetUser( const char *c ); void SetProg( const char *c ); void SetVersion( const char *c ); void SetTicketFile( const char *c ); void SetEnviroFile( const char *c ); void SetCharset( const StrPtr *c ); void SetClient( const StrPtr *c ); void SetCwd( const StrPtr *c ); void SetCwdNoReload( const StrPtr *c ); void SetHost( const StrPtr *c ); void SetIgnoreFile( const StrPtr *c ); void SetLanguage( const StrPtr *c ); void SetPassword( const StrPtr *c ); void SetPort( const StrPtr *c ); void SetUser( const StrPtr *c ); void SetProg( const StrPtr *c ); void SetVersion( const StrPtr *c ); void SetTicketFile( const StrPtr *c ); void SetEnviroFile( const StrPtr *c ); void SetBreak( KeepAlive *k ); void DefineCharset( const char *c, Error *e ); void DefineClient( const char *c, Error *e ); void DefineHost( const char *c, Error *e ); void DefineIgnoreFile( const char *c, Error *e ); void DefineLanguage( const char *c, Error *e ); void DefinePassword( const char *c, Error *e ); void DefinePort( const char *c, Error *e ); void DefineUser( const char *c, Error *e ); const StrPtr &GetCharset(); const StrPtr &GetClient(); const StrPtr &GetClientNoHost(); const StrPtr &GetCwd(); const StrPtr &GetHost(); const StrPtr &GetIgnoreFile(); const StrPtr &GetLanguage(); const StrPtr &GetOs(); const StrPtr &GetPassword(); const StrPtr &GetPort(); const StrPtr &GetUser(); const StrPtr &GetConfig(); const StrPtr &GetBuild(); Ignore * GetIgnore(); void SetIgnorePassword(); public: // The old interface, where ui was held from the start ClientApi( ClientUser *ui ); void SetUi( ClientUser *i ); void Run( const char *func ); private: // Our StrDict implementation // Set strdict.h for various GetVar/SetVar calls StrPtr *VGetVar( const StrPtr &var ); void VSetVar( const StrPtr &var, const StrPtr &val ); private: Client *client; // wrapped up RPC ClientUser *ui; // the old way } ;
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#1 | 15071 | alan_petersen |
Populate -o //guest/perforce_software/piper/... //guest/alan_petersen/piper/.... |
||
//guest/perforce_software/piper/mac/main/Perforce/p4api/Headers/clientapi.h | |||||
#3 | 13625 | alan_petersen |
UPDATE: - updated p4api to p4api-2015.1.1054991 - included in OpenSSL 1.0.2a ssl and crypto libraries The benefit of these are that Piper now supports connecting to 15.1 servers, and also supports ssl: connections. Woo hoo! |
||
#2 | 12961 | alan_petersen |
Piper 2.0 Mega Update New Features/Functionality - Added help menu redirecting to URL. - Added readonly property for creating new workspaces. - Added html hyperlinks for Copy link functionality. - Added functionality for managing Finder Favorite items in sidebar. - Redesigned the way mapping is stored in Piper. - First version of syncing finder sidebar items with workspace mapping. - Small sorting improvements. - Creating Projects directory inside users home folder. - Adding Projects folder to finder sidebar item. - Creating and removing symbolic links accordingly to mapped folders. - Preventing duplicate names in symbolic links. - Refreshing symbolic links on mapping change inside application. - Storing workspace and server details in p4 configuration for other applications to use. - Added contextual menu items for Finder integration. - Added services menu for Adobe Illustrator integration. - Keyboard shortcuts for Illustrator integration. - Code refactoring and fixes for mapping issues. - Added Finder functionality to edit all files in folder. - Added user friendly message when editing a file using Finder outside the workspace. - Implemented hidden automatic login when opening application using Finder integration. - Logging to file in ~/Library/Logs - Unified workspace and all files views to show both local and depot files and folders. - Removed my workspace view references and logic. - Editing unmapped files on server. - First version of adding file to unmapped folders. - Showing opened by and edit actions in column details for all depot files. - Improved mappings functionality. - Enabled same feature options for mapped and unmapped folders and files. - Redesigned from scratch mapping and unmapping procedures for adding and removing files. - Implemented cleaning workspace using new mapping functionality. Removed debug overlay coloring. - Automated workspace creation - Improvements in editing files already mapped to workspace. - Implemented deleting remote files. - Implemented first version of move operation for remote files. - Removing last workspace information when disconnecting from workspace using app menu. - Implemented editing and submitting using symbolic links in project folder. New finder menu service for symbolic links Show in Piper which acts like share link functionality. - New icons for files and folders not tracked in the filesystem. - Improvements in showing file using share link. - Switched to new way of retrieving files in order to show user changes. - Redesigned and implemented new functionality for chaining operations with mapping. - Improvements and redesign of Edit/add actions to use new chaining logic . Fixed issue with file edit. - Improvements in window showing when using services. - Simplified file loading so the local files appears only when remote are also loaded. - Improved deleting of untracked files to avoid mapping and marking for delete. - Enabling simple copy paste and moving of remote and local files. - Added abort for exception handling in order to force crashing application on critical failures - Added custom exception handling for catching runtime errors to log and crash instead of continuing in unstable state. - Changed file copying to use mark for add . - Simplified and fixed responding file representations to mapping changes. Bug Fixes - Fixed crash when synchronizing. - Fixed sync issue when downloading directory without file size information. - Fixed issue with unread list crashing when file is not existing on disk. - Fixed incorrect sync progress calculation. - Removed relative path issues. - Fixed many of case-sensitivity problems. - Fixed deprecated methods and related issues in OS X 10.10. - Fixed folder rename not updating in column view. Revised and fixed many potential problems from implicit casting. - Fixed missing sync button on fast sync completion. - Refreshing mapping on synchronization. Fixed symbolic links not appearing until app is restarted. - Fixed latest crashing of autosync. - Fixed loading indicator issues. - Fixed and redesigned submit dialog to work correctly with Submit All Files option in Finder. - Fixed multiple error messages on network outage. Redesigned showing errors in main window. - Fixed opening random locations when using Finder integration. - Fixed issue when panel was detached from parent window. - Fixed bug when creating new workspace wouldn't store default settings. - Fixed memory issues with network operations. - Fixes in relogging mappings and file listing. - Improvements in editing unmapped files. - Fixed crash when adding file outside workspace. - Fixed breadcrumbs control issue. - Fixed issue with double parent folders when opening unmapped files. - Fixed crashes on sync after mapping new files. - Fixed issue with editing file using Finder -- Merging code and additional fixes in add button functionality. - Fixed unsync not working - Fixed submit panel issue not selecting files with different name case. - Fixed missing revert and sync to workspace actions in some cases. - Fixed issue with Submit and Edit finder actions. Improvements in stability of finder integration. - Fixed issue with unsubmitted folders breaking status of files inside. - Fixed issue with added files not showing correct icon and status. - Fixed bug with file edit resulting in a new directory named exactly like a file. - Fixed issue with reloading of subpath resulting in untracked folders. - Fixed mapping issue when result was always view mapping not relative. - Fixed submit panel showing more than once. - Fixed illustrator services not working. - Fixed userdefaults preferences problem with workspace name being null. - Fixed userdefaults keypath problem of dot-containing workspace names. - Forcing recreating of browser to possibly prevent pre-10.10 errors with automatic workspace selection. - Fixed adding file to depot not presenting correct icon. - Fixed issues with reverting a file that was marked for add. - Presenting error when trying to submit untracked files. - Fixed issue when submit files service crashed when using unmapped files. - Fixed file representation disappearing when removing file. - Fixed issue with symlinks resolving working on 10.10 only. Issue related to workspace selection not showing. - Fixed error panel method calls unavailable in Mac OS versions before 10.10. Issue related to hanging error panels. - Fixed removing a local file resulting in action progress freezing. - Fixed open file not working after edit. - Fixing crash when mapping changed. Issue related to moving local file to unmapped folder and other similar cases. |
||
#1 | 11252 | alan_petersen | Rename/move file(s) | ||
//guest/perforce_software/piper/mac/Perforce/p4api/Headers/clientapi.h | |||||
#1 | 10744 | alan_petersen | Rename/move file(s) | ||
//guest/perforce_software/piper/Perforce/p4api/Headers/clientapi.h | |||||
#1 | 8919 | Matt Attaway | Initial add of Piper, a lightweight Perforce client for artists and designers. |