diff options
Diffstat (limited to 'ripit.c')
| -rw-r--r-- | ripit.c | 308 |
1 files changed, 223 insertions, 85 deletions
@@ -6,9 +6,10 @@ */ #include <vdr/interface.h> +#include <vdr/menu.h> #include "setup.h" #include "ripit.h" -#include "i18n.h" +#include "help.h" cPluginRipit::cPluginRipit(void) { @@ -45,7 +46,6 @@ bool cPluginRipit::Initialize(void) bool cPluginRipit::Start(void) { // Start any background activities the plugin shall perform. - RegisterI18n(Phrases); return true; } @@ -56,6 +56,15 @@ void cPluginRipit::Housekeeping(void) } +cString cPluginRipit::Active(void) +{ + // Return a message string if shutdown should be postponed + if ( ripitosd->Rip_On() ) + return cString( tr( "ripit is running" ) ); + + return NULL; +} + const char *cPluginRipit::MainMenuEntry(void) { return RipitSetup.Ripit_hidden ? 0 : tr(MAINMENUENTRY); @@ -73,7 +82,7 @@ const char **cPluginRipit::SVDRPHelpPages(void) static const char *HelpPages[] = { "START\n" - " 'START [device]' Start a new rip process. If 'device' is given , use this one else from setup", + " 'START' Start a new rip process", "ABORT\n" " 'ABORT' Abort a running rip process", "STATUS\n" @@ -91,18 +100,7 @@ cString cPluginRipit::SVDRPCommand(const char *Command, const char *Option, int return "Another rip process is running, Can't start new one"; } else { - if(*Option) { - if(access(Option, F_OK)==0) { - ripitosd->External_Start(Option); - } - else { - ReplyCode=550; - return "Device don't exist, Stopped"; - } - } - else - ripitosd->External_Start(0); - + ripitosd->Start_Encode(); return "New rip process started"; } } @@ -112,7 +110,7 @@ cString cPluginRipit::SVDRPCommand(const char *Command, const char *Option, int return "Can't abort process because no one is running"; } else { - ripitosd->External_Abort(); + ripitosd->Abort_Encode(1); return "Rip process aborted"; } } @@ -139,30 +137,37 @@ cMenuSetupPage *cPluginRipit::SetupMenu(void) bool cPluginRipit::SetupParse(const char *Name, const char *Value) { // Parse your own setup parameters and store their values. - if (!strcasecmp(Name, "Ripit_hidden")) RipitSetup.Ripit_hidden = atoi(Value); - else if (!strcasecmp(Name, "Ripit_halt")) RipitSetup.Ripit_halt = atoi(Value); - else if (!strcasecmp(Name, "Ripit_noquiet")) RipitSetup.Ripit_noquiet = atoi(Value); - else if (!strcasecmp(Name, "Ripit_eject")) RipitSetup.Ripit_eject = atoi(Value); - else if (!strcasecmp(Name, "Ripit_fastrip")) RipitSetup.Ripit_fastrip = atoi(Value); - else if (!strcasecmp(Name, "Ripit_lowbitrate")) RipitSetup.Ripit_lowbitrate = atoi(Value); - else if (!strcasecmp(Name, "Ripit_maxbitrate")) RipitSetup.Ripit_maxbitrate = atoi(Value); - else if (!strcasecmp(Name, "Ripit_preset")) RipitSetup.Ripit_preset = atoi(Value); - else if (!strcasecmp(Name, "Ripit_crc")) RipitSetup.Ripit_crc = atoi(Value); - else if (!strcasecmp(Name, "Ripit_encopts")) strn0cpy(RipitSetup.Ripit_encopts, Value, sizeof(RipitSetup.Ripit_encopts)); - else if (!strcasecmp(Name, "Ripit_dev")) strn0cpy(RipitSetup.Ripit_dev, Value, sizeof(RipitSetup.Ripit_dev)); - else if (!strcasecmp(Name, "Ripit_dir")) strn0cpy(RipitSetup.Ripit_dir, Value, sizeof(RipitSetup.Ripit_dir)); - else if (!strcasecmp(Name, "Ripit_nice")) RipitSetup.Ripit_nice = atoi(Value); - else if (!strcasecmp(Name, "Ripit_remote")) RipitSetup.Ripit_remote = atoi(Value); - else if (!strcasecmp(Name, "Ripit_remotevalue")) strn0cpy(RipitSetup.Ripit_remotevalue, Value, sizeof(RipitSetup.Ripit_remotevalue)); + if (!strcasecmp(Name, "Ripit_hidden")) RipitSetup.Ripit_hidden = atoi(Value); + else if (!strcasecmp(Name, "Ripit_lastlog")) RipitSetup.Ripit_lastlog = atoi(Value); + else if (!strcasecmp(Name, "Ripit_excludespecialchars")) RipitSetup.Ripit_excludespecialchars = atoi(Value); + else if (!strcasecmp(Name, "Ripit_underscores")) RipitSetup.Ripit_underscores = atoi(Value); + else if (!strcasecmp(Name, "Ripit_playlist")) RipitSetup.Ripit_playlist = atoi(Value); + else if (!strcasecmp(Name, "Ripit_verbosity")) RipitSetup.Ripit_verbosity = atoi(Value); + else if (!strcasecmp(Name, "Ripit_fastrip")) RipitSetup.Ripit_fastrip = atoi(Value); + else if (!strcasecmp(Name, "Ripit_lowbitrate")) RipitSetup.Ripit_lowbitrate = atoi(Value); + else if (!strcasecmp(Name, "Ripit_maxbitrate")) RipitSetup.Ripit_maxbitrate = atoi(Value); + else if (!strcasecmp(Name, "Ripit_encoding_type")) RipitSetup.Ripit_encoding_type = atoi(Value); + else if (!strcasecmp(Name, "Ripit_oggquality")) RipitSetup.Ripit_oggquality = atoi(Value); + else if (!strcasecmp(Name, "Ripit_crc")) RipitSetup.Ripit_crc = atoi(Value); + else if (!strcasecmp(Name, "Ripit_ripopts")) strn0cpy(RipitSetup.Ripit_ripopts, Value, sizeof(RipitSetup.Ripit_ripopts)); + else if (!strcasecmp(Name, "Ripit_encopts1")) strn0cpy(RipitSetup.Ripit_encopts1, Value, sizeof(RipitSetup.Ripit_encopts1)); + else if (!strcasecmp(Name, "Ripit_encopts2")) strn0cpy(RipitSetup.Ripit_encopts2, Value, sizeof(RipitSetup.Ripit_encopts2)); + else if (!strcasecmp(Name, "Ripit_encopts3")) strn0cpy(RipitSetup.Ripit_encopts3, Value, sizeof(RipitSetup.Ripit_encopts3)); + else if (!strcasecmp(Name, "Ripit_encopts4")) strn0cpy(RipitSetup.Ripit_encopts4, Value, sizeof(RipitSetup.Ripit_encopts4)); + else if (!strcasecmp(Name, "Ripit_encopts5")) strn0cpy(RipitSetup.Ripit_encopts5, Value, sizeof(RipitSetup.Ripit_encopts5)); + else if (!strcasecmp(Name, "Ripit_dir")) strn0cpy(RipitSetup.Ripit_dir, Value, sizeof(RipitSetup.Ripit_dir)); + else if (!strcasecmp(Name, "Ripit_nice")) RipitSetup.Ripit_nice = atoi(Value); else return false; + return true; } cMenuRipitSetup::cMenuRipitSetup(void) { - Setup(); + oldCurrent=-1; + Setup(); /* static const char allowed[] = { "abcdefghijklmnopqrstuvwxyz0123456789-_/" }; int current = Current(); @@ -202,7 +207,7 @@ cMenuRipitSetup::cMenuRipitSetup(void) preset[2] = tr("standard"); preset[3] = tr("great"); preset[4] = tr("best"); - Add(new cMenuEditStraItem( tr("Presets"), &RipitSetup.Ripit_preset, 5, preset)); + Add(new cMenuEditStraItem( tr("Presets"), &RipitSetup.Ripit_encoding_type, 5, preset)); Add(new cMenuEditBoolItem( tr("CRC-check"), &RipitSetup.Ripit_crc)); Add(new cMenuEditStrItem( tr("More encoder settings"), RipitSetup.Ripit_encopts, 255, allowed)); @@ -221,16 +226,46 @@ cMenuRipitSetup::cMenuRipitSetup(void) void cMenuRipitSetup::Setup(void) { - static const char allowed[] = { "abcdefghijklmnopqrstuvwxyz0123456789-_/" }; + static const char allowedcmd[] = { "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-\"" }; int current = Current(); Clear(); + help.Clear(); + + Add(new cOsdItem(cString::sprintf("%s%s%s", "---- ",tr("Plugin Options")," ----"),osUnknown,false)); + help.Append(""); + Add(new cMenuEditBoolItem( tr("Hide mainmenu entry"), &RipitSetup.Ripit_hidden)); + help.Append(tr(HELP_Ripit_hidden)); + Add(new cMenuEditIntItem( tr("Show last x lines of log"), &RipitSetup.Ripit_lastlog, 1, 100)); + help.Append(tr(HELP_Ripit_lastlog)); + Add(new cMenuEditIntItem( tr("Priority of task (nice)"), &RipitSetup.Ripit_nice, -20, 19)); + help.Append(tr(HELP_Ripit_nice)); + Add(new cMenuEditIntItem( tr("Verbosity"), &RipitSetup.Ripit_verbosity, 0, 5)); + help.Append(tr(HELP_Ripit_verbosity)); + + + if(RipitSetup.Ripit_encoding_type == 0 ){ + Add(new cOsdItem(cString::sprintf("%s%s%s", "---- ",tr("Rip script Options")," ----"),osUnknown,false)); + help.Append(""); + } + else{ + Add(new cOsdItem(cString::sprintf("%s%s%s", "---- ",tr("Encoder Options")," ----"),osUnknown,false)); + help.Append(""); + } - Add(new cMenuEditBoolItem( tr("Hide mainmenu entry"), &RipitSetup.Ripit_hidden)); - Add(new cMenuEditBoolItem( tr("Shutdown after finished"), &RipitSetup.Ripit_halt)); - Add(new cMenuEditBoolItem( tr("Verbose output"), &RipitSetup.Ripit_noquiet)); - Add(new cMenuEditBoolItem( tr("Eject after finished"), &RipitSetup.Ripit_eject)); - Add(new cMenuEditBoolItem( tr("Fast mode"), &RipitSetup.Ripit_fastrip)); + preset[0] = tr("Free Setting"); + preset[1] = tr("mp3 Constant bitrate (CBR)"); + preset[2] = tr("mp3 Average bitrate (ABR)"); + preset[3] = tr("mp3 Variable bitrate (VBR)"); + preset[4] = tr("flac (lossless)"); + preset[5] = tr("ogg vorbis"); + Add(new cMenuEditStraItem( tr("Encoding type"), &RipitSetup.Ripit_encoding_type, 6, preset)); + help.Append(tr(HELP_Ripit_encoding_type)); + + if (RipitSetup.Ripit_encoding_type == 5){ + Add(new cMenuEditIntItem( tr("Quality"), &RipitSetup.Ripit_oggquality, -1, 10)); + help.Append(tr(HELP_Ripit_oggquality)); + } lowbitrate[0] = "32"; lowbitrate[1] = "64"; @@ -242,38 +277,114 @@ void cMenuRipitSetup::Setup(void) lowbitrate[7] = "224"; lowbitrate[8] = "256"; lowbitrate[9] = "320"; - Add(new cMenuEditStraItem( tr("Min. bitrate"), &RipitSetup.Ripit_lowbitrate, 10, lowbitrate)); + if(RipitSetup.Ripit_encoding_type == 1 || RipitSetup.Ripit_encoding_type == 2 ){ + Add(new cMenuEditStraItem( tr("Bitrate"), &RipitSetup.Ripit_lowbitrate, 10, lowbitrate)); + help.Append(tr(HELP_Ripit_lowbitrate_mp3_CBR_ABR)); + } + else{ + if (RipitSetup.Ripit_encoding_type == 3){ + Add(new cMenuEditStraItem( tr("Min. bitrate"), &RipitSetup.Ripit_lowbitrate, 10, lowbitrate)); + help.Append(tr(HELP_Ripit_lowbitrate_mp3_VBR)); + } + } - maxbitrate[0] = "32"; - maxbitrate[1] = "64"; - maxbitrate[2] = "96"; - maxbitrate[3] = "112"; - maxbitrate[4] = "128"; - maxbitrate[5] = "160"; - maxbitrate[6] = "192"; - maxbitrate[7] = "224"; - maxbitrate[8] = "256"; - maxbitrate[9] = "320"; - Add(new cMenuEditStraItem( tr("Max. bitrate"), &RipitSetup.Ripit_maxbitrate, 10, maxbitrate)); + if(RipitSetup.Ripit_encoding_type == 3 ) { + maxbitrate[0] = "32"; + maxbitrate[1] = "64"; + maxbitrate[2] = "96"; + maxbitrate[3] = "112"; + maxbitrate[4] = "128"; + maxbitrate[5] = "160"; + maxbitrate[6] = "192"; + maxbitrate[7] = "224"; + maxbitrate[8] = "256"; + maxbitrate[9] = "320"; + Add(new cMenuEditStraItem( tr("Max. bitrate"), &RipitSetup.Ripit_maxbitrate, 10, maxbitrate)); + help.Append(tr(HELP_Ripit_maxbitrate_mp3_VBR)); + } + if(RipitSetup.Ripit_encoding_type == 0 ) { + Add(new cMenuEditStrItem( tr("Rip script extra Options"), RipitSetup.Ripit_ripopts, 255, allowedcmd)); + help.Append(tr(HELP_Ripit_ripopts)); + } + else if (RipitSetup.Ripit_encoding_type == 1 ) { + Add(new cMenuEditStrItem( tr("Extra encoder options"), RipitSetup.Ripit_encopts1, 255, allowedcmd)); + help.Append(tr(HELP_Ripit_encopts1)); + Add(new cMenuEditBoolItem( tr("Add CRC-code in each frame"), &RipitSetup.Ripit_crc)); + help.Append(tr(HELP_Ripit_crc)); + } + else if (RipitSetup.Ripit_encoding_type == 2 ) { + Add(new cMenuEditStrItem( tr("Extra encoder options"), RipitSetup.Ripit_encopts2, 255, allowedcmd)); + help.Append(tr(HELP_Ripit_encopts2)); + Add(new cMenuEditBoolItem( tr("Add CRC-code in each frame"), &RipitSetup.Ripit_crc)); + help.Append(tr(HELP_Ripit_crc)); + } + else if (RipitSetup.Ripit_encoding_type == 3 ) { + Add(new cMenuEditStrItem( tr("Extra encoder options"), RipitSetup.Ripit_encopts3, 255, allowedcmd)); + help.Append(tr(HELP_Ripit_encopts3)); + Add(new cMenuEditBoolItem( tr("Add CRC-code in each frame"), &RipitSetup.Ripit_crc)); + help.Append(tr(HELP_Ripit_crc)); + } + else if (RipitSetup.Ripit_encoding_type == 4 ) { + Add(new cMenuEditStrItem( tr("Extra encoder options"), RipitSetup.Ripit_encopts4, 255, allowedcmd)); + help.Append(tr(HELP_Ripit_encopts4)); + } + else if (RipitSetup.Ripit_encoding_type == 5 ) { + Add(new cMenuEditStrItem( tr("Extra encoder options"), RipitSetup.Ripit_encopts5, 255, allowedcmd)); + help.Append(tr(HELP_Ripit_encopts5)); + } + Add(new cOsdItem(cString::sprintf("%s%s%s", "---- ",tr("Ripper Options")," ----"),osUnknown,false)); + help.Append(""); + Add(new cMenuEditBoolItem( tr("Fast ripping"), &RipitSetup.Ripit_fastrip)); + help.Append(tr(HELP_Ripit_fastrip)); + Add(new cOsdItem(cString::sprintf("%s%s%s", "---- ",tr("Target Options")," ----"),osUnknown,false)); + help.Append(""); + Add(new cMenuEditStrItem( tr("Directory for ripped tracks"), RipitSetup.Ripit_dir, 255, NULL)); //NULL = VDR use tr(FileNameChars) + help.Append(tr(HELP_Ripit_dir)); + excludespecialchars[0] = trVDR("no"); + excludespecialchars[1] = ("NTFS"); + excludespecialchars[2] = ("HFS"); + Add(new cMenuEditStraItem( tr("Exclude special Filesystem chars"), &RipitSetup.Ripit_excludespecialchars, 3, excludespecialchars)); + help.Append(tr(HELP_Ripit_excludespecialchars)); + Add(new cMenuEditBoolItem( tr("Use underscores instead of spaces"), &RipitSetup.Ripit_underscores)); + help.Append(tr(HELP_Ripit_underscores)); + Add(new cMenuEditBoolItem( tr("Create playlist"), &RipitSetup.Ripit_playlist)); + help.Append(tr(HELP_Ripit_playlist)); - preset[0] = tr("none"); - preset[1] = tr("low"); - preset[2] = tr("standard"); - preset[3] = tr("great"); - preset[4] = tr("best"); - Add(new cMenuEditStraItem( tr("Presets"), &RipitSetup.Ripit_preset, 5, preset)); - Add(new cMenuEditBoolItem( tr("CRC-check"), &RipitSetup.Ripit_crc)); - Add(new cMenuEditStrItem( tr("More encoder settings"), RipitSetup.Ripit_encopts, 255, allowed)); - Add(new cMenuEditStrItem( tr("Device"), RipitSetup.Ripit_dev, 255, allowed)); - Add(new cMenuEditStrItem( tr("Directory for ripped tracks"), RipitSetup.Ripit_dir, 255, allowed)); - Add(new cMenuEditIntItem( tr("Priority of task (nice)"), &RipitSetup.Ripit_nice, -20, 19)); + SetCurrent(Get(current)); - Add(new cMenuEditBoolItem( tr("Encode remotely"), &RipitSetup.Ripit_remote)); - if(RipitSetup.Ripit_remote) - Add(new cMenuEditStrItem( tr("Options for remote encoding"), RipitSetup.Ripit_remotevalue, 255, allowed)); - SetCurrent(Get(current)); + // Common are: + // Red: <Save&Exit (Yacoto)><About (ripit)> + // Green: <New>|<Save (Yacoto)> + // Yellow: <Help> + // Blue: <open Submenu> + // kInfo: <Help> + if (Current()>-1){ + if (strlen(tr(HELP_ABOUT)) > 0){ + if (strlen(help[Current()])>0) + SetHelp( tr("About"), NULL, tr("Help"), NULL); + else + SetHelp( tr("About"), NULL, NULL, NULL); + }else { + if (strlen(help[Current()])>0) + SetHelp( NULL, NULL, tr("Help"), NULL); + else + SetHelp( NULL, NULL, NULL, NULL); + } + }else{ + if (strlen(tr(HELP_ABOUT)) > 0){ + if (strlen(help[1])>0) + SetHelp( tr("About"), NULL, tr("Help"), NULL); + else + SetHelp( tr("About"), NULL, NULL, NULL); + }else{ + if (strlen(help[1])>0) + SetHelp( NULL, NULL, tr("Help"), NULL); + else + SetHelp( NULL, NULL, NULL, NULL); + } + } Display(); } @@ -281,34 +392,61 @@ void cMenuRipitSetup::Setup(void) void cMenuRipitSetup::Store(void) { - SetupStore("Ripit_hidden", RipitSetup.Ripit_hidden); - SetupStore("Ripit_halt", RipitSetup.Ripit_halt); - SetupStore("Ripit_noquiet", RipitSetup.Ripit_noquiet); - SetupStore("Ripit_eject", RipitSetup.Ripit_eject); - SetupStore("Ripit_fastrip", RipitSetup.Ripit_fastrip); - SetupStore("Ripit_lowbitrate", RipitSetup.Ripit_lowbitrate); - SetupStore("Ripit_maxbitrate", RipitSetup.Ripit_maxbitrate); - SetupStore("Ripit_crc", RipitSetup.Ripit_crc); - SetupStore("Ripit_preset", RipitSetup.Ripit_preset); - SetupStore("Ripit_encopts", RipitSetup.Ripit_encopts); - SetupStore("Ripit_dev", RipitSetup.Ripit_dev); - SetupStore("Ripit_dir", RipitSetup.Ripit_dir); - SetupStore("Ripit_nice", RipitSetup.Ripit_nice); - SetupStore("Ripit_remote", RipitSetup.Ripit_remote); - SetupStore("Ripit_remotevalue", RipitSetup.Ripit_remotevalue); + SetupStore("Ripit_hidden", RipitSetup.Ripit_hidden); + SetupStore("Ripit_lastlog", RipitSetup.Ripit_lastlog); + SetupStore("Ripit_excludespecialchars", RipitSetup.Ripit_excludespecialchars); + SetupStore("Ripit_underscores", RipitSetup.Ripit_underscores); + SetupStore("Ripit_playlist", RipitSetup.Ripit_playlist); + SetupStore("Ripit_verbosity", RipitSetup.Ripit_verbosity); + SetupStore("Ripit_fastrip", RipitSetup.Ripit_fastrip); + SetupStore("Ripit_lowbitrate", RipitSetup.Ripit_lowbitrate); + SetupStore("Ripit_maxbitrate", RipitSetup.Ripit_maxbitrate); + SetupStore("Ripit_crc", RipitSetup.Ripit_crc); + SetupStore("Ripit_encoding_type", RipitSetup.Ripit_encoding_type); + SetupStore("Ripit_oggquality", RipitSetup.Ripit_oggquality); + SetupStore("Ripit_ripopts", RipitSetup.Ripit_ripopts); + SetupStore("Ripit_encopts1", RipitSetup.Ripit_encopts1); + SetupStore("Ripit_encopts2", RipitSetup.Ripit_encopts2); + SetupStore("Ripit_encopts3", RipitSetup.Ripit_encopts3); + SetupStore("Ripit_encopts4", RipitSetup.Ripit_encopts4); + SetupStore("Ripit_encopts5", RipitSetup.Ripit_encopts5); + SetupStore("Ripit_dir", RipitSetup.Ripit_dir); + SetupStore("Ripit_nice", RipitSetup.Ripit_nice); } eOSState cMenuRipitSetup::ProcessKey(eKeys Key) { - int oldvalue = RipitSetup.Ripit_remote; - + + int oldvalue = RipitSetup.Ripit_encoding_type; + eOSState state = cMenuSetupPage::ProcessKey(Key); - if( (Key != kNone) && (RipitSetup.Ripit_remote != oldvalue) ) { + if (oldCurrent != Current()) { + oldCurrent = Current(); + if (strlen(tr(HELP_ABOUT)) > 0) + if (strlen(help[Current()])>0) + SetHelp( tr("About"), NULL, tr("Help"), NULL); + else + SetHelp( tr("About"), NULL, NULL, NULL); + else + if (strlen(help[Current()])>0) + SetHelp( NULL, NULL, tr("Help"), NULL); + else + SetHelp( NULL, NULL, NULL, NULL); + } + + if( (Key != kNone) && (RipitSetup.Ripit_encoding_type != oldvalue) ) { Setup(); } - + + if ((Key == kInfo || Key == kYellow ) && (state == osUnknown) && (strlen(help[Current()])>0)) + return AddSubMenu(new cMenuText(cString::sprintf("%s - %s '%s'", tr("Help"), trVDR("Plugin"), PLUGIN_NAME_I18N), help[Current()])); + + if (strlen(tr(HELP_ABOUT)) > 0) + if ((Key == kRed) && (state == osUnknown)) + return AddSubMenu(new cMenuText(cString::sprintf("%s - %s '%s'", tr("About"), trVDR("Plugin"), PLUGIN_NAME_I18N), tr(HELP_ABOUT) )); + return state; } |
