libzypp 17.31.23
MediaProducts.h
Go to the documentation of this file.
1/*---------------------------------------------------------------------\
2| ____ _ __ __ ___ |
3| |__ / \ / / . \ . \ |
4| / / \ V /| _/ _/ |
5| / /__ | | | | | | |
6| /_____||_| |_| |_| |
7| |
8\---------------------------------------------------------------------*/
12#ifndef ZYPP_MEDIAPRODUCTS_H_
13#define ZYPP_MEDIAPRODUCTS_H_
14
15#include <iterator>
16#include <iostream>
17#include <fstream>
18#include <zypp/ZConfig.h>
19#include <zypp/base/Logger.h>
21#include <zypp-core/base/UserRequestException>
22
23#include <zypp-core/ui/ProgressData>
24
25namespace zypp
26{
31 {
33 std::string _name;
34
38 MediaProductEntry( const Pathname & dir_r = "/", const std::string & name_r = std::string() )
39 : _dir(dir_r), _name(name_r)
40 {
41 }
42
43 bool operator<( const MediaProductEntry &rhs ) const
44 {
45 int res = _name.compare( rhs._name );
46 return ( res < 0 || ( res == 0 && _dir < rhs._dir ) );
47 }
48 };
49
53 typedef std::set<MediaProductEntry> MediaProductSet;
54
58 template <class TOutputIterator>
59 static void scanProductsFile( const Pathname & file_r, TOutputIterator result )
60 {
61 std::ifstream pfile( file_r.asString().c_str() );
62 while ( pfile.good() ) {
63
64 std::string value = str::getline( pfile, str::TRIM );
65 if ( pfile.bad() ) {
66 ERR << "Error parsing " << file_r << std::endl;
67 ZYPP_THROW(Exception("Error parsing " + file_r.asString()));
68 }
69 if ( pfile.fail() ) {
70 break; // no data on last line
71 }
72 std::string tag = str::stripFirstWord( value, true );
73
74 if ( tag.size() ) {
75 *result = MediaProductEntry( tag, value );
76 }
77 }
78 }
79
88 template <class TOutputIterator>
89 void productsInMedia( const Url & url_r, TOutputIterator result )
90 {
91 media::MediaManager media_mgr;
92 // open the media
93 media::MediaAccessId id = media_mgr.open(url_r);
94 media_mgr.attach(id);
95 Pathname products_file = Pathname("media.1/products");
96
97 try {
98 media_mgr.provideFile (id, OnMediaLocation(products_file) );
99 products_file = media_mgr.localPath (id, products_file);
100 scanProductsFile (products_file, result);
101 }
102 catch ( const Exception & excpt ) {
103 ZYPP_CAUGHT(excpt);
104 MIL << "No products description found on the Url" << std::endl;
105 }
106 media_mgr.release(id, "");
107 }
108
117 void productsInMedia( const Url & url_r, MediaProductSet &set )
118 {
119 productsInMedia(url_r, std::inserter(set, set.end()));
120 }
121
122} // ns zypp
123
124#endif
125
126// vim: set ts=2 sts=2 sw=2 et ai:
Base class for Exception.
Definition: Exception.h:146
Describes a resource file located on a medium.
Url manipulation class.
Definition: Url.h:92
const std::string & asString() const
String representation.
Definition: Pathname.h:91
Manages access to the 'physical' media, e.g CDROM drives, Disk volumes, directory trees,...
Definition: MediaManager.h:454
MediaAccessId open(const Url &url, const Pathname &preferred_attach_point="")
Opens the media access for specified with the url.
void attach(MediaAccessId accessId)
Attach the media using the concrete handler (checks all devices).
ZYPP_DEPRECATED void provideFile(MediaAccessId accessId, const Pathname &filename, const ByteCount &expectedFileSize) const
void release(MediaAccessId accessId, const std::string &ejectDev="")
Release the attached media and optionally eject.
Pathname localPath(MediaAccessId accessId, const Pathname &pathname) const
Shortcut for 'localRoot() + pathname', but returns an empty pathname if media is not attached.
unsigned int MediaAccessId
Media manager access Id type.
Definition: MediaSource.h:29
@ TRIM
Definition: String.h:500
std::string stripFirstWord(std::string &line, const bool ltrim_first)
Definition: String.cc:263
std::string getline(std::istream &str, const Trim trim_r)
Return stream content up to (but not returning) the next newline.
Definition: String.cc:478
Easy-to use interface to the ZYPP dependency resolver.
Definition: CodePitfalls.doc:2
std::set< MediaProductEntry > MediaProductSet
A set of available products in media.
Definition: MediaProducts.h:53
static void scanProductsFile(const Pathname &file_r, TOutputIterator result)
FIXME: add a comment here...
Definition: MediaProducts.h:59
void productsInMedia(const Url &url_r, TOutputIterator result)
Available products in a url location.
Definition: MediaProducts.h:89
Represents an available product in media.
Definition: MediaProducts.h:31
bool operator<(const MediaProductEntry &rhs) const
Definition: MediaProducts.h:43
MediaProductEntry(const Pathname &dir_r="/", const std::string &name_r=std::string())
Ctor.
Definition: MediaProducts.h:38
#define ZYPP_CAUGHT(EXCPT)
Drops a logline telling the Exception was caught (in order to handle it).
Definition: Exception.h:436
#define ZYPP_THROW(EXCPT)
Drops a logline and throws the Exception.
Definition: Exception.h:428
#define MIL
Definition: Logger.h:96
#define ERR
Definition: Logger.h:98