plugins.wfx
Class WFXPluginAdapter

java.lang.Object
  extended by plugins.wfx.WFXPluginAdapter
All Implemented Interfaces:
WFXPluginInterface

public abstract class WFXPluginAdapter
extends java.lang.Object
implements WFXPluginInterface

Author:
Ken

Field Summary
 
Fields inherited from interface plugins.wfx.WFXPluginInterface
CONTENT_DELAYIFSLOW, CONTFLAGS_EDIT, CONTFLAGS_FIELDEDIT, CONTFLAGS_PASSTHROUGH_SIZE_FLOAT, CONTFLAGS_SUBSTATTRIBUTES, CONTFLAGS_SUBSTATTRIBUTESTR, CONTFLAGS_SUBSTDATE, CONTFLAGS_SUBSTDATETIME, CONTFLAGS_SUBSTMASK, CONTFLAGS_SUBSTSIZE, CONTFLAGS_SUBSTTIME, FS_COPYFLAGS_EXISTS_DIFFERENTCASE, FS_COPYFLAGS_EXISTS_SAMECASE, FS_COPYFLAGS_MOVE, FS_COPYFLAGS_OVERWRITE, FS_COPYFLAGS_RESUME, FS_EXEC_ERROR, FS_EXEC_OK, FS_EXEC_SYMLINK, FS_EXEC_YOURSELF, FS_FILE_EXISTS, FS_FILE_EXISTSRESUMEALLOWED, FS_FILE_NOTFOUND, FS_FILE_NOTSUPPORTED, FS_FILE_OK, FS_FILE_READERROR, FS_FILE_USERABORT, FS_FILE_WRITEERROR, FS_ICON_DELAYED, FS_ICON_EXTRACTED, FS_ICON_EXTRACTED_DESTROY, FS_ICON_USEDEFAULT, FS_ICONFLAG_BACKGROUND, FS_ICONFLAG_SMALL, FS_STATUS_END, FS_STATUS_OP_ATTRIB, FS_STATUS_OP_CALCSIZE, FS_STATUS_OP_DELETE, FS_STATUS_OP_EXEC, FS_STATUS_OP_GET_MULTI, FS_STATUS_OP_GET_SINGLE, FS_STATUS_OP_LIST, FS_STATUS_OP_MKDIR, FS_STATUS_OP_PUT_MULTI, FS_STATUS_OP_PUT_SINGLE, FS_STATUS_OP_RENMOV_MULTI, FS_STATUS_OP_RENMOV_SINGLE, FS_STATUS_OP_SEARCH, FS_STATUS_OP_SEARCH_TEXT, FS_STATUS_OP_SYNC_DELETE, FS_STATUS_OP_SYNC_GET, FS_STATUS_OP_SYNC_PUT, FS_STATUS_OP_SYNC_SEARCH, FS_STATUS_START, HUNDRED_PERCENT, INVALID_HANDLE_VALUE, MSGTYPE_CONNECT, MSGTYPE_CONNECTCOMPLETE, MSGTYPE_DETAILS, MSGTYPE_DISCONNECT, MSGTYPE_IMPORTANTERROR, MSGTYPE_OPERATIONCOMPLETE, MSGTYPE_TRANSFERCOMPLETE, RT_ACCOUNT, RT_MSGOK, RT_MSGOKCANCEL, RT_MSGYESNO, RT_OTHER, RT_PASSWORD, RT_PASSWORDFIREWALL, RT_TARGETDIR, RT_URL, RT_USERNAME, RT_USERNAMEFIREWALL, SETFLAGS_FIRST_ATTRIBUTE, SETFLAGS_LAST_ATTRIBUTE, SETFLAGS_ONLY_DATE
 
Constructor Summary
WFXPluginAdapter()
           
 
Method Summary
 int fsContentGetDefaultSortOrder(int fieldIndex)
          fsContentGetDefaultSortOrder is called when the user clicks on the sorting header above the columns.
 boolean fsContentGetDefaultView(java.lang.String viewContents, java.lang.String viewHeaders, java.lang.String viewWidths, java.lang.String viewOptions, int maxlen)
          FsContentGetDefaultView is called to get the default view to which Total Commander should switch when this file system plugin is entered.
 int fsContentGetSupportedField(int fieldIndex, java.lang.StringBuffer fieldName, java.lang.StringBuffer units, int maxlen)
          FsContentGetSupportedField is called to enumerate all supported fields.
 int fsContentGetSupportedFieldFlags(int fieldIndex)
          fsContentGetSupportedFieldFlags is called to get various information about a plugin variable.
 int fsContentGetValue(java.lang.String fileName, int fieldIndex, int unitIndex, FieldValue fieldValue, int maxlen, int flags)
          fsContentGetValue is called to retrieve the value of a specific field for a given file, e.g. the date field of a file.
 void fsContentPluginUnloading()
          fsContentPluginUnloading is called just before the plugin is unloaded, e.g. to close buffers, abort operations etc.
 int fsContentSetValue(java.lang.String fileName, int fieldIndex, int unitIndex, int fieldType, FieldValue fieldValue, int flags)
          fsContentSetValue is called to set the value of a specific field for a given file, e.g. to change the date field of a file.
 void fsContentStopGetValue(java.lang.String fileName)
          fsContentStopGetValue is called to tell a plugin that a directory change has occurred, and the plugin should stop loading a value.
 boolean fsDeleteFile(java.lang.String remoteName)
          FsDeleteFile is called to delete a file from the plugin's file system.
 boolean fsDisconnect(java.lang.String disconnectRoot)
          FsDisconnect is called when the user presses the Disconnect button in the FTP connections toolbar.
 int fsExecuteFile(int mainWin, java.lang.String remoteName, java.lang.String verb)
          FsExecuteFile is called to execute a file on the plugin's file system, or show its property sheet.
 int fsExtractCustomIcon(java.lang.String remoteName, int extractFlags, java.lang.StringBuffer theIcon)
          FsExtractCustomIcon is called when a file/directory is displayed in the file list.
abstract  int fsFindClose(java.lang.Object handle)
          FsFindClose is called to end a FsFindFirst/FsFindNext loop, either after retrieving all files, or when the user aborts it.
abstract  java.lang.Object fsFindFirst(java.lang.String path, Win32FindData lastFindData)
          FsFindFirst is called to retrieve the first file in a directory of the plugin's file system.
