summaryrefslogtreecommitdiff
path: root/ripitosd.c
diff options
context:
space:
mode:
Diffstat (limited to 'ripitosd.c')
-rw-r--r--ripitosd.c402
1 files changed, 119 insertions, 283 deletions
diff --git a/ripitosd.c b/ripitosd.c
index 929fff9..06f781a 100644
--- a/ripitosd.c
+++ b/ripitosd.c
@@ -7,7 +7,8 @@
#include <vdr/osdbase.h>
#include <vdr/config.h>
#include "ripitosd.h"
-#include "i18n.h"
+#include <vector>
+#include <sstream>
const cFont *font;
@@ -15,6 +16,8 @@ const cFont *font;
cRipitOsd::cRipitOsd() :cOsdMenu("")
{
font = cFont::GetFont(fontSml);
+ lastlogsize=-1;
+ logbuffer.str("");
}
cRipitOsd::~cRipitOsd()
@@ -25,331 +28,164 @@ cRipitOsd::~cRipitOsd()
bool cRipitOsd::Rip_On(void)
{
- return access("/tmp/ripit.process",F_OK) == 0;
+ return access(LOCK_FILE,F_OK) == 0;
}
eOSState cRipitOsd::ProcessKey(eKeys Key)
{
-
- Display();
-
-
- eOSState state = cOsdMenu::ProcessKey(Key);
- if (state == osUnknown) {
- switch (Key) {
-
- case kRed:
- case kOk:
- return osEnd;
- break;
-
- case kBlue:
- if (!Rip_On()) {
- Start_Encode();
- Display();
- }
- else {
- Abort_Encode();
- Display();
- }
-
- default: break;
- }
- }
- return osContinue;
+ eOSState state = cOsdMenu::ProcessKey(Key);
+
+ if (state == osBack) return osEnd;
+
+ if (state == osUnknown) {
+ switch (Key) {
+
+ case kNone:
+ Display();
+ break;
+
+ case kRed:
+ case kOk:
+ return osEnd;
+ break;
+
+ case kBlue:
+ if (!Rip_On()) {
+ Start_Encode();
+ Display();
+ }
+ else {
+ Abort_Encode(0);
+ Display();
+ }
+ break;
+
+ default: break;
+ }
+ }
+ return osContinue;
}
void cRipitOsd::Start_Encode(void)
{
char *buffer;
- char godown[256], noquiet[256], eject[256], remote[256], ripopts[256], presetarg[256], crcarg[256];
- int lowbit = 0;
- int maxbit = 0;
-
- if(RipitSetup.Ripit_halt) strcpy(godown ,"--halt"); else strcpy(godown,"");
- if(RipitSetup.Ripit_noquiet) strcpy(noquiet,""); else strcpy(godown,"--quiet");
- if(RipitSetup.Ripit_eject) strcpy(eject ,"--eject"); else strcpy(eject,"");
-
- if(!RipitSetup.Ripit_remote) strcpy(remote,"");
- else
- strcpy(remote,RipitSetup.Ripit_remotevalue);
-
-
-
- if(RipitSetup.Ripit_fastrip) {
- strcpy(ripopts, "-Z");
- }
- else {
- strcpy(ripopts, "");
- }
-
- if (RipitSetup.Ripit_lowbitrate == 0) lowbit = 32;
- else if (RipitSetup.Ripit_lowbitrate == 1) lowbit = 64;
- else if (RipitSetup.Ripit_lowbitrate == 2) lowbit = 96;
- else if (RipitSetup.Ripit_lowbitrate == 3) lowbit = 112;
- else if (RipitSetup.Ripit_lowbitrate == 4) lowbit = 128;
- else if (RipitSetup.Ripit_lowbitrate == 5) lowbit = 160;
- else if (RipitSetup.Ripit_lowbitrate == 6) lowbit = 192;
- else if (RipitSetup.Ripit_lowbitrate == 7) lowbit = 224;
- else if (RipitSetup.Ripit_lowbitrate == 8) lowbit = 256;
- else if (RipitSetup.Ripit_lowbitrate == 9) lowbit = 320;
-
- if (RipitSetup.Ripit_maxbitrate == 0) maxbit = 32;
- else if (RipitSetup.Ripit_maxbitrate == 1) maxbit = 64;
- else if (RipitSetup.Ripit_maxbitrate == 2) maxbit = 96;
- else if (RipitSetup.Ripit_maxbitrate == 3) maxbit = 112;
- else if (RipitSetup.Ripit_maxbitrate == 4) maxbit = 128;
- else if (RipitSetup.Ripit_maxbitrate == 5) maxbit = 160;
- else if (RipitSetup.Ripit_maxbitrate == 6) maxbit = 192;
- else if (RipitSetup.Ripit_maxbitrate == 7) maxbit = 224;
- else if (RipitSetup.Ripit_maxbitrate == 8) maxbit = 256;
- else if (RipitSetup.Ripit_maxbitrate == 9) maxbit = 320;
-
- if (RipitSetup.Ripit_preset == 0) strcpy(presetarg, "");
- else if (RipitSetup.Ripit_preset == 1) strcpy(presetarg, "--preset 64");
- else if (RipitSetup.Ripit_preset == 2) strcpy(presetarg, "--alt-preset 192");
- else if (RipitSetup.Ripit_preset == 3) strcpy(presetarg, "--preset extreme -V 2 --vbr-new -h");
- else if (RipitSetup.Ripit_preset == 4) strcpy(presetarg, "--preset 320 -h");
+ char encoptions[256];
+ static int bitrate[10] = { 32, 64, 96, 112, 128, 160, 192, 224, 256, 320 };
+ static char fileschars[3][5] = { "", "NTFS", "HFS" };
- if(RipitSetup.Ripit_crc) {
- strcpy(crcarg, "-p");
- }
- else {
- strcpy(crcarg, "");
- }
+ if (RipitSetup.Ripit_encoding_type == 1) strcpy(encoptions, RipitSetup.Ripit_encopts1);
+ else if (RipitSetup.Ripit_encoding_type == 2) strcpy(encoptions, RipitSetup.Ripit_encopts2);
+ else if (RipitSetup.Ripit_encoding_type == 3) strcpy(encoptions, RipitSetup.Ripit_encopts3);
+ else if (RipitSetup.Ripit_encoding_type == 4) strcpy(encoptions, RipitSetup.Ripit_encopts4);
+ else if (RipitSetup.Ripit_encoding_type == 5) strcpy(encoptions, RipitSetup.Ripit_encopts5);
+ else strcpy(encoptions, "");
- asprintf(&buffer,"`echo 'Ripping process started....' > /tmp/ripit.log; touch /tmp/ripit.process; nice -n %i /usr/bin/ripit.pl %s %s %s %s --bitrate %i --maxrate %i --device %s --lameopt '%s %s %s' --ripopt '%s' --nointeraction --outputdir '%s'`&",
+ asprintf(&buffer,"touch \"%s\"; echo \"vdr-ripit -M 'start' -n '%i' -v '%i' -d '%s' -o '%i' -l '%i' -m '%i' -e '%s' -t '%i' -c '%i' -f '%i' -x '%s' -u '%i' -p '%i' -r '%s' -X '%s' -L '%s' -A '%s'\" | at now",
+ LOCK_FILE,
RipitSetup.Ripit_nice,
- noquiet,
- eject,
- remote,
- godown,
- lowbit,
- maxbit,
- RipitSetup.Ripit_dev,
- presetarg,
- RipitSetup.Ripit_encopts,
- crcarg,
- ripopts,
- RipitSetup.Ripit_dir);
+ RipitSetup.Ripit_verbosity,
+ RipitSetup.Ripit_dir,
+ RipitSetup.Ripit_oggquality,
+ bitrate[RipitSetup.Ripit_lowbitrate],
+ bitrate[RipitSetup.Ripit_maxbitrate],
+ encoptions,
+ RipitSetup.Ripit_encoding_type,
+ RipitSetup.Ripit_crc,
+ RipitSetup.Ripit_fastrip,
+ fileschars[RipitSetup.Ripit_excludespecialchars],
+ RipitSetup.Ripit_underscores,
+ RipitSetup.Ripit_playlist,
+ RipitSetup.Ripit_ripopts,
+ LOCK_FILE,
+ LOG_FILE,
+ ABORT_FILE);
dsyslog("Ripit: Executing '%s'",buffer);
SystemExec(buffer);
- free(buffer);
-
-}
-
-void cRipitOsd::Abort_Encode(void)
-{
- char *buffer;
- asprintf(&buffer, "killall ripit.pl ; killall lame ; killall cdparanoia ; echo 'PROCESS MANUALLY ABORTED' > /tmp/ripit.log; rm -f /tmp/ripit.process");
- esyslog("Ripit: Executing '%s'\nProcess manually aborted ...!!!\n",buffer);
- SystemExec(buffer);
free(buffer);
- Display();
-//keep
}
-
-void cRipitOsd::External_Start(const char *Device)
+void cRipitOsd::Abort_Encode(const int external)
{
char *buffer;
- char godown[256], noquiet[256], eject[256], remote[256], ripopts[256], presetarg[256], crcarg[256], device[64];
- int lowbit = 0;
- int maxbit = 0;
-
- if(Device)
- strcpy(device,Device);
- else
- strcpy(device,RipitSetup.Ripit_dev);
-
-
-
- if(RipitSetup.Ripit_halt) strcpy(godown ,"--halt"); else strcpy(godown,"");
- if(RipitSetup.Ripit_noquiet) strcpy(noquiet,""); else strcpy(godown,"--quiet");
- if(RipitSetup.Ripit_eject) strcpy(eject ,"--eject"); else strcpy(eject,"");
+ asprintf(&buffer, "echo \"vdr-ripit -M 'kill' -X '%s' -L '%s' -A '%s'\" | at now",
+ LOCK_FILE,
+ LOG_FILE,
+ ABORT_FILE);
- if(!RipitSetup.Ripit_remote) strcpy(remote,"");
- else
- strcpy(remote,RipitSetup.Ripit_remotevalue);
-
-
-
- if(RipitSetup.Ripit_fastrip) {
- strcpy(ripopts, "-Z");
- }
- else {
- strcpy(ripopts, "");
- }
-
- if (RipitSetup.Ripit_lowbitrate == 0) lowbit = 32;
- else if (RipitSetup.Ripit_lowbitrate == 1) lowbit = 64;
- else if (RipitSetup.Ripit_lowbitrate == 2) lowbit = 96;
- else if (RipitSetup.Ripit_lowbitrate == 3) lowbit = 112;
- else if (RipitSetup.Ripit_lowbitrate == 4) lowbit = 128;
- else if (RipitSetup.Ripit_lowbitrate == 5) lowbit = 160;
- else if (RipitSetup.Ripit_lowbitrate == 6) lowbit = 192;
- else if (RipitSetup.Ripit_lowbitrate == 7) lowbit = 224;
- else if (RipitSetup.Ripit_lowbitrate == 8) lowbit = 256;
- else if (RipitSetup.Ripit_lowbitrate == 9) lowbit = 320;
-
- if (RipitSetup.Ripit_maxbitrate == 0) maxbit = 32;
- else if (RipitSetup.Ripit_maxbitrate == 1) maxbit = 64;
- else if (RipitSetup.Ripit_maxbitrate == 2) maxbit = 96;
- else if (RipitSetup.Ripit_maxbitrate == 3) maxbit = 112;
- else if (RipitSetup.Ripit_maxbitrate == 4) maxbit = 128;
- else if (RipitSetup.Ripit_maxbitrate == 5) maxbit = 160;
- else if (RipitSetup.Ripit_maxbitrate == 6) maxbit = 192;
- else if (RipitSetup.Ripit_maxbitrate == 7) maxbit = 224;
- else if (RipitSetup.Ripit_maxbitrate == 8) maxbit = 256;
- else if (RipitSetup.Ripit_maxbitrate == 9) maxbit = 320;
-
- if (RipitSetup.Ripit_preset == 0) strcpy(presetarg, "");
- else if (RipitSetup.Ripit_preset == 1) strcpy(presetarg, "--preset 64");
- else if (RipitSetup.Ripit_preset == 2) strcpy(presetarg, "--alt-preset 192");
- else if (RipitSetup.Ripit_preset == 3) strcpy(presetarg, "--preset extreme -V 2 --vbr-new -h");
- else if (RipitSetup.Ripit_preset == 4) strcpy(presetarg, "--preset 320 -h");
-
-
- if(RipitSetup.Ripit_crc) {
- strcpy(crcarg, "-p");
- }
- else {
- strcpy(crcarg, "");
- }
-
- asprintf(&buffer,"`echo 'Ripping process started....' > /tmp/ripit.log; touch /tmp/ripit.process; nice -n %i /usr/bin/ripit.pl %s %s %s %s --bitrate %i --maxrate %i --device %s --lameopt '%s %s %s' --ripopt '%s' --nointeraction --outputdir '%s'`&",
- RipitSetup.Ripit_nice,
- noquiet,
- eject,
- remote,
- godown,
- lowbit,
- maxbit,
- device,
- presetarg,
- RipitSetup.Ripit_encopts,
- crcarg,
- ripopts,
- RipitSetup.Ripit_dir);
-
- dsyslog("Ripit: Executing '%s'",buffer);
- SystemExec(buffer);
- free(buffer);
-
-}
-
-void cRipitOsd::External_Abort(void)
-{
- char *buffer;
- asprintf(&buffer, "killall ripit.pl ; killall lame ; killall cdparanoia ; echo 'PROCESS MANUALLY ABORTED' > /tmp/ripit.log; rm -f /tmp/ripit.process");
- esyslog("Ripit: Executing '%s'\nProcess manually aborted ...!!!\n",buffer);
+ esyslog("Ripit: Executing '%s' (Process manually aborted ...!!!)\n",buffer);
SystemExec(buffer);
free(buffer);
+
+ if ( external == 0 ) Display();
//keep
}
-
void cRipitOsd::Display(void)
{
+
cOsdMenu::Display();
using namespace std;
- ifstream logfile("/tmp/ripit.log");
- std::string line;
- std::string line1;
- std::string line2;
- std::string line3;
- std::string line4;
- std::string line5;
- std::string line6;
- std::string line7;
- std::string line8;
- std::string line9;
- std::string line10;
- std::string line11;
- std::string line12;
- std::string line13;
- std::string line14;
- std::string line15;
- std::string line16;
-// std::string line17;
-// std::string line18;
-// std::string line19;
-// std::string line20;
-// std::string line21;
+ struct stat filestatus;
+ int filestatusok;
+ if (stat( LOG_FILE, &filestatus ) == 0 ) {
+ filestatusok=1;
+ }
+ else {
+ filestatusok=0;
+ lastlogsize=-1;
+ logbuffer.str("");
+ }
// check for running process
if (Rip_On()) {
DisplayMenu()->SetTitle(tr("Process started..."));
- DisplayMenu()->SetText(tr("Ready To Rumble"), 0);
- SetHelp(tr("Parent"), NULL, NULL, tr("Abort"));
- }
+ SetHelp(tr("Hide"), NULL, NULL, tr("Abort"));
+ DisplayMenu()->SetText(tr("Ready To Rumble"), true);
+ }
else {
DisplayMenu()->SetTitle(tr("No process started"));
- DisplayMenu()->SetText(tr("No process started"), 0);
- SetHelp(tr("Parent"), NULL, NULL, tr("Start"));
- }
-
- // read last lines of logfile
- if(logfile.is_open()) {
- while(!logfile.eof()) {
- getline(logfile, line);
- line1 = line2;
- line2 = line3;
- line3 = line4;
- line4 = line5;
- line5 = line6;
- line6 = line7;
- line7 = line8;
- line8 = line9;
- line9 = line10;
- line10 = line11;
- line11 = line12;
- line12 = line13;
- line13 = line14;
- line14 = line15;
- line15 = line16;
-// line16 = line17;
+ SetHelp(tr("Hide"), NULL, NULL, tr("Start"));
+ DisplayMenu()->SetText(tr("No process started"), true);
+ }
- line16 = line;
-// line17 = line18;
-// line18 = line19;
-// line19 = line20;
-// line20 = line21;
-// line21 = line;
+ if ( (filestatusok == 1) && (lastlogsize != filestatus.st_size)) { //logfile changed
+ lastlogsize=filestatus.st_size;
+ ifstream logfile(LOG_FILE);
+ if (logfile.is_open()){
+ //esyslog("update log");
+ vector<string> values;
+ for(string line; getline(logfile, line); ){
+ values.push_back(line);
+ }
+ int start;
+ if (values.size() < (unsigned)RipitSetup.Ripit_lastlog){
+ start=0;
+ }
+ else{
+ start=values.size()-RipitSetup.Ripit_lastlog;
+ }
+ logbuffer.str("");
+ for(unsigned i=start; i<values.size(); i++ ){
+ string r;
+ r=values.at(i);
+ while ( r.find( "\t") != std::string::npos){
+ r.replace( r.find( "\t"), strlen("\t"), " ");
+ }
+ logbuffer << r << endl;
+ }
+ DisplayMenu()->SetText(logbuffer.str().c_str(), true);
}
- logfile.close();
- }
+ }
+ else {
+ if (lastlogsize > -1)
+ DisplayMenu()->SetText(logbuffer.str().c_str(), true);
+ }
- // display logfile
- char *buffer;
- asprintf(&buffer, "%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n%s\n", line1.c_str(),
- line2.c_str(),
- line3.c_str(),
- line4.c_str(),
- line5.c_str(),
- line6.c_str(),
- line7.c_str(),
- line8.c_str(),
- line9.c_str(),
- line10.c_str(),
- line11.c_str(),
- line12.c_str(),
- line13.c_str(),
- line14.c_str(),
- line15.c_str(),
- line16.c_str());
-// line17.c_str();
-// line18.c_str(),
-// line19.c_str(),
-// line20.c_str(),
-// line21.c_str());
- DisplayMenu()->SetText(buffer, 0);
- free(buffer);
}