src/FileAttributeFinder.h
branchv_0
changeset 6 35607c973cf5
parent 5 ec661baf433a
child 7 8d73bff730a7
equal deleted inserted replaced
5:ec661baf433a 6:35607c973cf5
    39 
    39 
    40 	fs::path currentFile;
    40 	fs::path currentFile;
    41 	string_t currentOwner;
    41 	string_t currentOwner;
    42 	string_t currentGroup;
    42 	string_t currentGroup;
    43 
    43 
    44 	string_t getType(const fs::path& file) {
    44 	string_t getType(const fs::path& file, bool x) {
    45 		// TODO: Use whole words? (letters are compatible with find -type)
    45 		// TODO: Use whole words? (letters are compatible with find -type)
    46 		if (fs::is_regular_file(file)) return L"f";
    46 		if (fs::is_symlink(file) && x) return L"l"; // symlinks are both symlinks and files/directories/etc.
    47 		else if (fs::is_symlink(file)) return L"l"; // symlinks to directories are both symlinks and directories
    47 		else if (fs::is_regular_file(file)) return L"f";
    48 		else if (fs::is_directory(file)) return L"d";
    48 		else if (fs::is_directory(file)) return L"d";
    49 		else if (fs::is_fifo(file)) return L"p";
    49 		else if (fs::is_fifo(file)) return L"p";
    50 		else if (fs::is_socket(file)) return L"s";
    50 		else if (fs::is_socket(file)) return L"s";
    51 		else if (fs::is_block_file(file)) return L"b";
    51 		else if (fs::is_block_file(file)) return L"b";
    52 		else if (fs::is_character_file(file)) return L"c";
    52 		else if (fs::is_character_file(file)) return L"c";
    75 	static const string_t FIELD_NAME;
    75 	static const string_t FIELD_NAME;
    76 	static const string_t FIELD_SIZE;
    76 	static const string_t FIELD_SIZE;
    77 	static const string_t FIELD_PATH_ABSOLUTE;
    77 	static const string_t FIELD_PATH_ABSOLUTE;
    78 	static const string_t FIELD_PATH_CANONICAL;
    78 	static const string_t FIELD_PATH_CANONICAL;
    79 	static const string_t FIELD_TYPE;
    79 	static const string_t FIELD_TYPE;
       
    80 	static const string_t FIELD_SYMLINK_TARGET_TYPE;
    80 	static const string_t FIELD_OWNER;
    81 	static const string_t FIELD_OWNER;
    81 	static const string_t FIELD_GROUP;
    82 	static const string_t FIELD_GROUP;
    82 
    83 
    83 	virtual vector<AttributeMetadata> toMetadata(const RequestedField& field) override {
    84 	virtual vector<AttributeMetadata> toMetadata(const RequestedField& field) override {
    84 		if (field.group == RequestedField::GROUP_FILE) {
    85 		if (field.group == RequestedField::GROUP_FILE) {
   112 				} else if (field.name == FIELD_PATH_ABSOLUTE) {
   113 				} else if (field.name == FIELD_PATH_ABSOLUTE) {
   113 					writer->writeAttribute(fs::absolute(currentFile).wstring());
   114 					writer->writeAttribute(fs::absolute(currentFile).wstring());
   114 				} else if (field.name == FIELD_PATH_CANONICAL) {
   115 				} else if (field.name == FIELD_PATH_CANONICAL) {
   115 					writer->writeAttribute(fs::canonical(currentFile).wstring());
   116 					writer->writeAttribute(fs::canonical(currentFile).wstring());
   116 				} else if (field.name == FIELD_TYPE) {
   117 				} else if (field.name == FIELD_TYPE) {
   117 					writer->writeAttribute(getType(currentFile));
   118 					writer->writeAttribute(getType(currentFile, true));
       
   119 				} else if (field.name == FIELD_SYMLINK_TARGET_TYPE) {
       
   120 					writer->writeAttribute(getType(currentFile, false));
   118 				} else if (field.name == FIELD_SIZE) {
   121 				} else if (field.name == FIELD_SIZE) {
   119 					integer_t size = fs::is_regular_file(currentFile) ? fs::file_size(currentFile) : 0;
   122 					integer_t size = fs::is_regular_file(currentFile) ? fs::file_size(currentFile) : 0;
   120 					writer->writeAttribute(&size, typeid (size));
   123 					writer->writeAttribute(&size, typeid (size));
   121 				} else if (field.name == FIELD_OWNER) {
   124 				} else if (field.name == FIELD_OWNER) {
   122 					if (currentOwner.empty()) fetchOwner(currentFile, currentOwner, currentGroup);
   125 					if (currentOwner.empty()) fetchOwner(currentFile, currentOwner, currentGroup);
   140 const string_t FileAttributeFinder::FIELD_NAME = L"name";
   143 const string_t FileAttributeFinder::FIELD_NAME = L"name";
   141 const string_t FileAttributeFinder::FIELD_SIZE = L"size";
   144 const string_t FileAttributeFinder::FIELD_SIZE = L"size";
   142 const string_t FileAttributeFinder::FIELD_PATH_ABSOLUTE = L"path_absolute";
   145 const string_t FileAttributeFinder::FIELD_PATH_ABSOLUTE = L"path_absolute";
   143 const string_t FileAttributeFinder::FIELD_PATH_CANONICAL = L"path_canonical";
   146 const string_t FileAttributeFinder::FIELD_PATH_CANONICAL = L"path_canonical";
   144 const string_t FileAttributeFinder::FIELD_TYPE = L"type";
   147 const string_t FileAttributeFinder::FIELD_TYPE = L"type";
       
   148 const string_t FileAttributeFinder::FIELD_SYMLINK_TARGET_TYPE = L"symlink_target_type";
   145 const string_t FileAttributeFinder::FIELD_OWNER = L"owner";
   149 const string_t FileAttributeFinder::FIELD_OWNER = L"owner";
   146 const string_t FileAttributeFinder::FIELD_GROUP = L"group";
   150 const string_t FileAttributeFinder::FIELD_GROUP = L"group";
   147 
   151 
   148 }
   152 }
   149 }
   153 }