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;