added view of html as markdown
[far2l.git] / inside / src / PluginImpl.cpp
blob7032808b5b263cae2657fe2b51f56efed234a25c
1 #include "Globals.h"
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;
11 return il.Add(&tmp);
14 PluginImpl::PluginImpl(const char *name)
15 : _name(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);
27 bool out = true;
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;
42 if (!il.Add(&tmp))
43 out = false;
46 out = out && OnGetFindData(il, OpMode);
48 if (!out) {
49 il.Free(il.Items(), il.Count() );
50 *pPanelItem = nullptr;
51 *pItemsNumber = 0;
52 return FALSE;
55 *pPanelItem = il.Items();
56 *pItemsNumber = il.Count();
57 return TRUE;
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)
73 return FALSE;
74 _dir.resize(n);
76 } else if (Dir[0] != '/') {
77 _dir+='/';
78 _dir+= Dir;
80 } else
81 _dir = Dir + 1; // skip root slash
83 return TRUE;
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");
101 return FALSE;
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)
108 return FALSE;
110 BOOL out = TRUE;
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] != '/') {
115 data_path+= '/';
117 data_path+= PanelItem[i].FindData.cFileName;
119 uint64_t len = PanelItem[i].FindData.nFileSizeHigh;
120 len<<= 32;
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);
128 return out;
132 int PluginImpl::PutFiles(struct PluginPanelItem *PanelItem, int ItemsNumber, int Move, int OpMode)
134 if (ItemsNumber == 0 || Move)
135 return FALSE;
137 BOOL out = TRUE;
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] != '/') {
143 data_path = cd;
144 data_path+= '/';
145 data_path+= PanelItem[i].FindData.cFileName;
146 } else
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);
153 if (!rv)
154 out = FALSE;
157 return out;
160 int PluginImpl::DeleteFiles(struct PluginPanelItem *PanelItem, int ItemsNumber, int OpMode)
162 if (ItemsNumber == 0 )
163 return FALSE;
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);
171 return TRUE;
174 int PluginImpl::ProcessKey(int Key, unsigned int ControlState)
176 fprintf(stderr, "Inside::ProcessKey\n");
177 return FALSE;