summaryrefslogtreecommitdiff
path: root/vdr-vdrmanager/helpers.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'vdr-vdrmanager/helpers.cpp')
-rw-r--r--vdr-vdrmanager/helpers.cpp84
1 files changed, 80 insertions, 4 deletions
diff --git a/vdr-vdrmanager/helpers.cpp b/vdr-vdrmanager/helpers.cpp
index 7dcef54..80721f3 100644
--- a/vdr-vdrmanager/helpers.cpp
+++ b/vdr-vdrmanager/helpers.cpp
@@ -709,10 +709,6 @@ string cHelpers::ToText(cRecording * recording) {
}
}
- result += ":";
- //Feature #1319
- result += recording->Name();
-
result += "\r\n";
return result;
}
@@ -1070,6 +1066,86 @@ int cHelpers::RecordingLengthInSeconds(cRecording* recording) {
return Duration(recording) * 60;
}
+/** Compress a STL string using zlib with given compression level and return
+ * the binary data. */
+string cHelpers::compress_string(const string& str, int compressionlevel) {
+ z_stream zs; // z_stream is zlib's control structure
+ memset(&zs, 0, sizeof(zs));
+
+ if (deflateInit(&zs, compressionlevel) != Z_OK)
+ throw(runtime_error("deflateInit failed while compressing."));
+
+ zs.next_in = (Bytef*) str.data();
+ zs.avail_in = str.size(); // set the z_stream's input
+
+ int ret;
+ char outbuffer[32768];
+ string outstring;
+
+// retrieve the compressed bytes blockwise
+ do {
+ zs.next_out = reinterpret_cast<Bytef*>(outbuffer);
+ zs.avail_out = sizeof(outbuffer);
+
+ ret = deflate(&zs, Z_FINISH);
+
+ if (outstring.size() < zs.total_out) {
+ // append the block to the output string
+ outstring.append(outbuffer, zs.total_out - outstring.size());
+ }
+ } while (ret == Z_OK);
+
+ deflateEnd(&zs);
+
+ if (ret != Z_STREAM_END) { // an error occurred that was not EOF
+ ostringstream oss;
+ oss << "Exception during zlib compression: (" << ret << ") " << zs.msg;
+ throw(runtime_error(oss.str()));
+ }
+
+ return outstring;
+}
+
+/** Decompress an STL string using zlib and return the original data. */
+string cHelpers::decompress_string(const string& str) {
+ z_stream zs; // z_stream is zlib's control structure
+ memset(&zs, 0, sizeof(zs));
+
+ if (inflateInit(&zs) != Z_OK)
+ throw(runtime_error("inflateInit failed while decompressing."));
+
+ zs.next_in = (Bytef*) str.data();
+ zs.avail_in = str.size();
+
+ int ret;
+ char outbuffer[32768];
+ string outstring;
+
+// get the decompressed bytes blockwise using repeated calls to inflate
+ do {
+ zs.next_out = reinterpret_cast<Bytef*>(outbuffer);
+ zs.avail_out = sizeof(outbuffer);
+
+ ret = inflate(&zs, 0);
+
+ if (outstring.size() < zs.total_out) {
+ outstring.append(outbuffer, zs.total_out - outstring.size());
+ }
+
+ } while (ret == Z_OK);
+
+ inflateEnd(&zs);
+
+ if (ret != Z_STREAM_END) { // an error occurred that was not EOF
+ ostringstream oss;
+ oss << "Exception during zlib decompression: (" << ret << ") "
+ << zs.msg;
+ throw(runtime_error(oss.str()));
+ }
+
+ return outstring;
+}
+
//These three methodes were stolen from vdr-restfulapi project. Thanks!
std::queue<int> cHelpers::ConvertToBinary(int v) {
int b;