Show
Ignore:
Timestamp:
03/16/08 09:55:40 (4 years ago)
Author:
rakshasa
Message:

* Changed view_filter to use boolean commands instead of custom
functors.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • trunk/rtorrent/src/core/view_manager.cc

    r966 r1042  
    112112}; 
    113113 
    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  
    129114// Really need to implement a factory and allow options in the sort 
    130115// statements. 
     
    144129  m_sort["state_changed"]         = new ViewSortVariableValue("d.get_state_changed"); 
    145130  m_sort["state_changed_reverse"] = new ViewSortVariableValue("d.get_state_changed", true); 
    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); 
    152131} 
    153132 
     
    156135  std::for_each(begin(), end(), rak::call_delete<View>()); 
    157136  std::for_each(m_sort.begin(), m_sort.end(), rak::on(rak::mem_ref(&sort_map::value_type::second), rak::call_delete<ViewSort>())); 
    158   std::for_each(m_filter.begin(), m_filter.end(), rak::on(rak::mem_ref(&filter_map::value_type::second), rak::call_delete<ViewFilter>())); 
    159137 
    160138  base_type::clear(); 
     
    231209} 
    232210 
    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)); 
     211void 
     212ViewManager::set_filter(const std::string& name, const std::string& cmd) { 
     213  iterator viewItr = find_throw(name); 
     214 
     215  (*viewItr)->set_filter(cmd); 
    255216  (*viewItr)->filter(); 
    256217}