File indexing completed on 2023-05-30 11:30:47
0001 /** 0002 * Copyright (C) 2003-2004 Scott Wheeler <wheeler@kde.org> 0003 * 0004 * This program is free software; you can redistribute it and/or modify it under 0005 * the terms of the GNU General Public License as published by the Free Software 0006 * Foundation; either version 2 of the License, or (at your option) any later 0007 * version. 0008 * 0009 * This program is distributed in the hope that it will be useful, but WITHOUT ANY 0010 * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A 0011 * PARTICULAR PURPOSE. See the GNU General Public License for more details. 0012 * 0013 * You should have received a copy of the GNU General Public License along with 0014 * this program. If not, see <http://www.gnu.org/licenses/>. 0015 */ 0016 0017 #include "historyplaylist.h" 0018 0019 #include <QTimer> 0020 0021 #include <KLocalizedString> 0022 0023 #include "collectionlist.h" 0024 #include "playermanager.h" 0025 #include "juk-exception.h" 0026 #include "juk_debug.h" 0027 0028 //////////////////////////////////////////////////////////////////////////////// 0029 // HistoryPlayList public members 0030 //////////////////////////////////////////////////////////////////////////////// 0031 0032 HistoryPlaylist::HistoryPlaylist(PlaylistCollection *collection) : 0033 Playlist(collection, true, 1), 0034 m_timer(new QTimer(this)) 0035 { 0036 setAllowDuplicates(true); 0037 0038 m_timer->setSingleShot(true); 0039 connect(m_timer, SIGNAL(timeout()), this, SLOT(slotCreateNewItem())); 0040 0041 setSortingEnabled(false); 0042 headerItem()->setText(0, i18n("Time")); 0043 } 0044 0045 HistoryPlaylist::~HistoryPlaylist() 0046 { 0047 0048 } 0049 0050 HistoryPlaylistItem *HistoryPlaylist::createItem(const FileHandle &file, QTreeWidgetItem *after) 0051 { 0052 if(!after) 0053 after = topLevelItem(topLevelItemCount() - 1); 0054 return Playlist::createItem<HistoryPlaylistItem>(file, after); 0055 } 0056 0057 void HistoryPlaylist::createItems(const PlaylistItemList &siblings) 0058 { 0059 Playlist::createItems<QVector, HistoryPlaylistItem, PlaylistItem>(siblings); 0060 } 0061 0062 //////////////////////////////////////////////////////////////////////////////// 0063 // private slots 0064 //////////////////////////////////////////////////////////////////////////////// 0065 0066 void HistoryPlaylist::appendProposedItem(const FileHandle &file) 0067 { 0068 m_file = file; 0069 0070 if(!m_file.isNull()) 0071 m_timer->start(delay()); 0072 else 0073 m_timer->stop(); 0074 } 0075 0076 void HistoryPlaylist::slotCreateNewItem() 0077 { 0078 createItem(m_file); 0079 m_file = FileHandle(); 0080 playlistItemsChanged(); 0081 } 0082 0083 //////////////////////////////////////////////////////////////////////////////// 0084 // HistoryPlaylistItem public members 0085 //////////////////////////////////////////////////////////////////////////////// 0086 0087 HistoryPlaylistItem::HistoryPlaylistItem(CollectionListItem *item, Playlist *parent, QTreeWidgetItem *after) : 0088 PlaylistItem(item, parent, after), 0089 m_dateTime(QDateTime::currentDateTime()) 0090 { 0091 setText(0, m_dateTime.toString(QStringLiteral("yyyy-MM-dd HH:mm:ss"))); 0092 } 0093 0094 void HistoryPlaylistItem::setDateTime(const QDateTime &dt) 0095 { 0096 m_dateTime = dt; 0097 setText(0, m_dateTime.toString(QStringLiteral("yyyy-MM-dd HH:mm:ss"))); 0098 } 0099 0100 //////////////////////////////////////////////////////////////////////////////// 0101 // helper functions 0102 //////////////////////////////////////////////////////////////////////////////// 0103 0104 QDataStream &operator<<(QDataStream &s, const HistoryPlaylist &p) 0105 { 0106 PlaylistItemList l = const_cast<HistoryPlaylist *>(&p)->items(); 0107 0108 s << qint32(l.count()); 0109 0110 for(PlaylistItemList::ConstIterator it = l.constBegin(); it != l.constEnd(); ++it) { 0111 const HistoryPlaylistItem *i = static_cast<HistoryPlaylistItem *>(*it); 0112 s << i->file().absFilePath(); 0113 s << i->dateTime(); 0114 } 0115 0116 return s; 0117 } 0118 0119 QDataStream &operator>>(QDataStream &s, HistoryPlaylist &p) 0120 { 0121 qint32 count; 0122 s >> count; 0123 0124 HistoryPlaylistItem *after = 0; 0125 0126 QString fileName; 0127 QDateTime dateTime; 0128 0129 for(int i = 0; i < count; i++) { 0130 s >> fileName; 0131 s >> dateTime; 0132 0133 if(fileName.isEmpty() || !dateTime.isValid()) 0134 throw BICStreamException(); 0135 0136 HistoryPlaylistItem *a = p.createItem(FileHandle(fileName), after); 0137 if(Q_LIKELY(a)) { 0138 after = a; 0139 after->setDateTime(dateTime); 0140 } 0141 } 0142 0143 p.playlistItemsChanged(); 0144 0145 return s; 0146 } 0147 0148 // vim: set et sw=4 tw=0 sta: