This source file includes following definitions.
- SetFromFtp
- Path
- PrepareKeysMenu
- RefreshNodeList
- MessageReceived
- NavEnter
- Bookmark_Edit
- LoadBookmarks
- Bookmark_Save
- Act_Connect
- Action_SwitchShowIcons
- Ftp_LoadIcons
- Ftp_ListLoaded
- Act_ChangeDir_Start
- Act_ReloadDir_Start
- ActionMakeDir_Run
- ActionDelete_Run
- Bookmark_Delete
- Bookmark_Delete_Yes
- Bookmark_Create
- Ftp_Disconnect
- PrepareTopMenuItem
- ActionCopyFrom_Run
- ActionCopyTo_Run
1 #include "Directory.h"
2 #include "Mime.h"
3
4 #include "BF_Dict.h"
5 #include "BF_Roster.h"
6 #include "BF_GUI_KeysMenu.h"
7 #include "BF_GUI_WinMain.h"
8
9 #include "BF_GUI_FtpPanel.h"
10 #include "BF_GUI_FtpPanel_Tasks.h"
11
12
13
14 #define SETTINGS_FTP_DIR (const char*)"/boot/home/config/settings/BeFAR/ftp"
15
16
17
18 void
19 BF_FtpPath::SetFromFtp(const char *pc_Path)
20 {
21 BL_String s(pc_Path);
22 int i1 = s.FindFirst("\"");
23 BL_String s1(s);
24 if(i1>=0) s.CopyInto(s1,0,i1);
25
26 BF_Path::SetTo(s1.String());
27 }
28
29
30
31 BF_GUI_FtpPanel_Bookmark::BF_GUI_FtpPanel_Bookmark()
32 {
33 iPort = 21;
34 bPassive = true;
35
36 bAscii_Mode = false;
37 }
38
39 void
40 BF_GUI_FtpPanel_Bookmark::operator = (BF_GUI_FtpPanel_Bookmark & o_Source)
41 {
42 sHost = o_Source.sHost;
43 sUserName = o_Source.sUserName;
44 sUserPassword = o_Source.sUserPassword;
45 sProxy = o_Source.sProxy;
46 sFolder = o_Source.sFolder;
47 iPort = o_Source.iPort;
48 bPassive = o_Source.bPassive;
49 bAscii_Mode = o_Source.bAscii_Mode;
50 }
51
52
53 BF_GUI_FtpPanel_NodeBookmark::BF_GUI_FtpPanel_NodeBookmark()
54 {
55 poBookmark = NULL;
56 }
57
58 BF_GUI_FtpPanel_NodeBookmark::~BF_GUI_FtpPanel_NodeBookmark()
59 {
60 if(poBookmark) DELETE(poBookmark);
61 }
62
63
64
65 BF_GUI_FtpPanel::BF_GUI_FtpPanel(const BRect & o_Rect,bool b_WinPos_OnLeft)
66 :BF_GUI_NodePanel(o_Rect,b_WinPos_OnLeft)
67 {
68
69
70
71
72 iVisMode = BF_FTPPANEL_VISMODE_BOOKMARKS;
73 iState = BF_FTPPANEL_STATE_DEFAULT;
74 poClient = new FtpClient(this);
75 uConnectThread = 0;
76 poBookmark = NULL;
77 oBookmarkDir.SetTo(SETTINGS_FTP_DIR,NULL);
78 {
79 poFolderSIcon = BL_Load_SIconFromMIME(BL_MIME_FOLDER);
80 poBookmarkSIcon = BL_Load_SIconFromMIME(BL_MIME_BOOKMARK);
81 poDocSIcon = BL_Load_SIconFromMIME(BL_MIME_FILE);
82 }
83
84 Calc();
85 RefreshNodeList();
86
87 }
88
89 const BL_String
90 BF_GUI_FtpPanel::Path() const
91 {
92 BL_String sResult("//ftp:");
93 return sResult;
94 }
95
96 BF_GUI_FtpPanel::~BF_GUI_FtpPanel()
97 {
98 if(poClient) DELETE(poClient);
99 if(poFolderSIcon) DELETE(poFolderSIcon);
100 if(poBookmarkSIcon) DELETE(poBookmarkSIcon);
101 if(poDocSIcon) DELETE(poDocSIcon);
102 }
103
104 void
105 BF_GUI_FtpPanel::PrepareKeysMenu()
106 {
107 BF_GUI_NodePanel::PrepareKeysMenu();
108 uint32 iKeysModifiers = modifiers();
109
110 if(iKeysModifiers & B_RIGHT_OPTION_KEY){
111 }else{
112 switch(iVisMode){
113 case BF_FTPPANEL_VISMODE_BOOKMARKS:{
114 if(iState==BF_FTPPANEL_STATE_DEFAULT){
115 poSysKeysMenu->SetText(4,BF_DictAt(BF_DICT_EDIT));
116 poSysKeysMenu->SetMessage(4,new BMessage(BF_FTP_MSG_EDIT_BOOKMARK),this);
117 poSysKeysMenu->SetText(7,BF_DictAt(BF_DICT_CREATE));
118 poSysKeysMenu->SetMessage(7,new BMessage(BF_FTP_MSG_BOOKMARK_CREATE),this);
119 poSysKeysMenu->SetText(8,BF_DictAt(BF_DICT_DELETE));
120 poSysKeysMenu->SetMessage(8,new BMessage(BF_FTP_MSG_BOOKMARK_DELETE),this);
121 }
122 break;}
123 case BF_FTPPANEL_VISMODE_FTPLIST:{
124 if(iState==BF_FTPPANEL_STATE_CONNECTED){
125 poSysKeysMenu->SetText(3,BF_DictAt(BF_DICT_FTP_DISCONNECT));
126 poSysKeysMenu->SetMessage(3,new BMessage(BF_FTP_MSG_DISCONNECT),this);
127 poSysKeysMenu->SetText(5,BF_DictAt(BF_DICT_COPY));
128 poSysKeysMenu->SetMessage(5,new BMessage(BF_MSG_NODEPANEL_COPY_START),this);
129 poSysKeysMenu->SetText(7,BF_DictAt(BF_DICT_FTP_MAKEDIR));
130 poSysKeysMenu->SetMessage(7,new BMessage(BF_MSG_NODEPANEL_MAKEDIR_START),this);
131 poSysKeysMenu->SetText(8,BF_DictAt(BF_DICT_DELETE));
132 poSysKeysMenu->SetMessage(8,new BMessage(BF_MSG_NODEPANEL_DELETE_START),this);
133 }
134 break;}
135 };
136 }
137 }
138
139
140 void
141 BF_GUI_FtpPanel::RefreshNodeList()
142 {
143 switch(iVisMode){
144 case BF_FTPPANEL_VISMODE_BOOKMARKS:{
145 LoadBookmarks();
146 break;}
147 }
148 }
149
150
151 #define BF_GUI_KEY_SYS B_CONTROL_KEY | B_OPTION_KEY | B_COMMAND_KEY
152
153 void
154 BF_GUI_FtpPanel::MessageReceived(BMessage* po_Message)
155 {
156 switch(po_Message->what){
157
158 case BF_FTP_MSG_DIR_RELOAD_START:
159 Act_ReloadDir_Start();
160 break;
161 case BF_FTP_MSG_DIR_CHANGED:{
162 SetHeader(BF_DictAt(BF_DICT_FTP_CONNECTED),poFolderSIcon);
163 uConnectThread = 0;
164 iState = BF_FTPPANEL_STATE_CONNECTED;
165 BL_String s;
166 s = po_Message->FindString("list");
167 Ftp_ListLoaded(s);
168
169 break;}
170 case BF_FTP_MSG_DIR_RELOAD:{
171 SetHeader(BF_DictAt(BF_DICT_FTP_CONNECTED),poFolderSIcon);
172 uConnectThread = 0;
173 iState = BF_FTPPANEL_STATE_CONNECTED;
174 BL_String s;
175 s = po_Message->FindString("list");
176 Ftp_ListLoaded(s);
177 break;}
178
179 case BF_FTP_MSG_CONNECTED:{
180 oPath.SetFromFtp( po_Message->FindString("path") );
181 uConnectThread = 0;
182 iState = BF_FTPPANEL_STATE_CONNECTED;
183 BL_String s;
184 s = po_Message->FindString("list");
185 Ftp_ListLoaded(s);
186
187 break;}
188
189 case BF_FTP_MSG_MESSAGE:{
190 char *pcMessage=NULL;
191 pcMessage = (char*)po_Message->FindString("message");
192 BF_Dialog_Alert_Sep(BF_DictAt(BF_DICT_FTP_ERROR),pcMessage,NULL,this);
193 break;}
194
195 case BF_FTP_MSG_BOOKMARK_CREATE:{
196 Bookmark_Create();
197 break;}
198 case BF_FTP_MSG_BOOKMARK_DELETE:{
199 Bookmark_Delete();
200 break;}
201 case BF_FTP_MSG_BOOKMARK_DELETE_ANSWER:{
202 int32 iResult=-1;
203 ASSERT(B_OK==po_Message->FindInt32("menu",&iResult));
204 if(iResult==0) Bookmark_Delete_Yes();
205
206 BF_GUI_Func_PanelsEnable(true);
207 MakeFocus();
208
209 break;}
210 case BF_FTP_MSG_EDIT_BOOKMARK:{
211 Bookmark_Edit();
212 break;}
213
214 case BF_FTP_MSG_BOOKMARK_EDIT:{
215
216 BF_GUI_Func_PanelsEnable(true);
217 MakeFocus();
218
219 bool bOk;
220 ASSERT(B_OK==po_Message->FindBool(BF_GUI_DIALOG_MESSAGE_DATA_OK,&bOk));
221 if(bOk && po_Message->FindInt32("menu")==0){
222
223 BF_GUI_FtpPanel_NodeBookmark *poNode = (BF_GUI_FtpPanel_NodeBookmark*)Nodes_Focus();
224 if(!poNode) return;
225 char *pcValue;
226 BL_String sOldTitle(poNode->poBookmark->sTitle.String());
227
228 ASSERT(poNode->poBookmark);
229
230 ASSERT(B_OK==po_Message->FindString("title",(const char**)&pcValue) && pcValue);
231 poNode->poBookmark->sTitle = pcValue;
232 poNode->sName = pcValue;
233
234 ASSERT(B_OK==po_Message->FindString("host",(const char**)&pcValue) && pcValue);
235 poNode->poBookmark->sHost = pcValue;
236 ASSERT(B_OK==po_Message->FindString("user_name",(const char**)&pcValue) && pcValue);
237 poNode->poBookmark->sUserName = pcValue;
238 ASSERT(B_OK==po_Message->FindString("user_password",(const char**)&pcValue) && pcValue);
239 poNode->poBookmark->sUserPassword = pcValue;
240 ASSERT(B_OK==po_Message->FindString("folder",(const char**)&pcValue) && pcValue);
241 poNode->poBookmark->sFolder = pcValue;
242 ASSERT(B_OK==po_Message->FindBool("passive",&poNode->poBookmark->bPassive));
243 ASSERT(B_OK==po_Message->FindBool("ascii",&poNode->poBookmark->bAscii_Mode));
244
245 Bookmark_Save(sOldTitle.String(),poNode);
246
247 DrawNodeAt(iNavCursorIndex);
248 }
249 break;}
250
251 case BF_FTP_MSG_DISCONNECT:{
252 Ftp_Disconnect();
253 break;}
254
255 default:
256 BF_GUI_NodePanel::MessageReceived(po_Message);
257 };
258 }
259
260 bool
261 BF_GUI_FtpPanel::NavEnter()
262 {
263
264 switch(iVisMode){
265 case BF_FTPPANEL_VISMODE_BOOKMARKS:{
266 Act_Connect();
267 break;}
268 case BF_FTPPANEL_VISMODE_FTPLIST:{
269 switch(iState){
270 case BF_FTPPANEL_STATE_CONNECTED:{
271 BF_Node *poNode = Nodes_Focus();
272 if(!poNode) return true;
273
274 switch(poNode->iType){
275 case BF_NODE_TYPE_PARENTDIR:{
276 Act_ChangeDir_Start(poNode);
277 return true;
278 break;}
279 case BF_NODE_TYPE_DIR:{
280 Act_ChangeDir_Start(poNode);
281 return true;
282 break;}
283 }
284
285 break;}
286 }
287 break;}
288 };
289 return true;
290 }
291
292 void
293 BF_GUI_FtpPanel::Bookmark_Edit()
294 {
295 BF_GUI_FtpPanel_NodeBookmark *poNode = (BF_GUI_FtpPanel_NodeBookmark*)Nodes_Focus();
296 if(!poNode) return;
297 ASSERT(poNode->poBookmark);
298
299 BMessage oMessage(BF_FTP_MSG_BOOKMARK_EDIT);
300 oMessage.AddPointer("bf_focus",this);
301
302
303 BF_GUI_Func_PanelsEnable(false);
304
305 BF_GUI_Dialog *poDialog = new BF_GUI_Dialog(BRect(0,0,300,0),
306 BF_DictAt(BF_DICT_FTP_EDITBKM),"dialog",oMessage,BG_GUI_DIALOG_WINRESIZE_MOVE_CENTER);
307
308
309 BRect oRect;
310
311 poDialog->LocalBounds(oRect);
312 oRect.bottom = oRect.top+poSysSetup->oFontToolView.fHeight;
313 BF_GUI_ViewCheck *poCheck;
314
315 oRect.bottom = oRect.top+poSysSetup->oFontToolView.fHeight;
316 BF_GUI_ViewEdit_Create(oRect,BF_DictAt(BF_DICT_FTP_BKM_TITLE),poDialog,"title",poNode->poBookmark->sTitle.String(),
317 B_FOLLOW_LEFT_RIGHT|B_FOLLOW_TOP,B_NAVIGABLE);
318
319 oRect.top = oRect.bottom+5;
320 oRect.bottom = oRect.top+poSysSetup->oFontToolView.fHeight;
321 BF_GUI_ViewEdit_Create(oRect,BF_DictAt(BF_DICT_FTP_BKM_HOST),poDialog,"host",poNode->poBookmark->sHost.String(),
322 B_FOLLOW_LEFT_RIGHT|B_FOLLOW_TOP,B_NAVIGABLE);
323
324 oRect.top = oRect.bottom+5;
325 oRect.bottom = oRect.top+poSysSetup->oFontToolView.fHeight;
326 BF_GUI_ViewEdit_Create(oRect,BF_DictAt(BF_DICT_FTP_BKM_USERNAME),poDialog,"user_name",poNode->poBookmark->sUserName.String(),
327 B_FOLLOW_LEFT_RIGHT|B_FOLLOW_TOP,B_NAVIGABLE);
328
329 oRect.top = oRect.bottom+5;
330 oRect.bottom = oRect.top+poSysSetup->oFontToolView.fHeight;
331 BF_GUI_ViewEdit_Create(oRect,BF_DictAt(BF_DICT_FTP_BKM_PWD),poDialog,"user_password",poNode->poBookmark->sUserPassword.String(),
332 B_FOLLOW_LEFT_RIGHT|B_FOLLOW_TOP,B_NAVIGABLE);
333
334 oRect.top = oRect.bottom+5;
335 oRect.bottom = oRect.top+poSysSetup->oFontToolView.fHeight;
336 BF_GUI_ViewEdit_Create(oRect,BF_DictAt(BF_DICT_FTP_BKM_FOLDER),poDialog,"folder",poNode->poBookmark->sFolder.String(),
337 B_FOLLOW_LEFT_RIGHT|B_FOLLOW_TOP,B_NAVIGABLE);
338
339 oRect.top = oRect.bottom+5;
340 oRect.bottom = oRect.top + poSysSetup->oFontToolView.fHeight;
341 poCheck = new BF_GUI_ViewCheck(oRect,"passive",
342 "passive",poNode->poBookmark->bPassive,
343 B_FOLLOW_LEFT_RIGHT|B_FOLLOW_TOP,B_NAVIGABLE);
344 poDialog->AddChild(poCheck);
345
346 oRect.top = oRect.bottom+5;
347 oRect.bottom = oRect.top + poSysSetup->oFontToolView.fHeight;
348 poCheck = new BF_GUI_ViewCheck(oRect,"ascii",
349 "ascii mode",poNode->poBookmark->bAscii_Mode,
350 B_FOLLOW_LEFT_RIGHT|B_FOLLOW_TOP,B_NAVIGABLE);
351 poDialog->AddChild(poCheck);
352
353
354 poDialog->AddOkCancelMenu(oRect);
355
356 poDialog->SetHeightFromLastChild();
357 poDialog->MoveToCenter( poWinView );
358 BF_GUI_Func_AddChildToMainView( poDialog );
359
360 }
361
362
363 void
364 BF_GUI_FtpPanel::LoadBookmarks()
365 {
366 BF_NodeList loBookmarkNode(false);
367
368
369 {
370 BF_Roster_LoadNodeList(oBookmarkDir,loBookmarkNode,BF_ROSTER_LOAD_NORMAL | BF_ROSTER_LOAD_SICON | BF_ROSTER_LOAD_NODE_FILE);
371 }
372 BF_GUI_FtpPanel_NodeBookmark *poNode;
373 char pc[400];
374 status_t uRes;
375 BF_Node *poBookmarkNode;
376 BDirectory oDir(SETTINGS_FTP_DIR);
377 uRes = oDir.InitCheck();
378 BF_NodeCollection loBukNode;
379
380 for(int i=0;i<loBookmarkNode.CountItems();i++){
381 poBookmarkNode = loBookmarkNode.NodeAt(i);
382
383 BFile oFile(&oDir,poBookmarkNode->sName.String(),B_READ_ONLY);
384 uRes = oFile.InitCheck();
385
386 poNode = new BF_GUI_FtpPanel_NodeBookmark();
387 poNode->iType = BF_NODE_TYPE_FILE;
388 poNode->poBookmark = new BF_GUI_FtpPanel_Bookmark();
389 poNode->CopySIconFrom( poBookmarkSIcon );
390
391
392 poNode->poBookmark->sTitle = poBookmarkNode->sName;
393 if(oFile.ReadAttr("host",B_STRING_TYPE,0,pc,400)>0) poNode->poBookmark->sHost=pc;
394 if(oFile.ReadAttr("user_name",B_STRING_TYPE,0,pc,400)>0) poNode->poBookmark->sUserName=pc;
395 if(oFile.ReadAttr("user_password",B_STRING_TYPE,0,pc,400)>0) poNode->poBookmark->sUserPassword=pc;
396 if(oFile.ReadAttr("folder",B_STRING_TYPE,0,pc,400)>0) poNode->poBookmark->sFolder=pc;
397 if(oFile.ReadAttr("proxy",B_STRING_TYPE,0,pc,400)>0) poNode->poBookmark->sProxy=pc;
398 oFile.ReadAttr("passive",B_BOOL_TYPE,0,&poNode->poBookmark->bPassive,sizeof(bool));
399 oFile.ReadAttr("ascii",B_BOOL_TYPE,0,&poNode->poBookmark->bAscii_Mode,sizeof(bool));
400 oFile.ReadAttr("port",B_INT32_TYPE,0,&poNode->poBookmark->iPort,sizeof(B_INT32_TYPE));
401
402
403 poNode->sName = poNode->poBookmark->sTitle;
404
405 loBukNode.AddItem(poNode);
406 }
407 SetHeader(BF_DictAt(BF_DICT_FTP_PANELTITLE),poFolderSIcon);
408 loNode.DeleteItems();
409 Nodes_Add(NULL,&loBukNode);
410 }
411
412 void
413 BF_GUI_FtpPanel::Bookmark_Save(const char *pc_OldTitle,BF_GUI_FtpPanel_NodeBookmark *po_Node)
414 {
415 BL_String s,s1;
416 ASSERT(po_Node);
417
418 if(B_OK!=BF_Roster_MakeDir(SETTINGS_FTP_DIR)){
419 Action_Alert(BF_DictAt(BF_DICT_ERROR),BF_DictAt(BF_DICT_FTP_CANTMAKESETDIR));
420 return;
421 }
422 BF_GUI_FtpPanel_Bookmark *poBookmark = po_Node->poBookmark;
423 ASSERT(poBookmark);
424
425
426 s=SETTINGS_FTP_DIR;
427 s<<"/";
428 s<<pc_OldTitle;
429 BF_Roster_RemoveNode(s.String());
430
431
432 BDirectory oDir(SETTINGS_FTP_DIR);
433 BFile oFile;
434 status_t uErr;
435
436 uErr = oDir.CreateFile(poBookmark->sTitle.String(),&oFile,false);
437 if(uErr!=B_OK){
438 s = BF_DictAt(BF_DICT_FTP_CANTMAKESETFILE);
439 BL_System_TranslError(uErr,s1);
440 s<<s1;
441 Action_Alert(BF_DictAt(BF_DICT_ERROR),s1.String());
442 return;
443 }
444
445
446 oFile.WriteAttr("host",B_STRING_TYPE,0,poBookmark->sHost.String(),poBookmark->sHost.Length()+1);
447 oFile.WriteAttr("user_name",B_STRING_TYPE,0,poBookmark->sUserName.String(),poBookmark->sUserName.Length()+1);
448 oFile.WriteAttr("user_password",B_STRING_TYPE,0,poBookmark->sUserPassword.String(),poBookmark->sUserPassword.Length()+1);
449 oFile.WriteAttr("proxy",B_STRING_TYPE,0,poBookmark->sProxy.String(),poBookmark->sProxy.Length()+1);
450 oFile.WriteAttr("folder",B_STRING_TYPE,0,poBookmark->sFolder.String(),poBookmark->sFolder.Length()+1);
451 oFile.WriteAttr("passive",B_BOOL_TYPE,0,&poBookmark->bPassive,sizeof(poBookmark->bPassive));
452 oFile.WriteAttr("ascii",B_BOOL_TYPE,0,&poBookmark->bAscii_Mode,sizeof(poBookmark->bAscii_Mode));
453 oFile.WriteAttr("port",B_INT32_TYPE,0,&poBookmark->iPort,sizeof(B_INT32_TYPE));
454 }
455
456
457
458 void
459 BF_GUI_FtpPanel::Act_Connect()
460 {
461 if(!Nodes_Focus()) return;
462
463 iState = BF_FTPPANEL_STATE_CONNECTING;
464 SetHeader(BF_DictAt(BF_DICT_FTP_CONNECTING),poFolderSIcon);
465 if(poSysKeysMenu) PrepareKeysMenu();
466
467 uConnectThread = spawn_thread(BF_GUI_FtpPanel__Act_Connect_Thread, "ftp_connect",
468 B_NORMAL_PRIORITY, this);
469 resume_thread(uConnectThread);
470
471
472
473
474
475 }
476
477
478 void
479 BF_GUI_FtpPanel::Action_SwitchShowIcons()
480 {
481 if(!ModeShowSIcon()) Ftp_LoadIcons();
482
483 BF_GUI_NodePanel::Action_SwitchShowIcons();
484 }
485
486 void
487 BF_GUI_FtpPanel::Ftp_LoadIcons()
488 {
489 switch(iVisMode){
490 case BF_FTPPANEL_VISMODE_FTPLIST:{
491 BF_Node *poNode;
492 BMimeType oMimeType;
493 BL_String s;
494
495 for(int i=0;i<loNode.CountItems();i++){
496 poNode = loNode.NodeAt(i);
497
498 switch(poNode->iType){
499 case BF_NODE_TYPE_PARENTDIR:
500 case BF_NODE_TYPE_DIR:
501 if(poFolderSIcon) poNode->CopySIconFrom(poFolderSIcon);
502 break;
503 default:
504 if( poDocSIcon ) poNode->CopySIconFrom(poDocSIcon);
505 }
506 }
507 break;}
508 }
509 }
510
511
512 void
513 BF_GUI_FtpPanel::Ftp_ListLoaded(const BL_String & s_List)
514 {
515
516 loNode.DeleteItems();
517
518 int iStart = 0,i1,i2;
519 BL_String sNode,s;
520 BF_Node *poNode;
521 char pc[5];
522 bool bParentLoaded = false;
523
524 pc[0] = (char) 0x0D;
525 pc[1] = (char) 0x0A;
526 pc[2] = '\0';
527
528 BMimeType oMimeType;
529
530 while(true){
531 i1 = s_List.FindFirst(pc,iStart);
532 if(i1<0) break;
533
534 s_List.CopyInto(sNode,iStart,i1-iStart);
535 iStart = i1+2;
536
537 if(sNode.FindFirst("total")==0) continue;
538 poNode = new BF_Node();
539 loNode.AddItem(poNode);
540
541 sNode.CopyInto(poNode->sName,55,sNode.Length()-55);
542 Debug_Info(poNode->sName.String());
543
544 poNode->sName.LTrim();
545 poNode->sName.RTrim();
546
547
548
549
550
551
552
553 if(poNode->sName==".."){
554 poNode->iType = BF_NODE_TYPE_PARENTDIR;
555 bParentLoaded = true;
556 continue;
557 }
558 if(poNode->sName=="."){
559 poNode->iType = poNode->iType = BF_NODE_TYPE_PARENTDIR;;
560 continue;
561 }
562
563
564 i2 = sNode.FindFirst(" ",24);
565 if(i2>0){
566 sNode.CopyInto(s,i2,41-i2);
567 poNode->iSize = s.Int32();
568 }
569
570 if(sNode.FindFirst("d")==0) poNode->iType = BF_NODE_TYPE_DIR; else
571 poNode->iType = BF_NODE_TYPE_FILE;
572
573 }
574
575 if(!bParentLoaded){
576 poNode = new BF_Node("..");
577 poNode->iType = BF_NODE_TYPE_PARENTDIR;
578 loNode.AddItem(poNode);
579 }
580
581 loNode.Sort(iSortType );
582 iVisMode = BF_FTPPANEL_VISMODE_FTPLIST;
583 if(ModeShowSIcon()) Ftp_LoadIcons();
584
585 NavChangeCursor(0);
586 Draw(Bounds());
587
588 s = "ftp : ";
589 s << oPath.Path();
590 SetHeader(s.String(),poFolderSIcon);
591
592 if(poSysKeysMenu) PrepareKeysMenu();
593 }
594
595
596 void
597 BF_GUI_FtpPanel::Act_ChangeDir_Start(BF_Node *po_Node)
598 {
599 ASSERT(po_Node);
600
601 iState = BF_FTPPANEL_STATE_DIR_CHANGING;
602 SetHeader(BF_DictAt(BF_DICT_FTP_DIRCHANGING),poFolderSIcon);
603 if(poSysKeysMenu) PrepareKeysMenu();
604
605 uConnectThread = spawn_thread(BF_GUI_FtpPanel__Act_ChangeDir_Thread, "ftp_change_dir", B_NORMAL_PRIORITY, this);
606 resume_thread(uConnectThread);
607
608 }
609
610 void
611 BF_GUI_FtpPanel::Act_ReloadDir_Start()
612 {
613 if(BF_FTPPANEL_STATE_CONNECTED!=iState){
614 BF_Dialog_Alert_Sep(BF_DictAt(BF_DICT_ERROR),BF_DictAt(BF_DICT_FTP_NOTREADY),NULL,this);
615 return;
616 }
617
618 iState = BF_FTPPANEL_STATE_DIR_RELOAD;
619 SetHeader(BF_DictAt(BF_DICT_FTP_DIRRELOADING),poFolderSIcon);
620 if(poSysKeysMenu) PrepareKeysMenu();
621
622 uConnectThread = spawn_thread(BF_GUI_FtpPanel__Act_ReloadDir_Thread, "ftp_reload_dir",B_NORMAL_PRIORITY,this);
623 resume_thread(uConnectThread);
624 }
625
626 void
627 BF_GUI_FtpPanel::ActionMakeDir_Run(BL_String & s_Title)
628 {
629 if(BF_FTPPANEL_STATE_CONNECTED!=iState){
630 BF_Dialog_Alert_Sep(BF_DictAt(BF_DICT_ERROR),BF_DictAt(BF_DICT_FTP_NOTREADY),NULL,this);
631 return;
632 }
633
634 BMessage *poMessage = new BMessage();
635 poMessage->AddPointer("panel",this);
636 poMessage->AddString("name",s_Title.String());
637
638 uConnectThread = spawn_thread(BF_GUI_FtpPanel__Act_MakeDir_Thread, "ftp_make_dir",B_NORMAL_PRIORITY,(void*)poMessage);
639 resume_thread(uConnectThread);
640 }
641
642 void
643 BF_GUI_FtpPanel::ActionDelete_Run(BF_NodeCollection & lo_Node)
644 {
645 BF_GUI_OperRoster_AddTask(new BF_GUI_FtpPanel_DeleteTask(this,lo_Node));
646 }
647
648
649 void
650 BF_GUI_FtpPanel::Bookmark_Delete()
651 {
652
653 BL_List *ploMenuItem = new BL_List();
654 ploMenuItem->AddItem(new BF_GUI_ViewMenu_Item(BF_DictAt(BF_DICT_YES),""));
655 ploMenuItem->AddItem(new BF_GUI_ViewMenu_Item(BF_DictAt(BF_DICT_NO),""));
656 BF_Dialog_Alert_Sep("",BF_DictAt(BF_DICT_FTP_BKM_ASKDEL),ploMenuItem,this,NULL,BF_FTP_MSG_BOOKMARK_DELETE_ANSWER);
657 }
658
659 void
660 BF_GUI_FtpPanel::Bookmark_Delete_Yes()
661 {
662 BF_GUI_FtpPanel_NodeBookmark *poNode = (BF_GUI_FtpPanel_NodeBookmark*)Nodes_Focus();
663 if(!poNode) return;
664 BF_Roster_RemoveNode(oBookmarkDir,poNode->sName.String());
665 loNode.DeleteItemAt(iNavCursorIndex);
666
667 DrawNodes(true);
668 DrawListInfo(true);
669 DrawSelListInfo(true);
670 NavChangeCursor(iNavCursorIndex);
671 }
672
673 void
674 BF_GUI_FtpPanel::Bookmark_Create()
675 {
676 BF_GUI_FtpPanel_NodeBookmark *poNode = new BF_GUI_FtpPanel_NodeBookmark();
677 poNode->poBookmark = new BF_GUI_FtpPanel_Bookmark();
678 poNode->poBookmark->sTitle = "untitled";
679 poNode->sName = poNode->poBookmark->sTitle;
680 poNode->CopySIconFrom(poBookmarkSIcon);
681 poNode->poBookmark->sUserName = "anonymous";
682
683 loNode.AddItem(poNode);
684
685 DrawNodes(true);
686 DrawListInfo(true);
687 DrawSelListInfo(true);
688 NavChangeCursor(loNode.IndexOf(poNode));
689
690 Bookmark_Edit();
691 }
692
693
694 void
695 BF_GUI_FtpPanel::Ftp_Disconnect()
696 {
697 DELETE(poClient);
698 poClient = new FtpClient();
699 poBookmark = NULL;
700
701 iVisMode = BF_FTPPANEL_VISMODE_BOOKMARKS;
702 iState = BF_FTPPANEL_STATE_DEFAULT;
703
704 RefreshNodeList();
705 DrawNodes(true);
706 DrawListInfo(true);
707 DrawSelListInfo(true);
708 NavChangeCursor(0);
709
710 if(poSysKeysMenu) PrepareKeysMenu();
711 }
712
713 void
714 BF_GUI_FtpPanel::PrepareTopMenuItem(BF_GUI_TopMenu_HItem *po_HItem)
715 {
716 BF_GUI_NodePanel::PrepareTopMenuItem(po_HItem);
717 po_HItem->AddHItem("",NULL);
718 po_HItem->AddHItem(BF_DictAt(BF_DICT_FTP_RELOADFOLDER),BF_FTP_MSG_DIR_RELOAD_START,this,"");
719 }
720
721 void
722 BF_GUI_FtpPanel::ActionCopyFrom_Run(BL_String & s_Path,BF_NodeCollection & lo_Node,bool b_Move)
723 {
724 if(!poBookmark) return;
725 BF_GUI_OperRoster_AddTask(new BF_GUI_FtpPanel_UploadTask(s_Path,this,lo_Node,b_Move));
726 }
727
728 void
729 BF_GUI_FtpPanel::ActionCopyTo_Run(BL_String & s_Path,BF_NodeCollection & lo_Node)
730 {
731 if(!poBookmark) return;
732 BF_GUI_OperRoster_AddTask(new BF_GUI_FtpPanel_DownloadTask(s_Path,this,lo_Node,false));
733 }
734