1 |
douglas |
464 |
// Decentralized Media |
2 |
|
|
// |
3 |
|
|
// Douglas Thrift |
4 |
|
|
// |
5 |
|
|
// $Id$ |
6 |
|
|
|
7 |
douglas |
471 |
#ifndef _DecentralizedMedia_hpp_ |
8 |
|
|
#define _DecentralizedMedia_hpp_ |
9 |
douglas |
464 |
|
10 |
douglas |
471 |
#include <menes/platform.hpp> |
11 |
|
|
|
12 |
|
|
#ifdef MENES_PRAGMA_ONCE |
13 |
|
|
#pragma once |
14 |
|
|
#endif |
15 |
|
|
|
16 |
|
|
#include <menes-api/process.hpp> |
17 |
douglas |
470 |
#include <menes-waf/server.hpp> |
18 |
douglas |
507 |
#include <menes-xml/nodeset.hpp> |
19 |
douglas |
470 |
|
20 |
douglas |
464 |
#include "BeepRemote.hpp" |
21 |
douglas |
476 |
#include "MediaFolder.hpp" |
22 |
douglas |
514 |
#include "Share.hpp" |
23 |
douglas |
464 |
|
24 |
douglas |
470 |
class DecentralizedMedia : public waf::Server |
25 |
douglas |
464 |
{ |
26 |
douglas |
469 |
public: |
27 |
douglas |
464 |
BeepRemote bmp; |
28 |
douglas |
469 |
private: |
29 |
douglas |
541 |
_R<api::Thread> block; |
30 |
|
|
_R<api::Process> process; |
31 |
|
|
mutable _R<dbi::Connection> connection; |
32 |
douglas |
534 |
const ext::RedBlackSet<cse::String>& extensions; |
33 |
douglas |
540 |
mta::ReaderWriterLock sharesLock; |
34 |
douglas |
541 |
ext::RedBlackMap<cse::String, _R<Share> > sharesByPath; |
35 |
|
|
ext::RedBlackMap<api::Address, ext::RedBlackMap<cse::String, _R<Share> > > sharesByHost; |
36 |
douglas |
534 |
void Media(ios::Reader& media, const api::Address& host = api::InternetAddress()); |
37 |
douglas |
541 |
void Media(const _R<xml::Node>& folder, const api::Path& path, const api::Path& root); |
38 |
douglas |
469 |
int Destroy() { return process->Join(); } |
39 |
douglas |
470 |
protected: |
40 |
douglas |
471 |
virtual void Process(const net::Http::Request& request, net::Http::Response& response); |
41 |
douglas |
469 |
public: |
42 |
douglas |
534 |
DecentralizedMedia(const ext::RedBlackSet<cse::String>& extensions, const ext::RedBlackSet<api::Path>& locals); |
43 |
douglas |
471 |
virtual ~DecentralizedMedia(); |
44 |
douglas |
534 |
_L<cse::String> GetArtists() const; |
45 |
|
|
_L<cse::String> GetTitles() const; |
46 |
|
|
_L<cse::String> GetAlbums() const; |
47 |
|
|
_L<cse::String> GetGenres() const; |
48 |
douglas |
492 |
_L<MediaFolder> GetFolders() const; |
49 |
douglas |
469 |
}; |
50 |
|
|
|
51 |
douglas |
471 |
#endif//_DecentralizedMedia_hpp_ |