File kaffeine-add-support-for-parallel-instant-records.patch of Package kaffeine4

diff -u -r -N kaffeine-1.2.2o/src/dvb/dvbconfigdialog.cpp kaffeine-1.2.2n/src/dvb/dvbconfigdialog.cpp
--- kaffeine-1.2.2o/src/dvb/dvbconfigdialog.cpp	2011-04-17 21:17:19.000000000 +0200
+++ kaffeine-1.2.2n/src/dvb/dvbconfigdialog.cpp	2014-01-04 13:19:04.027544119 +0100
@@ -24,6 +24,7 @@
 #include <QButtonGroup>
 #include <QCheckBox>
 #include <QLabel>
+#include <QMessageBox>
 #include <QProgressBar>
 #include <QPushButton>
 #include <QRadioButton>
@@ -94,6 +95,20 @@
 	boxLayout->addLayout(gridLayout);
 
 	gridLayout = new QGridLayout();
+	gridLayout->addWidget(new QLabel(i18n("Filename Format:")), 0, 0);
+
+	filenameFormatEdit = new KLineEdit(widget);
+	filenameFormatEdit->setText(manager->getFilenameFormat());
+	gridLayout->addWidget(filenameFormatEdit, 0, 1);
+
+	QToolButton *filenameFormatHelpButton = new QToolButton(widget);
+	filenameFormatHelpButton->setIcon(KIcon("help-hint"));
+	filenameFormatHelpButton->setToolTip(i18n("Help"));
+	connect(filenameFormatHelpButton, SIGNAL(clicked()), this, SLOT(filenameFormatHelp()));
+	gridLayout->addWidget(filenameFormatHelpButton, 0, 2);
+	boxLayout->addLayout(gridLayout);
+
+	gridLayout = new QGridLayout();
 	gridLayout->addWidget(new QLabel(i18n("Use ISO 8859-1 charset instead of ISO 6937:")),
 		1, 0);
 
@@ -312,6 +327,13 @@
 	}
 }
 
