2 #include "PluginImpl.h"
5 bool PluginImpl::AddUnsized(FP_SizeItemList
&il
, const char *name
, DWORD attrs
)
7 PluginPanelItem tmp
= {};
8 strncpy(tmp
.FindData
.cFileName
, name
, sizeof(tmp
.FindData
.cFileName
) - 1 );
9 tmp
.FindData
.dwFileAttributes
= attrs
;
10 tmp
.Description
= tmp
.FindData
.cFileName
;
14 PluginImpl::PluginImpl(const char *name
)
19 PluginImpl::~PluginImpl()
23 int PluginImpl::GetFindData(PluginPanelItem
**pPanelItem
, int *pItemsNumber
, int OpMode
)
25 fprintf(stderr
, "Inside::GetFindData %s@%s\n", _dir
.c_str(), _name
.c_str());
26 FP_SizeItemList
il(FALSE
);
29 if(!IS_SILENT(OpMode
))
31 PluginPanelItem tmp
= {};
32 strcpy(tmp
.FindData
.cFileName
, "..");
33 tmp
.FindData
.dwFileAttributes
= FILE_ATTRIBUTE_DIRECTORY
;
35 if(!IS_SILENT(OpMode
))
37 tmp
.Description
= tmp
.FindData
.cFileName
;
38 //LPSTR Data[3] = {tmp.FindData.cFileName, tmp.FindData.cFileName, tmp.FindData.cFileName};
39 //tmp.CustomColumnNumber = 3;//ARRAYSIZE(Data);
40 //tmp.CustomColumnData = Data;
46 out
= out
&& OnGetFindData(il
, OpMode
);
49 il
.Free(il
.Items(), il
.Count() );
50 *pPanelItem
= nullptr;
55 *pPanelItem
= il
.Items();
56 *pItemsNumber
= il
.Count();
60 void PluginImpl::FreeFindData(PluginPanelItem
*PanelItem
, int ItemsNumber
)
62 FP_SizeItemList::Free(PanelItem
, ItemsNumber
);
65 int PluginImpl::SetDirectory(const char *Dir
,int OpMode
)
67 fprintf(stderr
, "Inside::SetDirectory('%s', %d)\n", Dir
, OpMode
);
68 if (strcmp(Dir
, ".") == 0) {
70 } else if (strcmp(Dir
, "..") == 0) {
71 size_t n
= _dir
.rfind('/');
72 if (n
== std::string::npos
)
76 } else if (Dir
[0] != '/') {
81 _dir
= Dir
+ 1; // skip root slash
86 void PluginImpl::GetOpenPluginInfo(struct OpenPluginInfo
*Info
)
88 fprintf(stderr
, "Inside::GetOpenPluginInfo: '%s' '%s'\n", _dir
.c_str(), _name
.c_str());
89 snprintf(_panel_title
, ARRAYSIZE(_panel_title
),
90 " Inside: %s@%s ", _dir
.c_str(), _name
.c_str());
92 Info
->Flags
= OPIF_SHOWPRESERVECASE
| OPIF_USEHIGHLIGHTING
;
93 Info
->HostFile
= _name
.c_str();
94 Info
->CurDir
= _dir
.c_str();
95 Info
->PanelTitle
= _panel_title
;
98 int PluginImpl::ProcessHostFile(struct PluginPanelItem
*PanelItem
, int ItemsNumber
, int OpMode
)
100 fprintf(stderr
, "Inside::ProcessHostFile\n");
104 int PluginImpl::GetFiles(struct PluginPanelItem
*PanelItem
, int ItemsNumber
, int Move
, char *DestPath
, int OpMode
)
106 fprintf(stderr
, "Inside::GetFiles: _dir='%s' DestPath='%s'\n", _dir
.c_str(), DestPath
);
107 if (ItemsNumber
== 0 || Move
)
111 std::string data_path
;
112 for (int i
= 0; i
< ItemsNumber
; ++i
) {
113 data_path
= DestPath
;
114 if (!data_path
.empty() && data_path
[data_path
.size() - 1] != '/') {
117 data_path
+= PanelItem
[i
].FindData
.cFileName
;
119 uint64_t len
= PanelItem
[i
].FindData
.nFileSizeHigh
;
121 len
|= PanelItem
[i
].FindData
.nFileSizeLow
;
123 bool rv
= OnGetFile(PanelItem
[i
].FindData
.cFileName
, data_path
.c_str(), len
);
124 fprintf(stderr
, "Inside::GetFiles[%i]: %s '%s'\n",
125 i
, rv
? "OK" : "ERROR", PanelItem
[i
].FindData
.cFileName
);
132 int PluginImpl::PutFiles(struct PluginPanelItem
*PanelItem
, int ItemsNumber
, int Move
, int OpMode
)
134 if (ItemsNumber
== 0 || Move
)
138 char cd
[0x1000] = {};
139 sdc_getcwd(cd
, sizeof(cd
) - 1);
140 std::string data_path
;
141 for (int i
= 0; i
< ItemsNumber
; ++i
) {
142 if (PanelItem
[i
].FindData
.cFileName
[0] != '/') {
145 data_path
+= PanelItem
[i
].FindData
.cFileName
;
147 data_path
= PanelItem
[i
].FindData
.cFileName
;
149 bool rv
= OnPutFile(PanelItem
[i
].FindData
.cFileName
, data_path
.c_str());
150 fprintf(stderr
, "Inside::PutFiles[%i]: %s '%s'\n",
151 i
, rv
? "OK" : "ERROR", PanelItem
[i
].FindData
.cFileName
);
160 int PluginImpl::DeleteFiles(struct PluginPanelItem
*PanelItem
, int ItemsNumber
, int OpMode
)
162 if (ItemsNumber
== 0 )
165 for (int i
= 0; i
< ItemsNumber
; ++i
) {
166 bool rv
= OnDeleteFile(PanelItem
[i
].FindData
.cFileName
);
167 fprintf(stderr
, "Inside::DeleteFiles[%i]: %s '%s'\n",
168 i
, rv
? "OK" : "ERROR", PanelItem
[i
].FindData
.cFileName
);
174 int PluginImpl::ProcessKey(int Key
, unsigned int ControlState
)
176 fprintf(stderr
, "Inside::ProcessKey\n");