summaryrefslogtreecommitdiff
path: root/PLUGINS/src/pictures/entry.c
diff options
context:
space:
mode:
authorKlaus Schmidinger <kls (at) cadsoft (dot) de>2008-01-13 18:00:00 +0100
committerKlaus Schmidinger <kls (at) cadsoft (dot) de>2008-01-13 18:00:00 +0100
commitfc4c8740a72e6c7cea5a001e19fdacb63c3cc538 (patch)
tree6ab0ae16b8d588e34d86f8a1a69c101ce8ba2809 /PLUGINS/src/pictures/entry.c
parent29b2d48bb53df75f1cb978e72bc709a6658d6e5c (diff)
downloadvdr-patch-lnbsharing-fc4c8740a72e6c7cea5a001e19fdacb63c3cc538.tar.gz
vdr-patch-lnbsharing-fc4c8740a72e6c7cea5a001e19fdacb63c3cc538.tar.bz2
Version 1.5.13vdr-1.5.13
- Fixed the declaration of cSubtitleObject::Decode8BppCodeString() (thanks to Gregoire Favre). - The new setup option "Miscellaneous/Emergency exit" can be used to turn off the automatic restart of VDR in case a recording fails for some reason. - The kInfo key is now propagated to any open menu, so that it can react to it in a context sensitive manner (suggested by Andreas Brugger). If there is no menu open it will show the info of the current broadcast or replay. - cTimeMs now uses the monotonic clock, if available (thanks to Petri Hintukainen). - Fixed cVector::Clear() and cStringList::Clear(). - Added cString::Truncate(). - Fixed the "i18n:" target in the "newplugin" script, so that it can create the initial *.pot file. - Fixed handling the '-l' option. - Fixed error handling in cCuttingThread::Action() (thanks to Udo Richter). - Fixed a loss of the date display in the "classic" skin's main menu (reported by Andreas Brugger). - Added a missing setting of lastFreeMB in cMenuMain::Update() (reported by Andreas Brugger). - Added '-Wno-parentheses' to the compiler options in order to avoid silly compiler warnings for expressions like 'a || b && c', where GCC 4.3 wants to force the programmer to write 'a || (b && c)', while everybody knows that '&&' links stronger than '||' (reported by Tobias Grimm). - Updated the Hungarian language texts (thanks to István Füley). - Fixed displaying weekday names in the Schedule menu if the system uses UTF-8 (reported by Jiri Dobry). - The new plugin "pictures" implements a simple picture viewer. See PLUGINS/src/pictures/README for details. - The automatic shutdown is now suppressed if the remote control is currently disabled (suggested by Helmut Auer, implemented by Udo Richter). - Added a section about "Logging" to PLUGINS.html (suggested by Torsten Kunkel). - Enhanced the SVDRP command CLRE to allow clearing the EPG data of a particular channel (thanks to Benjamin Hess).
Diffstat (limited to 'PLUGINS/src/pictures/entry.c')
-rw-r--r--PLUGINS/src/pictures/entry.c144
1 files changed, 144 insertions, 0 deletions
diff --git a/PLUGINS/src/pictures/entry.c b/PLUGINS/src/pictures/entry.c
new file mode 100644
index 0000000..006a359
--- /dev/null
+++ b/PLUGINS/src/pictures/entry.c
@@ -0,0 +1,144 @@
+/*
+ * entry.c: Data structure to handle still pictures
+ *
+ * See the README file for copyright information and how to reach the author.
+ *
+ * $Id: entry.c 1.1 2008/01/06 09:52:41 kls Exp $
+ */
+
+#include "entry.h"
+
+cPictureEntry::cPictureEntry(const char *Name, const cPictureEntry *Parent, bool IsDirectory)
+{
+ name = strdup(Name);
+ parent = Parent;
+ isDirectory = IsDirectory;
+ entries = NULL;
+}
+
+cPictureEntry::~cPictureEntry()
+{
+ free(name);
+ delete entries;
+}
+
+int cPictureEntry::Compare(const cListObject &ListObject) const
+{
+ cPictureEntry *p = (cPictureEntry *)&ListObject;
+ if (IsDirectory() && !p->IsDirectory())
+ return -1;
+ if (!IsDirectory() && p->IsDirectory())
+ return +1;
+ if (IsDirectory())
+ return strcoll(name, p->name);
+ else
+ return strcmp(name, p->name); // correctly sorts dsc01234.jpg and dsc01234a.jpg in case pictures have been "squeezed in"
+}
+
+cString cPictureEntry::Path(void) const
+{
+ return parent ? AddDirectory(parent->Path(), name) : name;
+}
+
+void cPictureEntry::Load(void) const
+{
+ if (isDirectory && !entries) {
+ cString Directory = Path();
+ cReadDir d(Directory);
+ if (d.Ok()) {
+ struct dirent *e;
+ while ((e = d.Next()) != NULL) {
+ if (strcmp(e->d_name, ".") && strcmp(e->d_name, "..")) {
+ struct stat ds;
+ if (stat(AddDirectory(Directory, e->d_name), &ds) == 0) {
+ if (!entries)
+ entries = new cList<cPictureEntry>;
+ entries->Add(new cPictureEntry(e->d_name, this, S_ISDIR(ds.st_mode)));
+ }
+ }
+ }
+ if (entries)
+ entries->Sort();
+ }
+ else
+ LOG_ERROR_STR(*Directory);
+ }
+}
+
+const cList<cPictureEntry> *cPictureEntry::Entries(void) const
+{
+ Load();
+ return entries;
+}
+
+const cPictureEntry *cPictureEntry::FirstPicture(void) const
+{
+ Load();
+ if (entries) {
+ for (cPictureEntry *pe = entries->First(); pe; pe = entries->Next(pe)) {
+ if (pe->IsDirectory()) {
+ const cPictureEntry *p = pe->FirstPicture();
+ if (p)
+ return p;
+ }
+ else
+ return pe;
+ }
+ }
+ return NULL;
+}
+
+const cPictureEntry *cPictureEntry::LastPicture(void) const
+{
+ Load();
+ if (entries) {
+ for (cPictureEntry *pe = entries->Last(); pe; pe = entries->Prev(pe)) {
+ if (pe->IsDirectory()) {
+ const cPictureEntry *p = pe->LastPicture();
+ if (p)
+ return p;
+ }
+ else
+ return pe;
+ }
+ }
+ return NULL;
+}
+
+const cPictureEntry *cPictureEntry::PrevPicture(const cPictureEntry *This) const
+{
+ if (This) {
+ const cPictureEntry *pe = (cPictureEntry *)entries->Prev(This);
+ if (pe) {
+ if (pe->IsDirectory()) {
+ const cPictureEntry *p = pe->LastPicture();
+ if (p)
+ return p;
+ return PrevPicture(pe);
+ }
+ return pe;
+ }
+ }
+ if (parent)
+ return parent->PrevPicture(this);
+ return NULL;
+}
+
+const cPictureEntry *cPictureEntry::NextPicture(const cPictureEntry *This) const
+{
+ if (This) {
+ cPictureEntry *pe = (cPictureEntry *)entries->Next(This);
+ if (pe) {
+ if (pe->IsDirectory()) {
+ const cPictureEntry *p = pe->FirstPicture();
+ if (p)
+ return p;
+ return NextPicture(pe);
+ }
+ return pe;
+ }
+ }
+ if (parent)
+ return parent->NextPicture(this);
+ return NULL;
+}