bool CSmartPlaylist::Save(CVariant &obj, bool full /* = true */) const { if (obj.type() == CVariant::VariantTypeConstNull) return false; obj.clear(); // add "type", "name" and "match" obj["type"] = m_playlistType; obj["match"] = m_matchAllRules ? "all" : "one"; if (full) obj["name"] = m_playlistName; // add "rules" obj["rules"] = CVariant(CVariant::VariantTypeArray); for (vector<CSmartPlaylistRule>::const_iterator it = m_playlistRules.begin(); it != m_playlistRules.end(); ++it) it->Save(obj["rules"]); // add "limit" if (full && m_limit) obj["limit"] = m_limit; // add "order" if (full && m_orderField != SortByNone) { obj["order"] = CVariant(CVariant::VariantTypeObject); obj["order"]["method"] = CSmartPlaylistRule::TranslateOrder(m_orderField); obj["order"]["direction"] = m_orderAscending ? "ascending" : "descending"; } return true; }