1 #ifndef NEWSBOAT_FILEBROWSERFORMACTION_H_
2 #define NEWSBOAT_FILEBROWSERFORMACTION_H_
3 
4 #include <sys/stat.h>
5 #include <grp.h>
6 
7 #include "configcontainer.h"
8 #include "listformatter.h"
9 #include "listwidget.h"
10 #include "formaction.h"
11 
12 namespace newsboat {
13 
14 class FileBrowserFormAction : public FormAction {
15 public:
16 	FileBrowserFormAction(View*, std::string formstr, ConfigContainer* cfg);
17 	~FileBrowserFormAction() override;
18 	void prepare() override;
19 	void init() override;
20 	KeyMapHintEntry* get_keymap_hint() override;
21 
set_dir(const std::string & d)22 	void set_dir(const std::string& d)
23 	{
24 		dir = d;
25 	}
set_default_filename(const std::string & fn)26 	void set_default_filename(const std::string& fn)
27 	{
28 		default_filename = fn;
29 	}
30 
id()31 	std::string id() const override
32 	{
33 		return "filebrowser";
34 	}
35 	std::string title() override;
36 
37 private:
38 	bool process_operation(Operation op,
39 		bool automatic = false,
40 		std::vector<std::string>* args = nullptr) override;
41 	void update_title(const std::string& working_directory);
42 
43 	void add_file(ListFormatter& listfmt,
44 		std::vector<std::string>& id_at_position,
45 		std::string filename);
46 	std::string get_filename_suggestion(const std::string& s);
47 	std::string get_rwx(unsigned short val);
48 	std::vector<std::string> id_at_position;
49 
50 	char get_filetype(mode_t mode);
51 	std::string get_owner(uid_t uid);
52 	std::string get_group(gid_t gid);
53 	std::string get_formatted_filename(std::string filename, char ftype,
54 		mode_t mode);
55 
56 	bool quit;
57 	std::string cwd;
58 	std::string dir;
59 	std::string default_filename;
60 
61 	ListWidget files_list;
62 };
63 
64 } // namespace newsboat
65 
66 #endif /* NEWSBOAT_FILEBROWSERFORMACTION_H_ */
67