+void DvbConfigDialog::filenameFormatHelp()
+{
+	QMessageBox msgBox;
+	msgBox.setText("%chan\tchannel's name\n%date\tstarting date in format yyyyMMdd-hhmm\n%name\tprogram name\n\nDefault: %name\nExample: %chan-%date-%name");
+	msgBox.exec();
+}
+
 double DvbConfigDialog::toLatitude(const QString &text, bool *ok)
 {
 	if (text.isEmpty()) {
@@ -350,6 +372,7 @@
 	manager->setTimeShiftFolder(timeShiftFolderEdit->text());
 	manager->setBeginMargin(beginMarginBox->value() * 60);
 	manager->setEndMargin(endMarginBox->value() * 60);
+	manager->setFilenameFormat(filenameFormatEdit->text());
 	manager->setOverride6937Charset(override6937CharsetBox->isChecked());
 
 	bool latitudeOk;
diff -u -r -N kaffeine-1.2.2o/src/dvb/dvbconfigdialog.h kaffeine-1.2.2n/src/dvb/dvbconfigdialog.h
--- kaffeine-1.2.2o/src/dvb/dvbconfigdialog.h	2011-04-17 21:17:19.000000000 +0200
+++ kaffeine-1.2.2n/src/dvb/dvbconfigdialog.h	2014-01-04 13:19:04.027544119 +0100
@@ -64,6 +64,7 @@
 	void moveLeft(DvbConfigPage *configPage);
 	void moveRight(DvbConfigPage *configPage);
 	void remove(DvbConfigPage *configPage);
+	void filenameFormatHelp();
 
 private:
 	static double toLatitude(const QString &text, bool *ok);
@@ -77,6 +78,7 @@
 	KLineEdit *timeShiftFolderEdit;
 	QSpinBox *beginMarginBox;
 	QSpinBox *endMarginBox;
+	KLineEdit *filenameFormatEdit;
 	QCheckBox *override6937CharsetBox;
 	KLineEdit *latitudeEdit;
 	KLineEdit *longitudeEdit;
diff -u -r -N kaffeine-1.2.2o/src/dvb/dvbmanager.cpp kaffeine-1.2.2n/src/dvb/dvbmanager.cpp
--- kaffeine-1.2.2o/src/dvb/dvbmanager.cpp	2011-04-17 21:17:19.000000000 +0200
+++ kaffeine-1.2.2n/src/dvb/dvbmanager.cpp	2014-01-04 13:19:04.031544112 +0100
@@ -348,6 +348,11 @@
 	return KGlobal::config()->group("DVB").readEntry("EndMargin", 600);
 }
 
+QString DvbManager::getFilenameFormat() const
+{
+	return KGlobal::config()->group("DVB").readEntry("FilenameFormat", "%name");
+}
+
 bool DvbManager::override6937Charset() const
 {
 	return KGlobal::config()->group("DVB").readEntry("Override6937", false);
@@ -373,6 +378,11 @@
 	KGlobal::config()->group("DVB").writeEntry("EndMargin", endMargin);
 }
 
+void DvbManager::setFilenameFormat(QString filenameFormat)
+{
+	KGlobal::config()->group("DVB").writeEntry("FilenameFormat", filenameFormat);
+}
+
 void DvbManager::setOverride6937Charset(bool override)
 {
 	KGlobal::config()->group("DVB").writeEntry("Override6937", override);
diff -u -r -N kaffeine-1.2.2o/src/dvb/dvbmanager.h kaffeine-1.2.2n/src/dvb/dvbmanager.h
--- kaffeine-1.2.2o/src/dvb/dvbmanager.h	2011-04-17 21:17:19.000000000 +0200
+++ kaffeine-1.2.2n/src/dvb/dvbmanager.h	2014-01-04 13:19:04.031544112 +0100
@@ -124,11 +124,13 @@
 	QString getTimeShiftFolder() const;
 	int getBeginMargin() const; // seconds
 	int getEndMargin() const; // seconds
+	QString getFilenameFormat() const;
 	bool override6937Charset() const;
 	void setRecordingFolder(const QString &path);
 	void setTimeShiftFolder(const QString &path);
 	void setBeginMargin(int beginMargin); // seconds
 	void setEndMargin(int endMargin); // seconds
+	void setFilenameFormat(QString filenameFormat);
 	void setOverride6937Charset(bool override);
 
 	static double getLatitude();
diff -u -r -N kaffeine-1.2.2o/src/dvb/dvbrecording.cpp kaffeine-1.2.2n/src/dvb/dvbrecording.cpp
--- kaffeine-1.2.2o/src/dvb/dvbrecording.cpp	2011-04-17 21:17:19.000000000 +0200
+++ kaffeine-1.2.2n/src/dvb/dvbrecording.cpp	2014-01-04 13:19:04.031544112 +0100
@@ -349,7 +349,11 @@
 {
 	if (!file.isOpen()) {
 		QString folder = manager->getRecordingFolder();
-		QString path = folder + '/' + QString(recording.name).replace('/', '_');
+		QString fName = manager->getFilenameFormat();
+		fName.replace("%chan", recording.channel.constData()->name);
+		fName.replace("%date", recording.begin.toLocalTime().toString("yyyyMMdd-hhmm"));
+		fName.replace("%name", QString(recording.name).replace('/', '_'));
+		QString path = folder + '/' + fName;
 
 		for (int attempt = 0; attempt < 100; ++attempt) {
 			if (attempt == 0) {
diff -u -r -N kaffeine-1.2.2o/src/dvb/dvbtab.cpp kaffeine-1.2.2n/src/dvb/dvbtab.cpp
--- kaffeine-1.2.2o/src/dvb/dvbtab.cpp	2011-04-17 21:17:19.000000000 +0200
+++ kaffeine-1.2.2n/src/dvb/dvbtab.cpp	2014-01-04 13:34:10.411975117 +0100
@@ -334,9 +334,9 @@
 
 void DvbTab::instantRecord(bool checked)
 {
-	if (checked) {
-		const DvbSharedChannel &channel = manager->getLiveView()->getChannel();
+	const DvbSharedChannel &channel = manager->getLiveView()->getChannel();
 
+	if (checked) {
 		if (!channel.isValid()) {
 			instantRecordAction->setChecked(false);
 			return;
@@ -359,10 +359,14 @@
 		recording.begin = QDateTime::currentDateTime().toUTC();
 		recording.duration = QTime(12, 0);
 		instantRecording = manager->getRecordingModel()->addRecording(recording);
+		instantRecordings.push_back(instantRecording);
+		instantRecordAction->setIcon(KIcon("media-record"));
 		mediaWidget->getOsdWidget()->showText(i18nc("osd", "Instant Record Started"),
 			1500);
 	} else {
 		manager->getRecordingModel()->removeRecording(instantRecording);
+		instantRecordings.removeOne(instantRecording);
+		instantRecordAction->setIcon(KIcon("document-save"));
 		mediaWidget->getOsdWidget()->showText(i18nc("osd", "Instant Record Stopped"),
 			1500);
 	}
@@ -371,11 +375,12 @@
 void DvbTab::recordingRemoved(const DvbSharedRecording &recording)
 {
 	if (instantRecording == recording) {
-		instantRecording = DvbSharedRecording();
 		instantRecordAction->setChecked(false);
+		instantRecordAction->setIcon(KIcon("document-save"));
 		mediaWidget->getOsdWidget()->showText(i18nc("osd", "Instant Record Stopped"),
 			1500);
 	}
+	instantRecordings.removeOne(recording);
 }
 
 void DvbTab::configureDvb()
@@ -451,6 +456,8 @@
 
 void DvbTab::playChannel(const DvbSharedChannel &channel, const QModelIndex &index)
 {
+	QString iconName;
+
 	if (!channel.isValid()) {
 		kWarning() << "channel is invalid";
 		return;
@@ -460,7 +467,27 @@
 		lastChannel = currentChannel;
 	}
 
+	checkInstantRecordings(channel);
+	instantRecordAction->setChecked(instantRecordingActive);
+	instantRecordingActive ? iconName = "media-record" : iconName = "document-save";
+	instantRecordAction->setIcon(KIcon(iconName));
 	channelView->setCurrentIndex(index);
 	currentChannel = channel->name;
 	manager->getLiveView()->playChannel(channel);
 }
+
+void DvbTab::checkInstantRecordings(DvbSharedChannel ch) {
+	DvbSharedRecording rec;
+	instantRecordingActive = false;
+
+	QListIterator<DvbSharedRecording> i(instantRecordings);
+	while (i.hasNext()) {
+		rec = i.next();
+		if(rec.constData()->channel == ch) {
+			instantRecordingActive = true;
+			break;
+		}
+	}
+
+	instantRecording = rec;
+}
diff -u -r -N kaffeine-1.2.2o/src/dvb/dvbtab.h kaffeine-1.2.2n/src/dvb/dvbtab.h
--- kaffeine-1.2.2o/src/dvb/dvbtab.h	2011-04-17 21:17:19.000000000 +0200
+++ kaffeine-1.2.2n/src/dvb/dvbtab.h	2014-01-04 13:19:04.043544081 +0100
@@ -22,6 +22,7 @@
 #define DVBTAB_H
 
 #include <QTimer>
+#include <QList>
 #include <config-kaffeine.h>
 #include "../tabbase.h"
 #include "dvbrecording.h"
@@ -76,11 +77,14 @@
 private:
 	void activate();
 	void playChannel(const DvbSharedChannel &channel, const QModelIndex &index);
+	void checkInstantRecordings(DvbSharedChannel ch);
 
 	MediaWidget *mediaWidget;
 	DvbManager *manager;
 	KAction *instantRecordAction;
+	QList<DvbSharedRecording> instantRecordings;
 	DvbSharedRecording instantRecording;
+	bool instantRecordingActive;
 	QSplitter *splitter;
 	DvbChannelTableModel *channelProxyModel;
 	DvbChannelView *channelView;
openSUSE Build Service is sponsored by