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/command_ui.cc

    r1039 r1042  
    5454 
    5555typedef void (core::ViewManager::*view_filter_slot)(const std::string&, const core::ViewManager::sort_args&); 
     56typedef void (core::ViewManager::*view_cfilter_slot)(const std::string&, const std::string&); 
    5657 
    5758torrent::Object 
     
    7879 
    7980torrent::Object 
     81apply_view_cfilter(view_cfilter_slot viewFilterSlot, const torrent::Object& rawArgs) { 
     82  const torrent::Object::list_type& args = rawArgs.as_list(); 
     83 
     84  if (args.size() != 2) 
     85    throw torrent::input_error("Too few arguments."); 
     86 
     87  const std::string& name = args.front().as_string(); 
     88   
     89  if (name.empty()) 
     90    throw torrent::input_error("First argument must be a string."); 
     91 
     92  (control->view_manager()->*viewFilterSlot)(name, args.back().as_string()); 
     93 
     94  return torrent::Object(); 
     95} 
     96 
     97torrent::Object 
    8098apply_view_sort(const torrent::Object& rawArgs) { 
    8199  const torrent::Object::list_type& args = rawArgs.as_list(); 
     
    143161  rpc::print_object_std(&result, &rawArgs, 0); 
    144162  return result; 
     163} 
     164 
     165bool 
     166as_boolean(const torrent::Object& rawArgs) { 
     167  switch (rawArgs.type()) { 
     168  case torrent::Object::TYPE_VALUE:  return rawArgs.as_value(); 
     169  case torrent::Object::TYPE_STRING: return !rawArgs.as_string().empty(); 
     170  case torrent::Object::TYPE_LIST:   return !rawArgs.as_list().empty(); 
     171  case torrent::Object::TYPE_MAP:    return !rawArgs.as_map().empty(); 
     172  default: return false; 
     173  } 
     174} 
     175 
     176torrent::Object 
     177apply_not(rpc::target_type target, const torrent::Object& rawArgs) { 
     178  return (int64_t)as_boolean(rawArgs); 
     179} 
     180 
     181torrent::Object 
     182apply_and(rpc::target_type target, const torrent::Object& rawArgs) { 
     183  if (rawArgs.type() != torrent::Object::TYPE_LIST) 
     184    return as_boolean(rawArgs); 
     185 
     186  for (torrent::Object::list_const_iterator itr = rawArgs.as_list().begin(), last = rawArgs.as_list().end(); itr != last; itr++) 
     187    if (!as_boolean(rpc::parse_command_single(target, itr->as_string()))) 
     188      return (int64_t)false; 
     189 
     190  return (int64_t)true; 
     191} 
     192 
     193torrent::Object 
     194apply_or(rpc::target_type target, const torrent::Object& rawArgs) { 
     195  if (rawArgs.type() != torrent::Object::TYPE_LIST) 
     196    return as_boolean(rawArgs); 
     197 
     198  for (torrent::Object::list_const_iterator itr = rawArgs.as_list().begin(), last = rawArgs.as_list().end(); itr != last; itr++) 
     199    if (as_boolean(rpc::parse_command_single(target, itr->as_string()))) 
     200      return (int64_t)true; 
     201 
     202  return (int64_t)false; 
    145203} 
    146204 
     
    288346  ADD_COMMAND_NONE_L("view_set",        rak::ptr_fn(&apply_view_set)); 
    289347 
    290   ADD_COMMAND_LIST("view_filter",       rak::bind_ptr_fn(&apply_view_filter, &core::ViewManager::set_filter)); 
     348  ADD_COMMAND_LIST("view_filter",       rak::bind_ptr_fn(&apply_view_cfilter, &core::ViewManager::set_filter)); 
    291349  ADD_COMMAND_LIST("view_filter_on",    rak::bind_ptr_fn(&apply_view_filter, &core::ViewManager::set_filter_on)); 
    292350 
     
    302360  ADD_ANY_NONE("cat",                   rak::ptr_fn(&apply_cat)); 
    303361  ADD_ANY_NONE("if",                    rak::bind_ptr_fn(&apply_if, 0)); 
     362  ADD_ANY_NONE("not",                   rak::ptr_fn(&apply_not)); 
     363  ADD_ANY_NONE("and",                   rak::ptr_fn(&apply_and)); 
     364  ADD_ANY_NONE("or",                    rak::ptr_fn(&apply_or)); 
    304365 
    305366  // A temporary command for handling stuff until we get proper