* New upstream release.
[debian/teleschorsch.git] / main.h
1 /** \mainpage Teleschorsch
2  *
3  * Created by <a href="http://www.toastfreeware.priv.at/">toastfreeware</a>.
4  */
5
6 #ifndef MAIN_H
7 #define MAIN_H
8 #include <QtCore>
9 #ifndef QT_4_1_COMPATIBLE
10 #include "ui_maindialog.h"
11 #else
12 #include "ui_maindialog_4.1.h"
13 #endif
14
15 // Types
16 // =====
17
18 struct Channel {
19         QString name;
20         QString fullName;
21         QString staticUrl;
22         QString player;
23 };
24
25
26 typedef QVector<Channel> ChannelVec;
27
28
29 /// Contains information about the configuration file locations
30 struct ConfigInfo {
31         QString home;               ///< environment variable $HOME (e.g. /home/gregoa) or empty if $HOME does not exist
32         QString systemConfigFile;   ///< system configuration file name (/etc/teleschorschrc)
33         QString userConfigFile;     ///< user configuration file name (e.g. /home/gregoa/.teleschorschrc)
34         QString usedConfigFile;     ///< currently used config file (e.g. /home/gregoa/.teleschorschrc)
35 };
36
37
38 /// Represents a media player, e.g. VLC.
39 struct Player {
40         /// Name of the player, e.g. VLC.
41         QString name;
42
43         /// \brief (Optionally) play and (optionally) save an URL.
44         /// \param[in] urlToPlay specifies what should be played or saved.
45         /// \param[in] offset where to start playing in the stream
46         /// \param[in] saveOnly if the URL should _not_ be played (used to only save it).
47         /// \param[in] saveFileName If this parameter is not empty, the file is (additionally) saved to the local file.
48         /// \param[out] errorMsg if an error occurs, this parameter contains a (hopefully :-) ) easy to understand
49         ///             error message in the current language
50         /// \return true if the run was successful. If saveOnly is true and saveFileName is empty, nothing is done and true is returned.
51         virtual bool play(QString urlToPlay, QTime offset, bool saveOnly, QString saveFileName, QString& errorMsg) = 0;
52         virtual ~Player() {}
53 };
54
55
56 struct VlcPlayer: public Player {
57         VlcPlayer();
58         virtual bool play(QString urlToPlay, QTime offset, bool saveOnly, QString saveFileName, QString& errorMsg);
59 };
60
61
62 struct MPlayer: public Player {
63         MPlayer();
64         ~MPlayer();
65         QProcess* download;
66         #ifndef QT_4_1_COMPATIBLE
67         QProcess* tee;
68         QProcess* player;
69         #else
70         QProcess* shell;
71         #endif
72         QString tempFile;
73         void stopProcesses();
74         virtual bool play(QString urlToPlay, QTime offset, bool saveOnly, QString saveFileName, QString& errorMsg);
75 };
76
77
78
79 // Functions
80 // =========
81
82 /// Determine ConfigInfo file names
83 void initConfigInfo(ConfigInfo& configInfo);
84
85
86 /// Adds the content of the specified config file to the channel vector
87 bool addConfig(const QString& fileName, ChannelVec& cv, QString& error);
88
89
90 /// \brief Read channel vector
91 ///
92 /// In an error case, the error message is returned.
93 QString readChannelVec(const ConfigInfo& configInfo, ChannelVec& channelVec);
94
95
96
97 // MainDialog
98 // ==========
99
100 /// Represents the main dialog.
101 class MainDialog: public QDialog, private Ui::MainDialog {
102 Q_OBJECT
103
104 private:
105         ChannelVec channelVec;
106         ConfigInfo configInfo;
107         Player* player;
108
109 public:
110         /// Constructor
111         MainDialog(QWidget *parent = 0);
112         virtual ~MainDialog();
113
114 private:
115         /// \brief Starts(plays) and/or saves the selected stream.
116         ///
117         /// It is used to be called by startAction(), startSaveAction() and saveAction().
118         /// \return false if player did not start successfully (true if the user aborts).
119         bool play(bool play, bool save);
120
121 public slots:
122         /// Shows a dialog where the user can edit the config file.
123         void editOptions();
124
125         /// Updates the "QListWidget" in the user interface that shows the cannel list.
126         void updateLwChannels();
127
128         /// \brief Starts (plays) the selected stream.
129         /// \return true if player starts successfully.
130         bool startAction();
131
132         /// \brief Starts (plays) and saves the selected stream.
133         /// \return true if player starts successfully.
134         bool startSaveAction();
135
136         /// \brief Saves the selected stream.
137         /// \return true if player starts successfully - the current
138         /// implementation lets the player save the stream.
139         bool saveAction();
140 };
141
142
143 void appendPlayerOptions(const QString& player, QTime offset, QStringList& arguments);
144
145
146 #endif