1 : // -*- mode: c++; indent-tabs-mode: t -*-
2 :
3 : /** \file
4 : * popcon paths
5 : */
6 :
7 : /*
8 : * Copyright (C) 2005,2006,2007 Enrico Zini <enrico@debian.org>, Peter Rockai <me@mornfall.net>
9 : *
10 : * This program is free software; you can redistribute it and/or modify
11 : * it under the terms of the GNU General Public License as published by
12 : * the Free Software Foundation; either version 2 of the License, or
13 : * (at your option) any later version.
14 : *
15 : * This program is distributed in the hope that it will be useful,
16 : * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 : * GNU General Public License for more details.
19 : *
20 : * You should have received a copy of the GNU General Public License
21 : * along with this program; if not, write to the Free Software
22 : * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 : */
24 :
25 : #include <ept/config.h>
26 : #include <ept/popcon/maint/path.h>
27 :
28 : #include <wibble/sys/fs.h>
29 : #include <wibble/string.h>
30 :
31 : #include <sys/types.h> // getpwuid, stat, mkdir, getuid
32 : #include <sys/stat.h> // stat, mkdir
33 : #include <pwd.h> // getpwuid
34 : #include <unistd.h> // stat, getuid
35 :
36 : using namespace wibble;
37 :
38 : namespace ept {
39 : namespace popcon {
40 :
41 2 : static std::string userdir()
42 : {
43 2 : std::string rcdir;
44 :
45 2 : struct passwd* udata = getpwuid(getuid());
46 2 : rcdir = str::joinpath(udata->pw_dir, ".popcon");
47 :
48 0 : return rcdir;
49 : }
50 :
51 :
52 178 : Path &Path::instance() {
53 178 : if (!s_instance) {
54 1 : s_instance = new Path;
55 1 : instance().m_popconSourceDir = POPCON_DB_DIR;
56 1 : instance().m_popconIndexDir = POPCON_DB_DIR;
57 2 : instance().m_popconUserSourceDir = userdir();
58 2 : instance().m_popconUserIndexDir = userdir();
59 : }
60 178 : return *s_instance;
61 : }
62 :
63 2 : int Path::access( const std::string &s, int m ) {
64 2 : return ::access( s.c_str(), m );
65 : }
66 :
67 49 : time_t Path::timestamp( const std::string& file ) {
68 49 : std::auto_ptr<struct stat> st = wibble::sys::fs::stat(file);
69 90 : return st.get() == NULL ? 0 : st->st_mtime;
70 : }
71 :
72 14 : void Path::setPopconSourceDir( const std::string &s )
73 : {
74 14 : instance().m_popconSourceDir = s;
75 14 : }
76 14 : void Path::setPopconIndexDir( const std::string &s )
77 : {
78 14 : instance().m_popconIndexDir = s;
79 14 : }
80 14 : void Path::setPopconUserSourceDir( const std::string &s )
81 : {
82 14 : instance().m_popconUserSourceDir = s;
83 14 : }
84 14 : void Path::setPopconUserIndexDir( const std::string &s )
85 : {
86 14 : instance().m_popconUserIndexDir = s;
87 14 : }
88 :
89 14 : std::string Path::popconSourceDir() { return instance().m_popconSourceDir; }
90 43 : std::string Path::popconIndexDir() { return instance().m_popconIndexDir; }
91 14 : std::string Path::popconUserSourceDir() { return instance().m_popconUserSourceDir; }
92 47 : std::string Path::popconUserIndexDir() { return instance().m_popconUserIndexDir; }
93 :
94 17 : std::string Path::scores() {
95 17 : return str::joinpath(popconIndexDir(), "scores");
96 : }
97 :
98 17 : std::string Path::scoresIndex() {
99 17 : return str::joinpath(popconIndexDir(), "scores.idx");
100 : }
101 :
102 20 : std::string Path::userScores() {
103 20 : return str::joinpath(popconUserIndexDir(), "scores");
104 : }
105 :
106 20 : std::string Path::userScoresIndex() {
107 20 : return str::joinpath(popconUserIndexDir(), "scores.idx");
108 : }
109 :
110 : Path *Path::s_instance = 0;
111 :
112 : }
113 : }
114 :
115 : // vim:set ts=4 sw=4:
|