37 typedef std::shared_ptr<UriCheck>
Ptr;
41 is_local_file_(false),
42 local_file_exists_(false)
48 is_encoded_(determine_if_encoded()),
49 is_local_file_(determine_if_local_file()),
50 local_file_exists_(determine_if_file_exists())
58 void set(
const std::string& uri)
64 is_encoded_ = determine_if_encoded();
65 is_local_file_ = determine_if_local_file();
66 local_file_exists_ = determine_if_file_exists();
81 return is_local_file_;
86 return local_file_exists_;
94 bool determine_if_encoded()
99 gchar *tmp = g_uri_unescape_string(uri_.c_str(),
nullptr);
103 const std::string unescaped_uri{tmp};
105 return unescaped_uri.length() < uri_.length();
108 bool determine_if_local_file()
113 gchar *tmp = g_uri_parse_scheme(uri_.c_str());
114 std::string uri_scheme;
116 uri_scheme.assign(tmp);
119 return uri_.at(0) ==
'/' or
120 (uri_.at(0) ==
'.' and uri_.at(1) ==
'/') or
121 uri_scheme ==
"file";
123 catch (
const std::out_of_range &e) {
124 std::cerr <<
"Invalid URI string provided: " << uri_ << std::endl;
129 bool determine_if_file_exists()
134 GError *error =
nullptr;
137 std::unique_ptr<GFile, void(*)(void *)> file(
138 g_file_new_for_uri(uri_.c_str()), g_object_unref);
139 std::unique_ptr<GFileInfo, void(*)(void *)> info(
141 file.get(), G_FILE_ATTRIBUTE_STANDARD_FAST_CONTENT_TYPE
"," 142 G_FILE_ATTRIBUTE_ETAG_VALUE, G_FILE_QUERY_INFO_NONE,
146 return info.get() !=
nullptr;
153 bool local_file_exists_;
160 #endif // URI_CHECK_H_