| 114 | | class ViewFilterVariableValue : public ViewFilter { |
| 115 | | public: |
| 116 | | ViewFilterVariableValue(const char* name, torrent::Object::value_type v, bool inverse = false) : |
| 117 | | m_name(name), m_value(v), m_inverse(inverse) {} |
| 118 | | |
| 119 | | virtual bool operator () (Download* d1) const { |
| 120 | | return (rpc::call_command_value(m_name, rpc::make_target(d1)) == m_value) != m_inverse; |
| 121 | | } |
| 122 | | |
| 123 | | private: |
| 124 | | const char* m_name; |
| 125 | | torrent::Object::value_type m_value; |
| 126 | | bool m_inverse; |
| 127 | | }; |
| 128 | | |
| 146 | | |
| 147 | | m_filter["started"] = new ViewFilterVariableValue("d.get_state", 1); |
| 148 | | m_filter["stopped"] = new ViewFilterVariableValue("d.get_state", 0); |
| 149 | | m_filter["complete"] = new ViewFilterVariableValue("d.get_complete", 0, true); |
| 150 | | m_filter["incomplete"] = new ViewFilterVariableValue("d.get_complete", 0); |
| 151 | | m_filter["hashing"] = new ViewFilterVariableValue("d.get_hashing", 0, true); |
| 233 | | inline ViewManager::filter_list |
| 234 | | ViewManager::build_filter_list(const filter_args& args) { |
| 235 | | View::filter_list filterList; |
| 236 | | filterList.reserve(args.size()); |
| 237 | | |
| 238 | | for (filter_args::const_iterator itr = args.begin(), last = args.end(); itr != last; ++itr) { |
| 239 | | filter_map::const_iterator filterItr = m_filter.find(itr->c_str()); |
| 240 | | |
| 241 | | if (filterItr == m_filter.end()) |
| 242 | | throw torrent::input_error("Invalid filtering identifier."); |
| 243 | | |
| 244 | | filterList.push_back(filterItr->second); |
| 245 | | } |
| 246 | | |
| 247 | | return filterList; |
| 248 | | } |
| 249 | | |
| 250 | | void |
| 251 | | ViewManager::set_filter(const std::string& name, const filter_args& args) { |
| 252 | | iterator viewItr = find_throw(name); |
| 253 | | |
| 254 | | (*viewItr)->set_filter(build_filter_list(args)); |
| | 211 | void |
| | 212 | ViewManager::set_filter(const std::string& name, const std::string& cmd) { |
| | 213 | iterator viewItr = find_throw(name); |
| | 214 | |
| | 215 | (*viewItr)->set_filter(cmd); |