// Copyright (c) 2008 Hartmut Kaiser // // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) #include #include "saga-advert.hpp" #if defined(SAGA_HAVE_PACKAGE_ADVERT) && defined(SAGA_HAVE_PACKAGE_ADVERT) void print_dir_attribs (saga::url const& u, std::string indent = " ") { saga::advert::directory ad (u, saga::advert::Read); std::vector keys (ad.list_attributes()); for ( std::size_t i = 0; i < keys.size (); i++ ) { std::cout << indent << " " << keys[i] << "\t\t: "; if ( ad.attribute_is_vector (keys[i]) ) { std::vector vals = ad.get_vector_attribute (keys[i]); for ( std::size_t j = 0; j < vals.size (); j++ ) { std::cout << vals[j]; if ( j < vals.size () - 1 ) { std::cout << ", "; } } std::cout << std::endl; } else { std::cout << ad.get_attribute (keys[i]) << std::endl; } } return; } void print_entry_attribs (saga::url const& u, std::string indent = " ") { std::cout << indent + " " << u << std::endl; saga::advert::entry ad (u, saga::advert::Read); std::vector keys (ad.list_attributes()); for ( std::size_t i = 0; i < keys.size (); i++ ) { std::cout << indent << " " << keys[i] << "\t\t: "; if ( ad.attribute_is_vector (keys[i]) ) { std::vector vals = ad.get_vector_attribute (keys[i]); for ( std::size_t j = 0; j < vals.size (); j++ ) { std::cout << vals[j]; if ( j < vals.size () - 1 ) { std::cout << ", "; } } std::cout << std::endl; } else { std::cout << ad.get_attribute (keys[i]) << std::endl; } } return; } #endif /////////////////////////////////////////////////////////////////////////////// void advert_dump_directory (saga::url u, std::string indent) { using namespace saga; // print self std::cout << indent << u << std::endl; print_dir_attribs (u, indent); // read advert entries advert::directory dir (u); std::vector entries (dir.list ()); // print dirs for ( unsigned int i = 0; i < entries.size (); i++ ) { if ( dir.is_dir (entries[i]) ) { saga::url next(u); std::string path = next.get_path(); if (path[path.size()-1] != '/') path += '/'; path += entries[i].get_string(); next.set_path(path); advert_dump_directory (next, indent + " "); } } // print entries for ( unsigned int i = 0; i < entries.size (); i++ ) { if ( ! dir.is_dir (entries[i]) ) { saga::url next(u); std::string path = next.get_path(); path += "/"; path += entries[i].get_string(); next.set_path(path); print_entry_attribs (next, indent + " "); } } }