summaryrefslogtreecommitdiff
path: root/extdata.c
blob: 01107c13e19679d017f87390279baed4d1f4793e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/*
 * GraphLCD plugin for the Video Disk Recorder
 *
 * extdata.c - external data sent via SVDRP
 *
 * This file is released under the GNU General Public License. Refer
 * to the COPYING file distributed with this package.
 *
 * (c) 2011      Wolfgang Astleitner <mrwastl AT users sourceforge net>
 */

#include "extdata.h"

#include <vdr/tools.h>

#include <stdio.h>
cExtData * cExtData::mExtDataInstance = NULL;

cExtData * cExtData::GetExtData(void) {
    if (mExtDataInstance == NULL) {
        mExtDataInstance = new cExtData();
    }
    return mExtDataInstance;
}


void cExtData::ReleaseExtData(void) {
    delete mExtDataInstance;
    mExtDataInstance = NULL;
}


cExtData::~cExtData(void) {
    data.clear();
    expData.clear();
}


bool cExtData::Set(std::string key, std::string value, uint32_t expire) {
    if (mExtDataInstance == NULL) return false; // paranoia check

    data[key] = value;
    
    if (expire > 0) {
        expData[key] = cTimeMs::Now() + (expire * 1000);
    } else {
        expData.erase(key); // just in case of an old expiration entry for key         
    }
    return true;
}


bool cExtData::Unset(std::string key) {
    if (mExtDataInstance == NULL) return false; // paranoia check

    expData.erase(key); // ignore result;
    return ( (data.erase(key) > 0) ? true : false );
}


bool cExtData::IsSet(std::string key) {
    std::string ret = Get(key);
    return ( (ret != "") ? true : false );
}


std::string cExtData::Get(std::string key) {
    if (mExtDataInstance == NULL) return ""; // paranoia check

    it = data.find(key);
    if ( it != data.end() ) {
        expDataIt = expData.find(key);
        if ( expDataIt != expData.end() ) {
            uint64_t expts = (*expDataIt).second;
            if ( cTimeMs::Now() > expts ) {
                expData.erase(key);
                data.erase(key);
                return "";
            } else {
                return (*it).second;
            }
        } else {
            return (*it).second;
        }
    } else {
        return "";
    }
}