abstract  boolean fsFindNext(java.lang.Object handle, Win32FindData findData)
          FsFindNext is called to retrieve the next file in a directory of the plugin's file system.
 java.lang.String fsGetDefRootName(int maxlen)
          FsGetDefRootName is called only when the plugin is installed.
 int fsGetFile(java.lang.String remoteName, java.lang.String localName, int copyFlags, RemoteInfo remoteInfo)
          FsGetFile is called to transfer a file from the plugin's file system to the normal file system (drive letters or UNC).
 boolean fsGetLocalName(java.lang.String remoteName, int maxlen)
          FsGetLocalName must not be implemented unless your plugin is a temporary file panel plugin!
 int fsGetPreviewBitmap(java.lang.String remoteName, int width, int height, java.lang.StringBuffer filename)
          FsGetPreviewBitmap is called when a file/directory is displayed in thumbnail view.
 int fsInit(int pluginNr)
          FsInit is called when loading the plugin.
 boolean fsLinksToLocalFiles()
          FsLinksToLocalFiles must not be implemented unless your plugin is a temporary file panel plugin!
 void fsLog(int pluginNr, int msgType, java.lang.String logString)
          LogProc is a callback function, which the plugin can call to show the FTP connections toolbar, and to pass log messages to it.
 boolean fsMkDir(java.lang.String path)
          FsMkDir is called to create a directory on the plugin's file system.
 int fsPutFile(java.lang.String localName, java.lang.String remoteName, int copyFlags)
          FsPutFile is called to transfer a file from the normal file system (drive letters or UNC) to the plugin's file system.
 boolean fsRemoveDir(java.lang.String remoteName)
          FsRemoveDir is called to remove a directory from the plugin's file system.
 int fsRenMovFile(java.lang.String oldName, java.lang.String newName, boolean move, boolean overwrite, RemoteInfo remoteInfo)
          FsRenMovFile is called to transfer (copy or move) a file within the plugin's file system.
 boolean fsRequest(int pluginNr, int requestType, java.lang.String customTitle, java.lang.String customText, java.lang.StringBuffer returnedText)
          RequestProc is a callback function, which the plugin can call to request input from the user.
 boolean fsSetAttr(java.lang.String remoteName, int newAttr)
          FsSetAttr is called to set the (Windows-Style) file attributes of a file/dir.
 void fsSetDefaultParams(DefaultParam dps)
          FsSetDefaultParams is called immediately after FsInit().
 int fsSetProgress(int pluginNr, java.lang.String sourceName, java.lang.String targetName, int percentDone)
          ProgressProc is a callback function, which the plugin can call to show copy progress.
 boolean fsSetTime(java.lang.String remoteName, FileTime creationTime, FileTime lastAccessTime, FileTime lastWriteTime)
          FsSetTime is called to set the (Windows-Style) file times of a file/dir.
 void fsStatusInfo(java.lang.String remoteDir, int infoStartEnd, int infoOperation)
          FsStatusInfo is called just as an information to the plugin that a certain operation starts or ends.
 int getPluginNr()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

WFXPluginAdapter

public WFXPluginAdapter()
Method Detail

getPluginNr

public final int getPluginNr()
Returns:
Returns the fPluginNr.

fsInit

public int fsInit(int pluginNr)
FsInit is called when loading the plugin. The passed values should be stored in the plugin for later use.

Specified by:
fsInit in interface WFXPluginInterface
Parameters:
pluginNr - Internal number this plugin was given in Total Commander. Has to be passed as the first parameter in all callback functions so Wincmd knows which plugin has sent the request.
Returns:
The return value is currently unused. You should return 0 when successful.

fsFindFirst

public abstract java.lang.Object fsFindFirst(java.lang.String path,
                                             Win32FindData lastFindData)
FsFindFirst is called to retrieve the first file in a directory of the plugin's file system.
Important note:
FsFindFirst may be called directly with a subdirectory of the plugin! You cannot rely on it being called with the root \ after it is loaded. Reason: Users may have saved a subdirectory to the plugin in the Ctrl+D directory hotlist in a previous session with the plugin.

Specified by:
fsFindFirst in interface WFXPluginInterface
Parameters:
path - Full path to the directory for which the directory listing has to be retrieved. Important: no wildcards are passed to the plugin! All separators will be backslashes, so you will need to convert them to forward slashes if your file system uses them! As root, a single backslash is passed to the plugin. The root items appear in the plugin base directory retrieved by FsGetDefRootName at installation time. This default root name is NOT part of the path passed to the plugin! All subdirs are built from the directory names the plugin returns through FsFindFirst and FsFindNext, separated by single backslashes, e.g. \Some server\c:\subdir
lastFindData - Contains the file or directory details. Use the dwFileAttributes field set to FILE_ATTRIBUTE_DIRECTORY to distinguish files from directories. On Unix systems, you can | (or) the dwFileAttributes field with 0x80000000 and set the dwReserved0 parameter to the Unix file mode (permissions).
Returns:
Return INVALID_HANDLE_VALUE if an error occurs, or an object if not. It is recommended to pass an instance to an internal class, which stores the current state of the search. This will allow recursive directory searches needed for copying whole trees. This instance will be passed as parameter 'handle' to FsFindNext() by the calling program.

fsFindNext

public abstract boolean fsFindNext(java.lang.Object handle,
                                   Win32FindData findData)
FsFindNext is called to retrieve the next file in a directory of the plugin's file system.

Specified by:
fsFindNext in interface WFXPluginInterface
Parameters:
handle - The object returned by FsFindFirst.
findData - Contains the file or directory details. Use the dwFileAttributes field set to FILE_ATTRIBUTE_DIRECTORY to distinguish files from directories. On Unix systems, you can | (or) the dwFileAttributes field with 0x80000000 and set the dwReserved0 parameter to the Unix file mode (permissions).
Returns:
Return false if an error occurs or if there are no more files, and true otherwise.

fsFindClose

public abstract int fsFindClose(java.lang.Object handle)
FsFindClose is called to end a FsFindFirst/FsFindNext loop, either after retrieving all files, or when the user aborts it.

Specified by:
fsFindClose in interface WFXPluginInterface
Parameters:
handle - The find handle returned by FsFindFirst.
Returns:
Currently unused, should return 0.

fsGetDefRootName

public java.lang.String fsGetDefRootName(int maxlen)
FsGetDefRootName is called only when the plugin is installed. It asks the plugin for the default root name which should appear in the Network Neighborhood. This root name is NOT part of the path passed to the plugin when Wincmd accesses the plugin file system! The root will always be "\", and all subpaths will be built from the directory names returned by the plugin.
Example: The root name may be "Linux file system" for a plugin which accesses Linux drives. If this function isn't implemented, Wincmd will suggest the name of the DLL (without extension .DLL) as the plugin root. This function is called directly after loading the plugin (when the user installs it), FsInit() is NOT called when installing the plugin.

Specified by:
fsGetDefRootName in interface WFXPluginInterface
Parameters:
maxlen - Maximum number of characters (including the final 0) which fit in the buffer.
Returns:
root name.

fsGetFile

public int fsGetFile(java.lang.String remoteName,
                     java.lang.String localName,
                     int copyFlags,
                     RemoteInfo remoteInfo)
FsGetFile is called to transfer a file from the plugin's file system to the normal file system (drive letters or UNC).
Important notes:
Total Commander usually calls this function twice: While copying the file, but at least at the beginning and the end, call ProgressProc to show the copy progress and allow the user to abort the operation.

Specified by:
fsGetFile in interface WFXPluginInterface
Parameters:
remoteName - Name of the file to be retrieved, with full path. The name always starts with a backslash, then the names returned by FsFindFirst/FsFindNext separated by backslashes.
localName - Local file name with full path, either with a drive letter or UNC path (\\Server\Share\filename). The plugin may change the NAME/EXTENSION of the file (e.g. when file conversion is done), but not the path!
copyFlags - Can be a combination of the following three flags:
FS_COPYFLAGS_OVERWRITE: If set, overwrite any existing file without asking. If not set, simply fail copying.
FS_COPYFLAGS_RESUME: Resume an aborted or failed transfer.
FS_COPYFLAGS_MOVE: The plugin needs to delete the remote file after uploading.
See above for important notes!
remoteInfo - This parameter contains information about the remote file which was previously retrieved via FsFindFirst/FsFindNext: The size, date/time, and attributes of the remote file. May be useful to copy the attributes with the file, and for displaying a progress dialog.
Returns:
Return one of the following values:
FS_FILE_OK The file was copied OK
FS_FILE_EXISTS The local file already exists, and resume is not supported.
FS_FILE_NOTFOUND The remote file couldn't be found or opened.
FS_FILE_READERROR There was an error reading from the remote file.
FS_FILE_WRITEERROR There was an error writing to the local file, e.g. disk full.
FS_FILE_USERABORT Copying was aborted by the user (through ProgressProc). FS_FILE_NOTSUPPORTED The operation is not supported (e.g. resume).
FS_FILE_EXISTSRESUMEALLOWED The local file already exists, and resume is supported.

