File indexing completed on 2024-03-24 04:56:41
0001 /* 0002 This file belong to the KMPlayer project, a movie player plugin for Konqueror 0003 SPDX-FileCopyrightText: 2009 Koos Vriezen <koos.vriezen@gmail.com> 0004 0005 SPDX-License-Identifier: LGPL-2.0-or-later 0006 */ 0007 0008 #ifndef _KMPLAYER_LISTS_H_ 0009 #define _KMPLAYER_LISTS_H_ 0010 0011 #include <config-kmplayer.h> 0012 0013 #include <QProcess> 0014 0015 #include "kmplayerplaylist.h" 0016 #include "kmplayerpartbase.h" 0017 0018 static const short id_node_recent_document = 31; 0019 static const short id_node_recent_node = 32; 0020 static const short id_node_disk_document = 33; 0021 static const short id_node_disk_node = 34; 0022 static const short id_node_gen_generator = 36; 0023 static const short id_node_gen_input = 37; 0024 static const short id_node_gen_uri = 38; 0025 static const short id_node_gen_literal = 39; 0026 static const short id_node_gen_ask = 40; 0027 static const short id_node_gen_title = 41; 0028 static const short id_node_gen_description = 42; 0029 static const short id_node_gen_process = 43; 0030 static const short id_node_gen_program = 44; 0031 static const short id_node_gen_argument = 45; 0032 static const short id_node_gen_predefined = 46; 0033 static const short id_node_gen_document = 47; 0034 static const short id_node_gen_http_get = 48; 0035 static const short id_node_gen_http_key_value = 49; 0036 static const short id_node_gen_sequence = 50; 0037 0038 class QTextStream; 0039 class KMPlayerApp; 0040 0041 class ListsSource : public KMPlayer::URLSource 0042 { 0043 public: 0044 ListsSource (KMPlayer::PartBase * p) 0045 : KMPlayer::URLSource (p, QUrl ("lists://")) {} 0046 void play (KMPlayer::Mrl *) override; 0047 void activate () override; 0048 QString prettyName () override; 0049 }; 0050 0051 class FileDocument : public KMPlayer::SourceDocument 0052 { 0053 public: 0054 FileDocument (short id, const QString&, KMPlayer::Source *source = nullptr); 0055 KMPlayer::Node *childFromTag (const QString &tag) override; 0056 void readFromFile (const QString &file); 0057 void writeToFile (const QString &file); 0058 void sync (const QString & file); 0059 unsigned int load_tree_version; 0060 }; 0061 0062 class Recents : public FileDocument 0063 { 0064 public: 0065 Recents (KMPlayerApp *a); 0066 void defer () override; 0067 void activate () override; 0068 void message (KMPlayer::MessageType msg, void *content=nullptr) override; 0069 KMPlayer::Node *childFromTag (const QString &tag) override; 0070 const char *nodeName () const override { return "playlist"; } 0071 KMPlayerApp *app; 0072 }; 0073 0074 class Recent : public KMPlayer::Mrl 0075 { 0076 public: 0077 Recent (KMPlayer::NodePtr & doc, KMPlayerApp *a, const QString &url = QString()); 0078 void activate () override; 0079 void closed () override; 0080 const char *nodeName () const override { return "item"; } 0081 KMPlayerApp *app; 0082 }; 0083 0084 class Group 0085 : public KMPlayer::Element, public KMPlayer::PlaylistRole 0086 { 0087 public: 0088 Group (KMPlayer::NodePtr &doc, KMPlayerApp *a, const QString &pn=QString()); 0089 KMPlayer::Node *childFromTag (const QString &tag) override; 0090 void defer () override {} // TODO lazy loading of largish sub trees 0091 void closed () override; 0092 void *role (KMPlayer::RoleType msg, void *content=nullptr) override; 0093 const char *nodeName () const override { return "group"; } 0094 KMPlayerApp *app; 0095 }; 0096 0097 class Playlist : public FileDocument 0098 { 0099 public: 0100 Playlist (KMPlayerApp *a, KMPlayer::Source *s, bool plmod = false); 0101 void message (KMPlayer::MessageType msg, void *content=nullptr) override; 0102 void defer () override; 0103 void activate () override; 0104 KMPlayer::Node *childFromTag (const QString &tag) override; 0105 const char * nodeName () const override { return "playlist"; } 0106 KMPlayerApp *app; 0107 bool playmode; 0108 }; 0109 0110 class PlaylistItemBase : public KMPlayer::Mrl 0111 { 0112 public: 0113 PlaylistItemBase (KMPlayer::NodePtr &d, short id, KMPlayerApp *a, bool pm); 0114 void activate () override; 0115 void closed () override; 0116 KMPlayerApp *app; 0117 bool playmode; 0118 }; 0119 0120 class PlaylistItem : public PlaylistItemBase 0121 { 0122 public: 0123 PlaylistItem (KMPlayer::NodePtr & doc, KMPlayerApp *a, bool playmode, const QString &url = QString()); 0124 void closed () override; 0125 void begin () override; 0126 void setNodeName (const QString&) override; 0127 const char *nodeName () const override { return "item"; } 0128 }; 0129 0130 class PlaylistGroup 0131 : public KMPlayer::Element, public KMPlayer::PlaylistRole 0132 { 0133 public: 0134 PlaylistGroup (KMPlayer::NodePtr &doc, KMPlayerApp *a, const QString &pn); 0135 PlaylistGroup (KMPlayer::NodePtr &doc, KMPlayerApp *a, bool plmode=false); 0136 KMPlayer::Node *childFromTag (const QString &tag) override; 0137 void closed () override; 0138 void *role (KMPlayer::RoleType msg, void *content=nullptr) override; 0139 void setNodeName (const QString&) override; 0140 const char *nodeName () const override { return "group"; } 0141 KMPlayerApp *app; 0142 bool playmode; 0143 }; 0144 0145 class HtmlObject : public PlaylistItemBase 0146 { 0147 public: 0148 HtmlObject (KMPlayer::NodePtr &doc, KMPlayerApp *a, bool playmode); 0149 void activate () override; 0150 void closed () override; 0151 KMPlayer::Node *childFromTag (const QString &tag) override; 0152 const char *nodeName () const override { return "object"; } 0153 }; 0154 0155 class Generator : public QObject, public FileDocument 0156 { 0157 Q_OBJECT 0158 public: 0159 Generator (KMPlayerApp *a); 0160 void activate () override; 0161 void begin () override; 0162 void deactivate () override; 0163 void message (KMPlayer::MessageType msg, void *content=nullptr) override; 0164 KMPlayer::Node *childFromTag (const QString &tag) override; 0165 const char *nodeName () const override { return "generator"; } 0166 0167 private Q_SLOTS: 0168 void started (); 0169 void error (QProcess::ProcessError err); 0170 void readyRead (); 0171 void finished (); 0172 0173 private: 0174 struct ProgramCmd 0175 { 0176 QString program; 0177 QStringList args; 0178 bool isEmpty() const { return program.isEmpty(); } 0179 QString toString() const; 0180 }; 0181 ProgramCmd genReadProgramCmd (KMPlayer::Node *n); 0182 QString genReadInput (KMPlayer::Node *n); 0183 QString genReadString (KMPlayer::Node *n); 0184 QString genReadUriGet (KMPlayer::Node *n); 0185 QString genReadAsk (KMPlayer::Node *n); 0186 0187 KMPlayerApp *app; 0188 QProcess *qprocess; 0189 QTextStream *data; 0190 ProgramCmd process; 0191 QString buffer; 0192 bool canceled; 0193 bool quote; 0194 }; 0195 0196 class GeneratorElement : public KMPlayer::Element 0197 { 0198 public: 0199 GeneratorElement (KMPlayer::NodePtr &doc, const QString &t, short id) 0200 : KMPlayer::Element (doc, id), tag (t.toUtf8 ()) {} 0201 KMPlayer::Node *childFromTag (const QString &tag) override; 0202 const char *nodeName () const override { return tag.constData (); } 0203 QByteArray tag; 0204 }; 0205 0206 #endif