[svn-upgrade] Integrating new upstream version, teleschorsch (0.0.7) upstream/0.0.7
authorgregor herrmann <gregoa@debian.org>
Sun, 4 Mar 2007 02:09:26 +0000 (02:09 -0000)
committergregor herrmann <gregoa@debian.org>
Sun, 4 Mar 2007 02:09:26 +0000 (02:09 -0000)
main.cpp
maindialog.ui
options.cpp
options.h
options.ui
qteleschorsch.pro
teleschorschrc

index a968403c5e7a26b4811856047b06f3821df9557c..0c72f6d402d75f7d1e116ef820a5f8392ec79866 100644 (file)
--- a/main.cpp
+++ b/main.cpp
@@ -101,51 +101,114 @@ QString readChannelVec(const ConfigInfo& configInfo, ChannelVec& channelVec) {
 }
 
 
-QString substitudeVar(const QString& var, QDate date) {
-       if (var == "d") return date.toString("dd");
-       if (var == "m") return date.toString("MM");
-       if (var == "y") return date.toString("yy");
-       if (var == "Y") return date.toString("yyyy");
+/// \brief Finds a value for a specified variable and appends it to a string.
+///
+/// \param[in]  var    variable to substitute. These are the possibilities:
+///                    - d  day of month (01-31)
+///                    - m  month (01-12)
+///                    - y  year (last two digits)
+///                    - Y  year (4 digits)
+///                    - dow_DE  day of week in German (Montag, ...)
+/// \param[in]  date   date that should be used when replacing the date dependend variables
+/// \param[out] result The determined value of the variable is _appended_.
+/// \param[out] error  error message in error cases
+/// \returns true in case of success.
+bool substituteVar(const QString& var, QDate date, QString& result, QString& errorMsg) {
+       if (var == "d") {result += date.toString("dd"); return true;}
+       if (var == "m") {result += date.toString("MM"); return true;}
+       if (var == "y") {result += date.toString("yy"); return true;}
+       if (var == "Y") {result += date.toString("yyyy"); return true;}
        if (var == "dow_DE") {
                int dow = date.dayOfWeek() - 1;
-               static const char dow_de[][20] = {"Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"};
-               if (dow >= 0 && dow < 7) return dow_de[dow];
+               static const char dow_de[][16] = {"Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"};
+               if (dow >= 0 && dow < 7) {result += dow_de[dow]; return true;}
        }
-       return "{no match}"; // maybe do some error handling here...
+       errorMsg = QObject::tr("No match for variable %1").arg(var);
+       return false;
 }
 
 
-QString substitudeStaticUrl(const QString& staticUrl, QDate date) {
-       QString result;
+/// \brief Finds a string, where variables of the form <code>${var}</code> are substituted in input (normally a staticUrl).
+///
+/// - ${d}  day of month (01-31)
+/// - ${m}  month (01-12)
+/// - ${y}  year (last two digits)
+/// - ${Y}  year (4 digits)
+/// - ${dow_DE}  day of week in German (Montag, ...)
+///
+/// \param[in]  input  string where the substitution should be done.
+/// \param[in]  date   date that should be used when replacing the date dependend variables
+/// \param[out] result The result string with the variables substituted is appended here
+/// \param[out] error  error message in error cases
+/// \returns true in case of success.
+bool substituteVars(const QString& input, QDate date, QString& result, QString& errorMsg) {
        int pos = 0;
        int lastPos = 0;
        while (pos != -1) {
-               pos = staticUrl.indexOf("${", lastPos);
-               if (pos == -1) result += staticUrl.mid(lastPos);
-               else result += staticUrl.mid(lastPos, pos-lastPos);
+               pos = input.indexOf("${", lastPos);
+               if (pos == -1) result += input.mid(lastPos);
+               else result += input.mid(lastPos, pos-lastPos);
                lastPos = pos;
                
                // Match?
                if (pos != -1) {
-                       pos = staticUrl.indexOf("}", lastPos);
-                       if (pos == -1) return ""; // ${ not closed with }. Some day we should report the error somehow...
-                       QString var = staticUrl.mid(lastPos+2, pos-lastPos-2);
-                       result += substitudeVar(var, date);
+                       pos = input.indexOf("}", lastPos);
+                       if (pos == -1) {
+                               errorMsg = QObject::tr("${ not closed with }.");
+                               return false;
+                       }
+                       QString var = input.mid(lastPos+2, pos-lastPos-2);
+                       if (!substituteVar(var, date, result, errorMsg)) return false;
                        lastPos = pos+1;
                }
        }
+       return true;
+}
+
+
+/// \brief Calls the /bin/sh shell with the specified command and appends the result to a string variable.
+///
+/// \param[in]  command command to execute with <code>/bin/sh -c "command"</code>
+/// \param[out] result  The result string where the output is appended at.
+/// \param[out] error   error message in error cases
+/// \returns true in case of success.
+bool executeShellCommand(const QString& command, QString& result, QString& errorMsg) {
+       QProcess evalUrl(0);
+       QString cmd = "/bin/sh -c \"" + command + "\"";
+       evalUrl.start(cmd);
+       if (evalUrl.waitForFinished(3000)) {
+               QByteArray newResult = evalUrl.readAllStandardOutput();
+               if (result != newResult) {result += newResult.trimmed();}
+               return true;
+       } 
+       errorMsg = QObject::tr("Shell command executed when substituting URL (%1) timed out.").arg(command);
+       return false;
+}
+
+
+/// \brief Evaluates the staticUrl
+///
+/// - Variables of the form ${var} are substituted according the the function ::substituteVars
+/// - If the staticUrl is enclosed by backticks it is evaluated by a shell command (after the substitution mentioned above)
+///
+/// \param[in]  staticUrl string where the substitution should be done.
+/// \param[in]  date      date that should be used when replacing the date dependend variables
+/// \param[out] result    The result string is appended here
+/// \param[out] error     error message in error cases
+/// \returns true in case of success.
+bool evaluateStaticUrl(const QString& staticUrl, QDate date, QString& result, QString& errorMsg) {
+       QString subst;
+       bool success = substituteVars(staticUrl, date, subst, errorMsg);
+       if (!success) return false;
 
        // Evaluate staticUrl - it might be dynamic despite its name :-)
-       if (result.left(1) == "`" && result.right(1) == "`") {
-               QProcess evalUrl(0);
-               QString command = "/bin/sh -c \"echo " + result + "\"";
-               evalUrl.start(command);
-               if (evalUrl.waitForFinished()) {
-                       QByteArray newResult = evalUrl.readAllStandardOutput();
-                       if (result != newResult) {result = newResult.trimmed();}
-               }
-       }
-       return result;
+       QString cmdres;
+       if (subst.left(1) == "`" && subst.right(1) == "`") {
+               success = executeShellCommand(subst.mid(1, subst.size()-2), cmdres, errorMsg);
+               if (!success) return false;
+               result = cmdres;
+       } else result = subst;
+       return true;
 }
 
 
@@ -206,13 +269,19 @@ bool MainDialog::startAction() {
        if (row > 0) {
                Channel channel = channelVec[row];
                QDate date = calDate->selectedDate();
+               QString substUrl;
+               QString errorMsg;
+               if (!evaluateStaticUrl(channel.staticUrl, date, substUrl, errorMsg)) {
+                       QMessageBox::warning(this, tr("Problem when substituting URL"), errorMsg);
+                       return false;
+               }
                QStringList arguments;
-               arguments.append(substitudeStaticUrl(channel.staticUrl, date));
+               arguments.append(substUrl);
                appendPlayerOffsetOption(channel.player, teOffset->time(), arguments);
                QProcess player(this);
                qDebug() << channel.player << arguments;
                player.start(channel.player, arguments);
-               player.waitForFinished();
+               player.waitForFinished(-1);
                return true;
        }
        return false;
index 18618f4fc3880b16105fce8d92706c366d4f440c..847e519770da6854eb2dc5c66443ece216d062f4 100644 (file)
@@ -5,8 +5,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>400</width>
-    <height>339</height>
+    <width>672</width>
+    <height>508</height>
    </rect>
   </property>
   <property name="windowTitle" >
         </widget>
        </item>
        <item>
-        <widget class="QListWidget" name="lwChannels" />
+        <widget class="QListWidget" name="lwChannels" >
+         <property name="minimumSize" >
+          <size>
+           <width>0</width>
+           <height>0</height>
+          </size>
+         </property>
+         <property name="baseSize" >
+          <size>
+           <width>0</width>
+           <height>0</height>
+          </size>
+         </property>
+        </widget>
        </item>
       </layout>
      </item>
        </item>
        <item>
         <widget class="QCalendarWidget" name="calDate" >
+         <property name="sizePolicy" >
+          <sizepolicy>
+           <hsizetype>0</hsizetype>
+           <vsizetype>5</vsizetype>
+           <horstretch>0</horstretch>
+           <verstretch>0</verstretch>
+          </sizepolicy>
+         </property>
          <property name="firstDayOfWeek" >
           <enum>Qt::Monday</enum>
          </property>
          </property>
         </widget>
        </item>
+       <item>
+        <spacer>
+         <property name="orientation" >
+          <enum>Qt::Vertical</enum>
+         </property>
+         <property name="sizeHint" >
+          <size>
+           <width>20</width>
+           <height>1000</height>
+          </size>
+         </property>
+        </spacer>
+       </item>
       </layout>
      </item>
     </layout>
index 97abf6d3ed49000708860d0faee6ff701f92a279..4606913a3720cfa906977313dd2331dc4a07b47e 100644 (file)
@@ -11,7 +11,7 @@ OptionsDialog::OptionsDialog(QWidget *parent): QDialog(parent) {
        helpText.append(tr("<li>${d}: day of month (01-31)</li>"));
        helpText.append(tr("<li>${m}: month (01-12)</li>"));
        helpText.append(tr("<li>${y}: year (last two digits)</li>"));
-       helpText.append(tr("<li>${Y}: year (4 digits}</li>"));
+       helpText.append(tr("<li>${Y}: year (4 digits)</li>"));
        helpText.append(tr("<li>${dow_DE}: day of week in German (Montag, ...)</li>"));
        helpText.append(tr("</ul>"));
        labHelp->setText(helpText);
@@ -35,9 +35,11 @@ bool OptionsDialog::exec(const QString& configFile) {
                }
                QTextStream in(&configFileUser);
                while (!in.atEnd()) teIni->append(in.readLine());
+               teIni->moveCursor(QTextCursor::Start);
        }
        configFileUser.close();
        if (QDialog::exec() == QDialog::Accepted) {
+               if (!teIni->document()->isModified()) return false;
                // Save
                if (!configFileUser.open(QIODevice::WriteOnly | QIODevice::Text)) {
                        QMessageBox::warning(this, tr("File not writeable"), tr("The config file %1 is not writeable.").arg(configFile));
index 924a74e1d688cc4a49674902ec8239a2efaf2927..a476cb0a91c07898d5b6242509a3bb115d8857e0 100644 (file)
--- a/options.h
+++ b/options.h
@@ -10,7 +10,7 @@ public:
        /// \brief Shows a dialog where the user can edit the specified configuration file.
        ///
        /// If the file was modified and successfully saved, true is returned, otherwise false.
-       /// The dialog shows error to the user itself.
+       /// The dialog shows errors to the user itself.
        /// \todo First try to save and afterwards save. This would give the user the chance to copy & paste his/her changes.
        /// \param configFile file name with full path to the configuration file to edit.
        bool exec(const QString& configFile);
index d252dd3fd60921fff90be3404d9ca53994699a33..97f19f8dcf1e2680379d0ace5a68143b1bb04c8c 100644 (file)
@@ -5,8 +5,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>400</width>
-    <height>300</height>
+    <width>618</width>
+    <height>480</height>
    </rect>
   </property>
   <property name="windowTitle" >
    </property>
    <item>
     <widget class="QTextEdit" name="teIni" >
+     <property name="minimumSize" >
+      <size>
+       <width>0</width>
+       <height>0</height>
+      </size>
+     </property>
      <property name="lineWrapMode" >
       <enum>QTextEdit::NoWrap</enum>
      </property>
index aec77a064a8512a34b979ba27364522cf7dcbb3e..6d9c0eca10be616b4e0e79298735ea4f9ba71698 100644 (file)
@@ -1,7 +1,7 @@
 TEMPLATE = app
-TARGET = 
-DEPENDPATH += .
-INCLUDEPATH += .
+TARGET = 
+DEPENDPATH += .
+INCLUDEPATH += .
 
 # Input
 FORMS += maindialog.ui options.ui
index 2d9d37388c782e8fadbd11644ed4111124a09754..8b867c0ee6a303642d88595a2498ab19e15694b8 100644 (file)
@@ -71,4 +71,4 @@ PLAYER=vlc
 [ORFoe118]
 FULLNAME=ORF - Ö1 Abendjournal (only current broadcast)
 STATICURL=`wget -q -O- "http://oe1.orf.at/konsole/journal?type=abend" | grep -Eo "mms://stream2\.orf\.at/oe1/demand/abend/.+\.WMA"`
-PLAYER=vlc
+PLAYER=vlc
\ No newline at end of file