fsPutFile

public int fsPutFile(java.lang.String localName,
                     java.lang.String remoteName,
                     int copyFlags)
FsPutFile is called to transfer a file from the normal file system (drive letters or UNC) to the plugin's file system.
Important notes:
Total Commander usually calls this function twice, with the following parameters in CopyFlags: While copying the file, but at least at the beginning and the end, call ProgressProc to show the copy progress and allow the user to abort the operation.

Specified by:
fsPutFile in interface WFXPluginInterface
Parameters:
localName - Local file name with full path, either with a drive letter or UNC path (\\Server\Share\filename). This file needs to be uploaded to the plugin's file system.
remoteName - Name of the remote file, with full path. The name always starts with a backslash, then the names returned by FsFindFirst/FsFindNext separated by backslashes. The plugin may change the NAME/EXTENSION of the file (e.g. when file conversion is done), but not the path!
copyFlags - Can be a combination of the FS_COPYFLAGS_xxx flags
FS_COPYFLAGS_OVERWRITE: If set, overwrite any existing file without asking. If not set, simply fail copying.
FS_COPYFLAGS_RESUME: Resume an aborted or failed transfer.
FS_COPYFLAGS_MOVE: The plugin needs to delete the local file after uploading.
FS_COPYFLAGS_EXISTS_SAMECASE: A hint from the calling program: The remote file exists and has the same case (upper/lowercase) as the local file.
FS_COPYFLAGS_EXISTS_DIFFERENTCASE: A hint from the calling program: The remote file exists and has different case (upper/lowercase) than the local file.
See above for important notes!
Returns:
Return one of the following values:
FS_FILE_OK The file was copied OK.
FS_FILE_EXISTS The remote file already exists, and resume is not supported.
FS_FILE_NOTFOUND The local file couldn't be found or opened.
FS_FILE_READERROR There was an error reading from the local file. FS_FILE_WRITEERROR There was an error writing to the remote file, e.g. disk full.
FS_FILE_USERABORT Copying was aborted by the user (through ProgressProc.
FS_FILE_NOTSUPPORTED The operation is not supported (e.g. resume) FS_FILE_EXISTSRESUMEALLOWED The remote file already exists, and resume is supported

fsRenMovFile

public int fsRenMovFile(java.lang.String oldName,
                        java.lang.String newName,
                        boolean move,
                        boolean overwrite,
                        RemoteInfo remoteInfo)
FsRenMovFile is called to transfer (copy or move) a file within the plugin's file system.
Important notes:
Total Commander usually calls this function twice: - once with OverWrite==false. If the remote file exists, return FS_FILE_EXISTS. If it doesn't exist, try to copy the file, and return an appropriate error code. - a second time with OverWrite==true, if the user chose to overwrite the file. While copying the file, but at least at the beginning and the end, call ProgressProc to show the copy progress and allow the user to abort the operation.

Specified by:
fsRenMovFile in interface WFXPluginInterface
Parameters:
oldName - Name of the remote source file, with full path. The name always starts with a backslash, then the names returned by FsFindFirst/FsFindNext separated by backslashes.
newName - Name of the remote destination file, with full path. The name always starts with a backslash, then the names returned by FsFindFirst/FsFindNext separated by backslashes.
move - If true, the file needs to be moved to the new location and name. Many file systems allow to rename/move a file without actually moving any of its data, only the pointer to it.
overwrite - Tells the function whether it should overwrite the target file or not. See notes below on how this parameter is used.
remoteInfo - An instance of class RemoteInfo which contains the parameters of the file being renamed/moved (not of the target file!). In TC 5.51, the fields are set as follows for directories: SizeLow=0, SizeHigh=0xFFFFFFFF.
Returns:
Return one of the following values:
  • FS_FILE_OK The file was copied/moved OK
  • FS_FILE_EXISTS The target file already exists
  • FS_FILE_NOTFOUND The source file couldn't be found or opened.
  • FS_FILE_READERROR There was an error reading from the source file
  • FS_FILE_WRITEERROR There was an error writing to the target file, e.g. disk full
  • FS_FILE_USERABORT Copying was aborted by the user (through ProgressProc)
  • FS_FILE_NOTSUPPORTED The operation is not supported (e.g. resume)
  • FS_FILE_EXISTSRESUMEALLOWED not used here

fsDeleteFile

public boolean fsDeleteFile(java.lang.String remoteName)
FsDeleteFile is called to delete a file from the plugin's file system.

Specified by:
fsDeleteFile in interface WFXPluginInterface
Parameters:
remoteName - RemoteName Name of the file to be deleted, with full path. The name always starts with a backslash, then the names returned by FsFindFirst/FsFindNext separated by backslashes.
Returns:
Return TRUE if the file could be deleted, FALSE if not.

fsRemoveDir

public boolean fsRemoveDir(java.lang.String remoteName)
FsRemoveDir is called to remove a directory from the plugin's file system.

Specified by:
fsRemoveDir in interface WFXPluginInterface
Parameters:
remoteName - Name of the directory to be removed, with full path. The name always starts with a backslash, then the names returned by FsFindFirst/FsFindNext separated by backslashes.
Returns:
Return TRUE if the directory could be removed, FALSE if not.

fsMkDir

public boolean fsMkDir(java.lang.String path)
FsMkDir is called to create a directory on the plugin's file system.

Specified by:
fsMkDir in interface WFXPluginInterface
Parameters:
path - Name of the directory to be created, with full path. The name always starts with a backslash, then the names returned by FsFindFirst/FsFindNext separated by backslashes.
Returns:
Return TRUE if the directory could be created, FALSE if not.

fsExecuteFile

public int fsExecuteFile(int mainWin,
                         java.lang.String remoteName,
                         java.lang.String verb)
FsExecuteFile is called to execute a file on the plugin's file system, or show its property sheet. It is also called to show a plugin configuration dialog when the user right clicks on the plugin root and chooses 'properties'. The plugin is then called with RemoteName="\" and Verb="properties" (requires TC>=5.51).

Specified by:
fsExecuteFile in interface WFXPluginInterface
Parameters:
mainWin - Parent window which can be used for showing a property sheet.
remoteName - Name of the file to be executed, with full path.
verb - This can be either "open", "properties", "chmod" or "quote" (case-insensitive). open: This is called when the user presses ENTER on a file. There are three ways to handle it: a) For internal commands like "Add new connection", execute it in the plugin and return FS_EXEC_OK or FS_EXEC_ERROR b) Let Total Commander download the file and execute it locally: return FS_EXEC_YOURSELF c) If the file is a (symbolic) link, set RemoteName to the location to which the link points (including the full plugin path), and return FS_EXEC_SYMLINK. Total Commander will then switch to that directory. You can also switch to a directory on the local harddisk! To do this, return a path starting either with a drive letter, or an UNC location (\\server\share). The maximum allowed length of such a path is MAX_PATH-1 = 259 characters! properties: Show a property sheet for the file (optional). Currently not handled by internal Wincmd functions if FS_EXEC_YOURSELF is returned, so the plugin needs to do it internally. chmod xxx: The xxx stands for the new Unix mode (attributes) to be applied to the file RemoteName. This verb is only used when returning Unix attributes through FsFindFirst/FsFindNext quote commandline: Execute the command line entered by the user in the directory RemoteName . This is called when the user enters a command in Wincmd's command line, and presses ENTER. This is optional, and allows to send plugin-specific commands. It's up to the plugin writer what to support here. If the user entered e.g. a cd directory command, you can return the new path in RemoteName (max 259 characters), and give FS_EXEC_SYMLINK as return value. Return FS_EXEC_OK to cause a refresh (re-read) of the active panel.
Returns:
Return FS_EXEC_YOURSELF if Total Commander should download the file and execute it locally, FS_EXEC_OK if the command was executed successfully in the plugin (or if the command isn't applicable and no further action is needed), FS_EXEC_ERROR if execution failed, or FS_EXEC_SYMLINK if this was a (symbolic) link or .lnk file pointing to a different directory.

fsSetAttr

public boolean fsSetAttr(java.lang.String remoteName,
                         int newAttr)
FsSetAttr is called to set the (Windows-Style) file attributes of a file/dir. FsExecuteFile is called for Unix-style attributes.

Specified by:
fsSetAttr in interface WFXPluginInterface
Parameters:
remoteName - Name of the file/directory whose attributes have to be set
newAttr - New file attributes. These are a commbination of the following standard file attributes:
  • Win32FindData.FILE_ATTRIBUTE_READONLY
  • Win32FindData.FILE_ATTRIBUTE_HIDDEN
  • Win32FindData.FILE_ATTRIBUTE_SYSTEM
  • Win32FindData.FILE_ATTRIBUTE_ARCHIVE
Returns:
Return TRUE if successful, FALSE if the function failed. Do NOT export this function if it isn't supported by your plugin! See also: fsExecuteFile();

fsSetTime

public boolean fsSetTime(java.lang.String remoteName,
                         FileTime creationTime,
                         FileTime lastAccessTime,
                         FileTime lastWriteTime)
FsSetTime is called to set the (Windows-Style) file times of a file/dir.

Specified by:
fsSetTime in interface WFXPluginInterface
Parameters:
remoteName - Name of the file/directory whose attributes have to be set
creationTime - Creation time of the file. May be NULL to leave it unchanged.
lastAccessTime - Last access time of the file. May be NULL to leave it unchanged.
lastWriteTime - Last write time of the file. May be NULL to leave it unchanged. If your file system only supports one time, use this parameter!
Returns:
Return TRUE if successful, FALSE if the function failed. Do NOT export this function if it isn't supported by your plugin!

fsDisconnect

public boolean fsDisconnect(java.lang.String disconnectRoot)
FsDisconnect is called when the user presses the Disconnect button in the FTP connections toolbar. This toolbar is only shown if MSGTYPE_CONNECT is passed to LogProc().
Important note:
To get calls to this function, the plugin MUST call LogProc with the parameter MSGTYPE_CONNECT. The parameter LogString MUST start with "CONNECT", followed by one whitespace and the root of the file system which has been connected. This file system root will be passed to FsDisconnect when the user presses the Disconnect button, so the plugin knows which connection to close.
Do NOT call LogProc with MSGTYPE_CONNECT if your plugin does not require connect/disconnect!
Examples:

Specified by:
fsDisconnect in interface WFXPluginInterface
Parameters:
disconnectRoot - This is the root dir which was passed to LogProc when connecting. It allows the plugin to have serveral open connections to different file systems (e.g. ftp servers). Should be either \ (for a single possible connection) or \Servername (e.g. when having multiple open connections).
Returns:
Return TRUE if the connection was closed (or never open), FALSE if it couldn't be closed.

fsStatusInfo

public void fsStatusInfo(java.lang.String remoteDir,
                         int infoStartEnd,
                         int infoOperation)
FsStatusInfo is called just as an information to the plugin that a certain operation starts or ends. It can be used to allocate/free buffers, and/or to flush data from a cache. There is no need to implement this function if the plugin doesn't require it.
Please note that future versions of the framework may send additional values!
Important note:
This function has been added for the convenience of plugin writers. All calls to plugin functions will be enclosed in a pair of FsStatusInfo() calls: At the start, FsStatusInfo(...,FS_STATUS_START,...) and when the operation is done FsStatusInfo(...,FS_STATUS_END,...). Multiple plugin calls can be between these two calls. For example, a download may contain multiple calls to FsGetFile(), and FsFindFirst(), FsFindNext(), FsFindClose() (for copying subdirs).

Specified by:
fsStatusInfo in interface WFXPluginInterface
Parameters:
remoteDir - RemoteDir This is the current source directory when the operation starts. May be used to find out which part of the file system is affected.
infoStartEnd - Information whether the operation starts or ends. Possible values:
  • FS_STATUS_START Operation starts (allocate buffers if needed)
  • FS_STATUS_END Operation has ended (free buffers, flush cache etc)
infoOperation - Information of which operaration starts/ends. Possible values:
  • FS_STATUS_OP_LIST Retrieve a directory listing
  • FS_STATUS_OP_GET_SINGLE Get a single file from the plugin file system
  • FS_STATUS_OP_GET_MULTI Get multiple files, may include subdirs
  • FS_STATUS_OP_PUT_SINGLE Put a single file to the plugin file system
  • FS_STATUS_OP_PUT_MULTI Put multiple files, may include subdirs
  • FS_STATUS_OP_RENMOV_SINGLE Rename/Move/Remote copy a single file
  • FS_STATUS_OP_RENMOV_MULTI RenMov multiple files, may include subdirs
  • FS_STATUS_OP_DELETE Delete multiple files, may include subdirs
  • FS_STATUS_OP_ATTRIB Change attributes/times, may include subdirs
  • FS_STATUS_OP_MKDIR Create a single directory
  • FS_STATUS_OP_EXEC Start a single remote item, or a command line
  • FS_STATUS_OP_CALCSIZE Calculating size of subdir (user pressed SPACE)
  • FS_STATUS_OP_SEARCH Searching for file names only (using FsFindFirst/Next/Close)
  • FS_STATUS_OP_SEARCH_TEXT Searching for file contents (using also FsGetFile() calls)
  • FS_STATUS_OP_SYNC_SEARCH Synchronize dirs searches subdirs for info
  • FS_STATUS_OP_SYNC_GET Synchronize: Downloading files from plugin
  • FS_STATUS_OP_SYNC_PUT Synchronize: Uploading files to plugin
  • FS_STATUS_OP_SYNC_DELETE Synchronize: Deleting files from plugin

fsExtractCustomIcon

public int fsExtractCustomIcon(java.lang.String remoteName,
                               int extractFlags,
                               java.lang.StringBuffer theIcon)
FsExtractCustomIcon is called when a file/directory is displayed in the file list. It can be used to specify a custom icon for that file/directory. This function is new in version 1.1. It requires Total Commander >=5.51, but is ignored by older versions.
Important note:
If you return FS_ICON_DELAYED, FsExtractCustomIcon() will be called again from a background thread at a later time. A critical section is used by the calling app to ensure that FsExtractCustomIcon() is never entered twice at the same time. This return value should be used for icons which take a while to extract, e.g. EXE icons. In the fsplugin sample plugin, the drive icons are returned immediately (because they are stored in the plugin itself), but the EXE icons are loaded with a delay. If the user turns off background loading of icons, the function will be called in the foreground with the FS_ICONFLAG_BACKGROUND flag.
How to define an icon
Each plugin can have an icon in Network Neighborhood to the left of its name. Wincmd will load the FIRST icon it can find (by index) in the plugin DLL, so just include a resource file with exactly one icon in it. The icon should contain at least one image with 16x16 pixels, although larger images will be scaled down for displaying in Wincmd. If no icon is contained within the plugin DLL, Wincmd will show the default folder icon. The icons in subfolders will be determined with the normal file association process in Windows.

Specified by:
fsExtractCustomIcon in interface WFXPluginInterface
Parameters:
remoteName - This is the full path to the file or directory whose icon is to be retrieved. When extracting an icon, you can return an icon name here - this ensures that the icon is only cached once in the calling program. The returned icon name must not be longer than MAX_PATH characters (including terminating 0!). The icon handle must still be returned in TheIcon!
extractFlags - Flags for the extract operation. A combination of the following:
  • FS_ICONFLAG_SMALL Requests the small 16x16 icon
  • FS_ICONFLAG_BACKGROUND The function is called from the background thread (see note below)
theIcon - Here you need to return the icon handle. Three forms are supported:
  1. theIcon.append ("253|shell32.dll"); // load icon from a resource (EXE/DLL), referenced by a resource id
  2. theIcon.append ("G:\\Totalcmd\\plugins\\java\\Drives\\test.ico"); // load icon from ico file (absolute path name)
  3. theIcon.append ("%CWD%\\test.ico"); // load icon from ico file in the plugin directory
Returns:
The function has to return one of the following values:
  • FS_ICON_USEDEFAULT No icon is returned. The calling app should show the default icon for this file type.
  • FS_ICON_EXTRACTED An icon was returned in TheIcon. The icon must NOT be freed by the calling app, e.g. because it was loaded with LoadIcon, or the DLL handles destruction of the icon.
  • FS_ICON_EXTRACTED_DESTROY An icon was returned in TheIcon. The icon MUST be destroyed by the calling app, e.g. because it was created with CreateIcon(), or extracted with ExtractIconEx().
  • FS_ICON_DELAYED This return value is only valid if FS_ICONFLAG_BACKGROUND was NOT set. It tells the calling app to show a default icon, and request the true icon in a background thread. See note below.

fsSetDefaultParams

public void fsSetDefaultParams(DefaultParam dps)
FsSetDefaultParams is called immediately after FsInit(). This function is new in version 1.3. It requires Total Commander >=5.51, but is ignored by older versions.
Important note:
This function is only called in Total Commander 5.51 and later. The plugin version will be >= 1.3.

Specified by:
fsSetDefaultParams in interface WFXPluginInterface
Parameters:
dps - This structure of type FsDefaultParamStruct currently contains the version number of the plugin interface, and the suggested location for the settings file (ini file). It is recommended to store any plugin-specific information either directly in that file, or in that directory under a different name. Make sure to use a unique header when storing data in this file, because it is shared by other file system plugins! If your plugin needs more than 1kbyte of data, you should use your own ini file because ini files are limited to 64k.

fsSetProgress

public final int fsSetProgress(int pluginNr,
                               java.lang.String sourceName,
                               java.lang.String targetName,
                               int percentDone)
ProgressProc is a callback function, which the plugin can call to show copy progress.
Important note:
You should call this function at least twice in the copy functions FsGetFile(), FsPutFile() and FsRenMovFile(), at the beginning and at the end. If you can't determine the progress, call it with 0% at the beginning and 100% at the end.
New in 1.3: During the FsFindFirst/FsFindNext/FsFindClose loop, the plugin may now call the ProgressProc to make a progess dialog appear. This is useful for very slow connections. Don't call ProgressProc for fast connections! The progress dialog will only be shown for normal dir changes, not for compound operations like get/put. The calls to ProgressProc will also be ignored during the first 5 seconds, so the user isn't bothered with a progress dialog on every dir change.

Parameters:
pluginNr - Here the plugin needs to pass the plugin number received through the FsInit() function.
sourceName - Name of the source file being copied. Depending on the direction of the operation (Get, Put), this may be a local file name of a name in the plugin file system.
targetName - Name to which the file is copied.
percentDone - Percentage of THIS file being copied. Total Commander automatically shows a second percent bar if possible when multiple files are copied.
Returns:
Total Commander returns 1 if the user wants to abort copying, and 0 if the operation can continue.

fsLog

public final void fsLog(int pluginNr,
                        int msgType,
                        java.lang.String logString)
LogProc is a callback function, which the plugin can call to show the FTP connections toolbar, and to pass log messages to it. Wincmd can show these messages in the log window (ftp toolbar) and write them to a log file. The address of this callback function is received through the FsInit() function when the plugin is loaded.
Important note:
Do NOT call LogProc with MSGTYPE_CONNECT if your plugin does not require connect/disconnect! If you call it with MsgType==MSGTYPE_CONNECT, the function FsDisconnect will be called (if defined) when the user presses the Disconnect button.
Examples:

Parameters:
pluginNr - Here the plugin needs to pass the plugin number received through the FsInit() function.
msgType - Can be one of the MSGTYPE_XXX flags:
  • MSGTYPE_CONNECT Connect to a file system requiring disconnect
  • MSGTYPE_DISCONNECT Disconnected successfully
  • MSGTYPE_DETAILS Not so important messages like directory changing
  • MSGTYPE_TRANSFERCOMPLETE A file transfer was completed successfully
  • MSGTYPE_CONNECTCOMPLETE unused
  • MSGTYPE_IMPORTANTERROR An important error has occured
  • MSGTYPE_OPERATIONCOMPLETE An operation other than a file transfer has completed
Total Commander supports logging to files. While one log file will store all messages, the other will only store important errors, connects, disconnects and complete operations/transfers, but not messages of type MSGTYPE_DETAILS.
logString - String which should be logged. When MsgType==MSGTYPE_CONNECT, the string MUST have a specific format: "CONNECT" followed by a single whitespace, then the root of the file system which was connected, without trailing backslash. Example: CONNECT \Filesystem
When MsgType==MSGTYPE_TRANSFERCOMPLETE, this parameter should contain both the source and target names, separated by an arrow " -> ", e.g. Download complete: \Filesystem\dir1\file1.txt -> c:\localdir\file1.txt

fsRequest

public final boolean fsRequest(int pluginNr,
                               int requestType,
                               java.lang.String customTitle,
                               java.lang.String customText,
                               java.lang.StringBuffer returnedText)
RequestProc is a callback function, which the plugin can call to request input from the user. When using one of the standard parameters, the request will be in the selected language. The address of this callback function is received through the FsInit() function when the plugin is loaded.
Important note:
Leave CustomText empty if you want to use the (translated) default strings!

Parameters:
pluginNr - Here the plugin needs to pass the plugin number received through the FsInit() function.
requestType - Can be one of the RT_XXX flags:
  • RT_OTHER The requested string is none of the default types
  • RT_USERNAME Ask for the user name, e.g. for a connection
  • RT_PASSWORD Ask for a password, e.g. for a connection (shows ***)
  • RT_ACCOUNT Ask for an account (needed for some FTP servers)
  • RT_USERNAMEFIREWALL User name for a firewall
  • RT_PASSWORDFIREWALL Password for a firewall
  • RT_TARGETDIR Asks for a local directory (with browse button)
  • RT_URL Asks for an URL
  • RT_MSGOK Shows MessageBox with OK button
  • RT_MSGYESNO Shows MessageBox with Yes/No buttons
  • RT_MSGOKCANCEL Shows MessageBox with OK/Cancel buttons
customTitle - Custom title for the dialog box. If NULL or empty, it will be "Total Commander"
customText - Override the text defined with RequestType. Set this to NULL or an empty string to use the default text. The default text will be translated to the language set in the calling program.
returnedText - This string contains the default text presented to the user, and will receive the (modified) text which the user enters. set ReturnedText="" to have no default text.
Returns:
Returns TRUE if the user clicked OK or Yes, FALSE otherwise.

fsContentGetDefaultSortOrder

public int fsContentGetDefaultSortOrder(int fieldIndex)
fsContentGetDefaultSortOrder is called when the user clicks on the sorting header above the columns.
Note:
You may implement this function if there are fields which are usually sorted in descending order, like the size field (largest file first) or the date/time fields (newest first). If the function isn't implemented, ascending will be the default.}

Specified by:
fsContentGetDefaultSortOrder in interface WFXPluginInterface
Parameters:
fieldIndex - The index of the field for which the sort order should be returned.
Returns:
Return 1 for ascending (a..z, 1..9), or -1 for descending (z..a, 9..0).

fsContentGetDefaultView

public boolean fsContentGetDefaultView(java.lang.String viewContents,
                                       java.lang.String viewHeaders,
                                       java.lang.String viewWidths,
                                       java.lang.String viewOptions,
                                       int maxlen)
FsContentGetDefaultView is called to get the default view to which Total Commander should switch when this file system plugin is entered.

Specified by:
fsContentGetDefaultView in interface WFXPluginInterface
Parameters:
viewContents - Return the default fields for this plugin here, e.g. [=.size.bkM2]\n[=fs.writetime]
Note that in C, you need to write \\n to return a backslash and 'n' instead of a newline character!
viewHeaders - Return the default headers shown in the sorting header bar, e.g. "Size\nDate/Time"
viewWidths - Return the default column widths shown in the sorting header bar, e.g. "148,23,-35,-35"
Negative values mean that the field is right-aligned. The first two widths are for name and extension
viewOptions - The two values, separated by a vertical line, mean: - auto-adjust-width, or -1 for no adjust - horizontal scrollbar flag
Returns:
Return true if you returned a default view, false if no default view should be shown.
Note:
It's best to create a custom columns view in Total Commander, save it, and then copy the definitions from the Wincmd.ini to your plugin. The values in ViewContents and ViewHeaders are separated by a backslash and lowercase 'n' character. Note that in C, you need to write \\n to return a backslash and 'n' instead of a newline character!

fsContentGetSupportedField

public int fsContentGetSupportedField(int fieldIndex,
                                      java.lang.StringBuffer fieldName,
                                      java.lang.StringBuffer units,
                                      int maxlen)
FsContentGetSupportedField is called to enumerate all supported fields. FieldIndex is increased by 1 starting from 0 until the plugin returns FT_NOMOREFIELDS. This function is identical to the function ContentGetSupportedField in Content plugins, except that FT_FULLTEXT isn't currently supported.

Specified by:
fsContentGetSupportedField in interface WFXPluginInterface
Parameters:
fieldIndex - The index of the field for which TC requests information. Starting with 0, the FieldIndex is increased until the plugin returns an error.
fieldName - Here the plugin has to return the name of the field with index FieldIndex. The field may not contain the following chars: . (dot) | (vertical line) : (colon). You may return a maximum of maxlen characters, including the trailing 0.
units - When a field supports several units like bytes, kbytes, Mbytes etc, they need to be specified here in the following form: bytes|kbytes|Mbytes . The separator is the vertical dash (Alt+0124). As field names, unit names may not contain a vertical dash, a dot, or a colon. You may return a maximum of maxlen characters, including the trailing 0. If the field type is FT_MULTIPLECHOICE, the plugin needs to return all possible values here.
Example: The field "File Type" of the built-in content plugin can have the values "File", "Folder" and "Reparse point". The available choices need to be returned in the following form: File|Folder|Reparse point . The same separator is used as for Units. You may return a maximum of maxlen characters, including the trailing 0. The field type FT_MULTIPLECHOICE does NOT support any units.
maxlen - The maximum number of characters, including the trailing 0, which may be returned in each of the fields.
Returns:
The function needs to return one of the following values:
  • FT_NOMOREFIELDS The FieldIndex is beyond the last available field.
  • FT_NUMERIC_32 A 32-bit signed number
  • FT_NUMERIC_64 A 64-bit signed number, e.g. for file sizes
  • FT_NUMERIC_FLOATING A double precision floating point number
  • FT_DATE A date value (year, month, day)
  • FT_TIME A time value (hour, minute, second). Date and time are in local time.
  • FT_BOOLEAN A true/false value
  • FT_MULTIPLECHOICE A value allowing a limited number of choices. Use the Units field to return all possible values.
  • FT_STRING A text string
  • FT_DATETIME A timestamp of type FILETIME, as returned e.g. by FindFirstFile(). It is a 64-bit value representing the number of 100-nanosecond intervals since January 1, 1601. The time MUST be relative to universal time (Greenwich mean time) as returned by the file system, not local time!

fsContentGetSupportedFieldFlags

public int fsContentGetSupportedFieldFlags(int fieldIndex)
fsContentGetSupportedFieldFlags is called to get various information about a plugin variable. It's first called with fieldIndex=-1 to find out whether the plugin supports any special flags at all, and then for each field separately.
Note:
Returning one of the CONTFLAGS_SUBST* flags instructs Total Commander to replace (substitute) the returned variable by the indicated default internal value if this field is displayed outside of the context of the plugin. It may also be used to determine default sort orders.

Specified by:
fsContentGetSupportedFieldFlags in interface WFXPluginInterface
Parameters:
fieldIndex - The index of the field for which the sort order should be returned.
  • -1: Return a combination (or) of all supported flags, e.g. contflags_edit | contflags_substmask
  • >=0: Return the field-specific flags
Returns:
The function needs to return a combination of the following flags:
  • CONTFLAGS_EDIT The plugin allows to edit (modify) this field via Files - Change attributes. This should only be returned for fields where it makes sense, e.g. a file date.
    Only ONE of the following flags: (See description and example under "Note").
  • CONTFLAGS_SUBSTSIZE use the file size
  • CONTFLAGS_SUBSTDATETIME use the file date+time (ft_datetime)
  • CONTFLAGS_SUBSTDATE use the file date (fd_date)
  • CONTFLAGS_SUBSTTIME use the file time (fd_time)
  • CONTFLAGS_SUBSTATTRIBUTES use the file attributes (numeric)
  • CONTFLAGS_SUBSTATTRIBUTESTR use the file attribute string in form -a--
  • CONTFLAGS_SUBSTMASK A combination of all above substituion flags. Should be returned for index -1 if the content plugin contains ANY of the substituted fields.

fsContentGetValue

public int fsContentGetValue(java.lang.String fileName,
                             int fieldIndex,
                             int unitIndex,
                             FieldValue fieldValue,
                             int maxlen,
                             int flags)
fsContentGetValue is called to retrieve the value of a specific field for a given file, e.g. the date field of a file.
Remarks:
Total Commander now accepts that fsContentGetValue returns a different data type than fsContentGetSupportedField for the same field, e.g. a string "no value" instead of a numeric field. Note that older versions of Total Commander crashed in the search function in this case, so if you want to do this, you MUST check that the plugin version is reported as >=1.3 (hi=1, low>=3 or hi>=2).

FT_NUMERIC_FLOATING (New with TC 6.52, plugin interface version >=1.4): You can now put a 0-terminated string immediately behind the 64bit floating point variable, which will then be shown instead in file lists. This is useful if the conversion precision used by TC isn't appropriate for your variables. The numeric variable will still be used for sorting and searching. If the string is empty, TC will ignore it (it is set to 0 before calling this function, so the function will remain backwards-compatible). Example: The numeric value is 0.000002. You can return this value as a 64-bit variable, and the string you find most appropriate, e.g. "2*10^-6" or "0.000002".

About caching the data: Total Commander will not call a mix fsContentGetValue for different files, it will only call it for the next file when the previous file can be closed. Therefore a single cache per running Total Commander would be sufficient. However, there may be other calls to fsContentGetValue with requests to other fields in the background, e.g. for displaying result lists. There may also be multiple instances of Total Commander at the same time, so if you use a TEMP file for storing the cached data, make sure to give it a unique name (e.g. via GetTempFileName).

Specified by:
fsContentGetValue in interface WFXPluginInterface
Parameters:
fileName - The name of the file for which the plugin needs to return the field data.
fieldIndex - The index of the field for which the content has to be returned. This is the same index as the FieldIndex value in fsContentGetSupportedField.
unitIndex - The index of the unit used.
Example:
If the plugin returned the following unit string in fsContentGetSupportedField: bytes|kbytes|Mbytes
Then a UnitIndex of 0 would mean bytes, 1 means kbytes and 2 means MBytes If no unit string was returned, UnitIndex is 0.
For FT_FULLTEXT, UnitIndex contains the offset of the data to be read.
fieldValue - Here the plugin needs to return the requested data. The data format depends on the field type:
  • FT_NUMERIC_32: FieldValue points to a 32-bit signed integer variable.
  • FT_NUMERIC_64: FieldValue points to a 64-bit signed integer variable.
  • FT_NUMERIC_FLOATING: FieldValue points to a 64-bit floating point variable (ISO standard double precision)
    See remark below about additional string field!
  • FT_DATE: FieldValue points to a structure containing year,month,day as 2 byte values.
  • FT_TIME: FieldValue points to a structure containing hour,minute,second as 2 byte values.
  • FT_BOOLEAN: FieldValue points to a 32-bit number. 0 neans false, anything else means true.
  • FT_STRING or ft_multiplechoice: FieldValue is a pointer to a 0-terminated string.
  • FT_FULLTEXT: Read maxlen bytes of interpreted data starting at offset UnitIndex. The data must be a 0 terminated string.
  • FT_DATETIME: A timestamp of type FILETIME, as returned e.g. by FindFirstFile(). It is a 64-bit value representing the number of 100-nanosecond intervals since January 1, 1601. The time MUST be relative to universal time (Greenwich mean time) as returned by the file system, not local time!
  • FT_DELAYED, FT_ONDEMAND: You may return a zero-terminated string as in FT_STRING, which will be shown until the actual value has been extracted. Requires plugin version>=1.4.
maxlen - The maximum number of bytes fitting into the FieldValue variable.
flags - Currently only one flag is defined:
  • CONTENT_DELAYIFSLOW: If this flag is set, the plugin should return FT_DELAYED for fields which take a long time to extract, like file version information. Total Commander will then call the function again in a background thread without the CONTENT_DELAYIFSLOW flag. This means that your plugin must be implemented thread-safe if you plan to return FT_DELAYED. The plugin may also reutrn FT_ONDEMAND if CONTENT_DELAYIFSLOW is set. In this case, the field will only be retrieved when the user presses <SPACEBAR>. This is only recommended for fields which take a VERY long time, e.g. directory content size. You should offer the same field twice in this case, once as delayed, and once as on demand. The field will be retrieved in the background thread also in this case.
Returns:
Return the field type in case of success, or one of the following error values otherwise:
  • FT_NOSUCHFIELD - The given FieldIndex is invalid
  • FT_FILEERROR - Error accessing the specified file FileName
  • FT_FIELDEMPTY - The file does not contain the specified field
  • FT_DELAYED - The extraction of the field would take a long time, so Total Commander should request it again in a background thread. This error may only be returned if the flag CONTENT_DELAYIFSLOW was set, and if the plugin is thread-safe.
  • FT_ONDEMAND - The extraction of the field would take a very long time, so it should only be retrieved when the user presses the space bar. This error may only be returned if the flag CONTENT_DELAYIFSLOW was set, and if the plugin is thread-safe.

fsContentPluginUnloading

public void fsContentPluginUnloading()
fsContentPluginUnloading is called just before the plugin is unloaded, e.g. to close buffers, abort operations etc.
Note:
This function was added by request from a user who needs to unload GDI+. It seems that GDI+ has a bug which makes it crash when unloading it in the DLL unload function, therefore a separate unload function is needed.

Specified by:
fsContentPluginUnloading in interface WFXPluginInterface

fsContentSetValue

public int fsContentSetValue(java.lang.String fileName,
                             int fieldIndex,
                             int unitIndex,
                             int fieldType,
                             FieldValue fieldValue,
                             int flags)
fsContentSetValue is called to set the value of a specific field for a given file, e.g. to change the date field of a file.

Specified by:
fsContentSetValue in interface WFXPluginInterface
Parameters:
fileName - The name of the file for which the plugin needs to change the field data. This is set to NULL to indicate the end of change attributes (see remarks below).
fieldIndex - The index of the field for which the content has to be returned. This is the same index as the FieldIndex value in fsContentGetSupportedField. This is set to -1 to signal the end of change attributes (see remarks below).
unitIndex - The index of the unit used.
Example: If the plugin returned the following unit string in fsContentGetSupportedField: bytes|kbytes|Mbytes Then a unitIndex of 0 would mean bytes, 1 means kbytes and 2 means MBytes If no unit string was returned, UnitIndex is 0. FT_FULLTEXT is currently unsupported.
fieldType - The type of data passed to the plugin in FieldValue. This is the same type as returned by the plugin via fsContentGetSupportedField. If the plugin returned a different type via fsContentGetValue, the the FieldType _may_ be of that type too.
fieldValue - Here the plugin receives the data to be changed. The data format depends on the field type:
  • FT_NUMERIC_32: FieldValue points to a 32-bit signed integer variable.
  • FT_NUMERIC_64: FieldValue points to a 64-bit signed integer variable.
  • FT_NUMERIC_FLOATING: FieldValue points to a 64-bit floating point variable (ISO standard double precision)
  • FT_DATE: FieldValue points to a structure containing year,month,day as 2 byte values.
  • FT_TIME: FieldValue points to a structure containing hour,minute,second as 2 byte values.
  • FT_BOOLEAN: FieldValue points to a 32-bit number. 0 neans false, anything else means true.
  • FT_STRING or ft_multiplechoice: FieldValue is a pointer to a 0-terminated string.
  • FT_FULLTEXT: Currently unsupported.
  • FT_DATETIME: A timestamp of type FILETIME, as returned e.g. by FindFirstFile(). It is a 64-bit value representing the number of 100-nanosecond intervals since January 1, 1601. The time MUST be relative to universal time (Greenwich mean time) as returned by the file system, not local time!
  • FT_DELAYED, FT_ONDEMAND: You may return a zero-terminated string as in ft_string, which will be shown until the actual value has been extracted. Requires plugin version>=1.4.
flags - Currently the following flags are defined:
  • SETFLAGS_FIRST_ATTRIBUTE: This is the first attribute to be set for this file via this plugin. May be used for optimization.
  • SETFLAGS_LAST_ATTRIBUTE: This is the last attribute to be set for this file via this plugin.
  • SETFLAGS_ONLY_DATE: For field type FT_DATETIME only: User has only entered a date, don't change the time
Returns:
  • FT_SETSUCCESS Change was successful
  • FT_FILEERROR Error accessing the specified file FileName, or cannot set the given value
  • FT_NOSUCHFIELD The given field index was invalid

Note:
About caching the data: Total Commander will not call a mix of FsContentSetValue for different files, it will only call it for the next file when the previous file can be closed. Therefore a single cache per running Total Commander should be sufficient.
About the flags: If the flags setflags_first_attribute and setflags_last_attribute are both set, then this is the only attribute of this plugin which is changed for this file.
FsSetAttr needs to be implemented too, otherwise the change attributes dialog (which is also used to change custom plugin attributes) cannot be used for this function.
FileName is set to NULL and FieldIndex to -1 to signal to the plugin that the change attributes operation has ended. This can be used to flush unsaved data to disk, e.g. when setting comments for multiple files.

fsContentStopGetValue

public void fsContentStopGetValue(java.lang.String fileName)
fsContentStopGetValue is called to tell a plugin that a directory change has occurred, and the plugin should stop loading a value.
Note:
This function only needs to be implemented when handling very slow fields, e.g. the calculation of the total size of all files in a directory. It will be called only while a call to fsContentGetValue is active in a background thread.
A plugin could handle this mechanism like this:
  1. When fsContentGetValue is called, set a variable GetAborted to false.
  2. When fsContentStopGetValue is called, set GetAborted to true.
  3. Check GetAborted during the lengthy operation, and if it becomes true, return FT_FIELDEMPTY.

Specified by:
fsContentStopGetValue in interface WFXPluginInterface
Parameters:
fileName - The name of the file for which fsContentGetValue is currently being called.

fsGetLocalName

public boolean fsGetLocalName(java.lang.String remoteName,
                              int maxlen)
FsGetLocalName must not be implemented unless your plugin is a temporary file panel plugin! Temporary file panels just hold links to files on the local file system.

Specified by:
fsGetLocalName in interface WFXPluginInterface
Parameters:
remoteName - In: Full path to the file name in the plugin namespace, e.g. \somedir\file.ext
Out: Return the path of the file on the local file system, e.g. c:\windows\file.ext
maxlen - Maximum number of characters you can return in RemoteName, including the final 0.
Returns:
The function has to return one of the following values:
  • true The name points to a local file, which is returned in RemoteName.
  • false The name does not point to a local file, RemoteName is left unchanged.
Important note:
If your plugin is a temporary panel plugin, the following functions MUST be thread-safe (can be called from background transfer manager):
  • FsGetLocalName
  • FsLinksToLocalFiles
  • FsFindFirst
  • FsFindNext
  • FsFindClose
This means that when uploading subdirectories from your plugin to FTP in the background, Total Commander will call these functions in a background thread. If the user continues to work in the foreground, calls to FsFindFirst and FsFindNext may be occuring at the same time! Therefore it's very important to use the search handle to keep temporary information about the search. FsStatusInfo will NOT be called from the background thread!

fsGetPreviewBitmap

public int fsGetPreviewBitmap(java.lang.String remoteName,
                              int width,
                              int height,
                              java.lang.StringBuffer filename)
FsGetPreviewBitmap is called when a file/directory is displayed in thumbnail view. It can be used to return a custom bitmap for that file/directory. This function is new in version 1.4. It requires Total Commander >=7.0, but is ignored by older versions.

Specified by:
fsGetPreviewBitmap in interface WFXPluginInterface
Parameters:
remoteName - This is the full path to the file or directory whose bitmap is to be retrieved. When extracting a bitmap, you can return a bitmap name here - this ensures that the icon is only cached once in the calling program. The returned bitmap name must not be longer than MAX_PATH characters (including terminating 0!). The bitmap handle must still be returned in ReturnedBitmap!
width - The maximum width of the preview bitmap. If your image is smaller, or has a different side ratio, then you need to return an image which is smaller than these dimensions! See notes below!
height - The maximum height of the preview bitmap. If your image is smaller, or has a different side ratio, then you need to return an image which is smaller than these dimensions! See notes below!
filename - Here you need to return the bitmap handle. Three forms are supported:
  1. filename.append ("253|shell32.dll"); // load bitmap from a resource (EXE/DLL), referenced by a resource id
  2. filename.append ("G:\\Totalcmd\\plugins\\java\\Drives\\test.bmp"); // load bitmap from bmp file (absolute path name)
  3. filename.append ("%CWD%\\test.bmp"); // load bitmap from bmp file in the plugin directory
Returns:
The function has to return one of the following values:
  • FS_BITMAP_NONE There is no preview bitmap.
  • FS_BITMAP_EXTRACTED The image was extracted and is returned in ReturnedBitmap
  • FS_BITMAP_EXTRACT_YOURSELF Tells the caller to extract the image by itself. The full local path to the file needs to be returned in RemoteName. The returned bitmap name must not be longer than MAX_PATH.
  • FS_BITMAP_EXTRACT_YOURSELF_ANDDELETE Tells the caller to extract the image by itself, and then delete the temporary image file. The full local path to the temporary image file needs to be returned in RemoteName. The returned bitmap name must not be longer than MAX_PATH. In this case, the plugin downloads the file to TEMP and then asks TC to extract the image.
  • FS_BITMAP_CACHE This value must be ADDED to one of the above values if the caller should cache the image. Do NOT add this image if you will cache the image yourself!
Important notes:
  1. This function is only called in Total Commander 7.0 and later. The reported plugin version will be >= 1.4.
  2. The bitmap handle goes into possession of Total Commander, which will delete it after using it. The plugin must not delete the bitmap handle!
  3. Make sure you scale your image correctly to the desired maximum width+height! Do not fill the rest of the bitmap - instead, create a bitmap which is SMALLER than requested! This way, Total Commander can center your image and fill the rest with the default background color.

fsLinksToLocalFiles

public boolean fsLinksToLocalFiles()
FsLinksToLocalFiles must not be implemented unless your plugin is a temporary file panel plugin! Temporary file panels just hold links to files on the local file system.

Specified by:
fsLinksToLocalFiles in interface WFXPluginInterface
Returns:
The function has to return one of the following values:
  • true The plugin is a temporary panel-style plugin
  • false The plugin is a normal file system plugin
Important note:
If your plugin is a temporary panel plugin, the following functions MUST be thread-safe (can be called from background transfer manager):
  • FsLinksToLocalFiles
  • FsFindFirst
  • FsFindNext
  • FsFindClose
  • FsGetLocalName
This means that when uploading subdirectories from your plugin to FTP in the background, Total Commander will call these functions in a background thread. If the user continues to work in the foreground, calls to FsFindFirst and FsFindNext may be occuring at the same time! Therefore it's very important to use the search handle to keep temporary information about the search.
FsStatusInfo will NOT be called from the background thread!