mirror of
https://github.com/nzbget/nzbget.git
synced 2026-01-14 00:48:07 -05:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
896a7c1988 |
11
ChangeLog
11
ChangeLog
@@ -1,14 +1,3 @@
|
||||
nzbget-9.1:
|
||||
- added full par-scan feature needed to par-check/repair files which
|
||||
were renamed after creation of par-files:
|
||||
- new option <ParScan> to activate full par-scan (always or automatic);
|
||||
- the automatic full par-scan activates if missing files are detected
|
||||
during par-check, this avoids unnecessary full scan for normal
|
||||
(not renamed) par sets;
|
||||
- replaced a browser error message when trying to add local files
|
||||
in IE9 with a better message dialog;
|
||||
- improved the post-processing script to better handle renamed rar-files.
|
||||
|
||||
nzbget-9.0:
|
||||
- changed version naming scheme by removing the leading zero: current
|
||||
version is now called 9.0 instead of 0.9.0 (it's really the 9th major
|
||||
|
||||
10
Options.cpp
10
Options.cpp
@@ -136,7 +136,6 @@ static const char* OPTION_DETAILTARGET = "DetailTarget";
|
||||
static const char* OPTION_LOADPARS = "LoadPars";
|
||||
static const char* OPTION_PARCHECK = "ParCheck";
|
||||
static const char* OPTION_PARREPAIR = "ParRepair";
|
||||
static const char* OPTION_PARSCAN = "ParScan";
|
||||
static const char* OPTION_POSTPROCESS = "PostProcess";
|
||||
static const char* OPTION_POSTCONFIGFILE = "PostConfigFile";
|
||||
static const char* OPTION_NZBPROCESS = "NZBProcess";
|
||||
@@ -341,7 +340,6 @@ Options::Options(int argc, char* argv[])
|
||||
m_eLoadPars = lpAll;
|
||||
m_bParCheck = false;
|
||||
m_bParRepair = false;
|
||||
m_eParScan = psLimited;
|
||||
m_szPostProcess = NULL;
|
||||
m_szPostConfigFilename = NULL;
|
||||
m_szNZBProcess = NULL;
|
||||
@@ -618,7 +616,6 @@ void Options::InitDefault()
|
||||
SetOption(OPTION_LOADPARS, "one");
|
||||
SetOption(OPTION_PARCHECK, "no");
|
||||
SetOption(OPTION_PARREPAIR, "yes");
|
||||
SetOption(OPTION_PARSCAN, "limited");
|
||||
SetOption(OPTION_POSTPROCESS, "");
|
||||
SetOption(OPTION_POSTCONFIGFILE, "");
|
||||
SetOption(OPTION_NZBPROCESS, "");
|
||||
@@ -835,14 +832,9 @@ void Options::InitOptions()
|
||||
|
||||
const char* LoadParsNames[] = { "none", "one", "all", "1", "0" };
|
||||
const int LoadParsValues[] = { lpNone, lpOne, lpAll, lpOne, lpNone };
|
||||
const int LoadParsCount = 5;
|
||||
const int LoadParsCount = 4;
|
||||
m_eLoadPars = (ELoadPars)ParseEnumValue(OPTION_LOADPARS, LoadParsCount, LoadParsNames, LoadParsValues);
|
||||
|
||||
const char* ParScanNames[] = { "limited", "full", "auto" };
|
||||
const int ParScanValues[] = { psLimited, psFull, psAuto };
|
||||
const int ParScanCount = 3;
|
||||
m_eParScan = (EParScan)ParseEnumValue(OPTION_PARSCAN, ParScanCount, ParScanNames, ParScanValues);
|
||||
|
||||
const char* TargetNames[] = { "screen", "log", "both", "none" };
|
||||
const int TargetValues[] = { mtScreen, mtLog, mtBoth, mtNone };
|
||||
const int TargetCount = 4;
|
||||
|
||||
@@ -82,12 +82,6 @@ public:
|
||||
lpOne,
|
||||
lpAll
|
||||
};
|
||||
enum EParScan
|
||||
{
|
||||
psLimited,
|
||||
psFull,
|
||||
psAuto
|
||||
};
|
||||
enum EScriptLogKind
|
||||
{
|
||||
slNone,
|
||||
@@ -194,7 +188,6 @@ private:
|
||||
ELoadPars m_eLoadPars;
|
||||
bool m_bParCheck;
|
||||
bool m_bParRepair;
|
||||
EParScan m_eParScan;
|
||||
char* m_szPostProcess;
|
||||
char* m_szPostConfigFilename;
|
||||
char* m_szNZBProcess;
|
||||
@@ -338,7 +331,6 @@ public:
|
||||
ELoadPars GetLoadPars() { return m_eLoadPars; }
|
||||
bool GetParCheck() { return m_bParCheck; }
|
||||
bool GetParRepair() { return m_bParRepair; }
|
||||
EParScan GetParScan() { return m_eParScan; }
|
||||
const char* GetPostProcess() { return m_szPostProcess; }
|
||||
const char* GetPostConfigFilename() { return m_szPostConfigFilename; }
|
||||
const char* GetNZBProcess() { return m_szNZBProcess; }
|
||||
|
||||
183
ParChecker.cpp
183
ParChecker.cpp
@@ -67,62 +67,10 @@ const char* Par2CmdLineErrStr[] = { "OK",
|
||||
|
||||
class Repairer : public Par2Repairer
|
||||
{
|
||||
private:
|
||||
CommandLine commandLine;
|
||||
|
||||
public:
|
||||
Result PreProcess(const char *szParFilename);
|
||||
Result Process(bool dorepair);
|
||||
|
||||
friend class ParChecker;
|
||||
};
|
||||
|
||||
|
||||
Result Repairer::PreProcess(const char *szParFilename)
|
||||
{
|
||||
#ifdef HAVE_PAR2_BUGFIXES_V2
|
||||
// Ensure linking against the patched version of libpar2
|
||||
BugfixesPatchVersion2();
|
||||
#endif
|
||||
|
||||
bool bFullScan = true;
|
||||
|
||||
if (g_pOptions->GetParScan() == Options::psFull)
|
||||
{
|
||||
char szWildcardParam[1024];
|
||||
strncpy(szWildcardParam, szParFilename, 1024);
|
||||
szWildcardParam[1024-1] = '\0';
|
||||
char* szBasename = Util::BaseFileName(szWildcardParam);
|
||||
if (szBasename != szWildcardParam && strlen(szBasename) > 0)
|
||||
{
|
||||
szBasename[0] = '*';
|
||||
szBasename[1] = '\0';
|
||||
}
|
||||
|
||||
const char* argv[] = { "par2", "r", "-v", "-v", szParFilename, szWildcardParam };
|
||||
if (!commandLine.Parse(6, (char**)argv))
|
||||
{
|
||||
return eInvalidCommandLineArguments;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
const char* argv[] = { "par2", "r", "-v", "-v", szParFilename };
|
||||
if (!commandLine.Parse(5, (char**)argv))
|
||||
{
|
||||
return eInvalidCommandLineArguments;
|
||||
}
|
||||
}
|
||||
|
||||
return Par2Repairer::PreProcess(commandLine);
|
||||
}
|
||||
|
||||
Result Repairer::Process(bool dorepair)
|
||||
{
|
||||
return Par2Repairer::Process(commandLine, dorepair);
|
||||
}
|
||||
|
||||
|
||||
ParChecker::ParChecker()
|
||||
{
|
||||
debug("Creating ParChecker");
|
||||
@@ -135,10 +83,10 @@ ParChecker::ParChecker()
|
||||
m_iFileProgress = 0;
|
||||
m_iStageProgress = 0;
|
||||
m_iExtraFiles = 0;
|
||||
m_iMissingFiles = 0;
|
||||
m_bVerifyingExtraFiles = false;
|
||||
m_bCancelled = false;
|
||||
m_eStage = ptLoadingPars;
|
||||
m_QueuedParFiles.clear();
|
||||
}
|
||||
|
||||
ParChecker::~ParChecker()
|
||||
@@ -159,22 +107,11 @@ ParChecker::~ParChecker()
|
||||
}
|
||||
free(m_szProgressLabel);
|
||||
|
||||
Cleanup();
|
||||
}
|
||||
|
||||
void ParChecker::Cleanup()
|
||||
{
|
||||
for (FileList::iterator it = m_QueuedParFiles.begin(); it != m_QueuedParFiles.end() ;it++)
|
||||
for (QueuedParFiles::iterator it = m_QueuedParFiles.begin(); it != m_QueuedParFiles.end() ;it++)
|
||||
{
|
||||
free(*it);
|
||||
}
|
||||
m_QueuedParFiles.clear();
|
||||
|
||||
for (FileList::iterator it = m_ProcessedFiles.begin(); it != m_ProcessedFiles.end() ;it++)
|
||||
{
|
||||
free(*it);
|
||||
}
|
||||
m_ProcessedFiles.clear();
|
||||
}
|
||||
|
||||
void ParChecker::SetParFilename(const char * szParFilename)
|
||||
@@ -203,12 +140,10 @@ void ParChecker::SetStatus(EStatus eStatus)
|
||||
|
||||
void ParChecker::Run()
|
||||
{
|
||||
Cleanup();
|
||||
m_bRepairNotNeeded = false;
|
||||
m_eStage = ptLoadingPars;
|
||||
m_iProcessedFiles = 0;
|
||||
m_iExtraFiles = 0;
|
||||
m_iMissingFiles = 0;
|
||||
m_bVerifyingExtraFiles = false;
|
||||
m_bCancelled = false;
|
||||
|
||||
@@ -216,7 +151,15 @@ void ParChecker::Run()
|
||||
SetStatus(psWorking);
|
||||
|
||||
debug("par: %s", m_szParFilename);
|
||||
|
||||
CommandLine commandLine;
|
||||
const char* argv[] = { "par2", "r", "-v", "-v", m_szParFilename };
|
||||
if (!commandLine.Parse(5, (char**)argv))
|
||||
{
|
||||
error("Could not start par-check for %s. Par-file: %s", m_szInfoName, m_szParFilename);
|
||||
SetStatus(psFailed);
|
||||
return;
|
||||
}
|
||||
|
||||
Result res;
|
||||
|
||||
Repairer* pRepairer = new Repairer();
|
||||
@@ -232,24 +175,15 @@ void ParChecker::Run()
|
||||
m_iStageProgress = 0;
|
||||
UpdateProgress();
|
||||
|
||||
res = pRepairer->PreProcess(m_szParFilename);
|
||||
res = pRepairer->PreProcess(commandLine);
|
||||
debug("ParChecker: PreProcess-result=%i", res);
|
||||
|
||||
if (res != eSuccess || IsStopped())
|
||||
{
|
||||
if (res == eInvalidCommandLineArguments)
|
||||
{
|
||||
error("Could not start par-check for %s. Par-file: %s", m_szInfoName, m_szParFilename);
|
||||
m_szErrMsg = strdup("Command line could not be parsed");
|
||||
}
|
||||
else
|
||||
{
|
||||
error("Could not verify %s: %s", m_szInfoName, IsStopped() ? "due stopping" : "par2-file could not be processed");
|
||||
m_szErrMsg = strdup("par2-file could not be processed");
|
||||
}
|
||||
error("Could not verify %s: %s", m_szInfoName, IsStopped() ? "due stopping" : "par2-file could not be processed");
|
||||
m_szErrMsg = strdup("par2-file could not be processed");
|
||||
SetStatus(psFailed);
|
||||
delete pRepairer;
|
||||
Cleanup();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -262,20 +196,13 @@ void ParChecker::Run()
|
||||
m_szErrMsg = NULL;
|
||||
|
||||
m_eStage = ptVerifyingSources;
|
||||
res = pRepairer->Process(false);
|
||||
res = pRepairer->Process(commandLine, false);
|
||||
debug("ParChecker: Process-result=%i", res);
|
||||
|
||||
if (!IsStopped() && m_iMissingFiles > 0 && g_pOptions->GetParScan() == Options::psAuto && AddAllFiles())
|
||||
{
|
||||
pRepairer->UpdateVerificationResults();
|
||||
res = pRepairer->Process(false);
|
||||
debug("ParChecker: Process-result=%i", res);
|
||||
}
|
||||
|
||||
if (!IsStopped() && res == eRepairNotPossible && CheckSplittedFragments())
|
||||
{
|
||||
pRepairer->UpdateVerificationResults();
|
||||
res = pRepairer->Process(false);
|
||||
res = pRepairer->Process(commandLine, false);
|
||||
debug("ParChecker: Process-result=%i", res);
|
||||
}
|
||||
|
||||
@@ -340,7 +267,7 @@ void ParChecker::Run()
|
||||
if (bMoreFilesLoaded)
|
||||
{
|
||||
pRepairer->UpdateVerificationResults();
|
||||
res = pRepairer->Process(false);
|
||||
res = pRepairer->Process(commandLine, false);
|
||||
debug("ParChecker: Process-result=%i", res);
|
||||
}
|
||||
}
|
||||
@@ -349,7 +276,6 @@ void ParChecker::Run()
|
||||
{
|
||||
SetStatus(psFailed);
|
||||
delete pRepairer;
|
||||
Cleanup();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -373,7 +299,7 @@ void ParChecker::Run()
|
||||
m_iFilesToRepair = pRepairer->damagedfilecount + pRepairer->missingfilecount;
|
||||
UpdateProgress();
|
||||
|
||||
res = pRepairer->Process(true);
|
||||
res = pRepairer->Process(commandLine, true);
|
||||
debug("ParChecker: Process-result=%i", res);
|
||||
if (res == eSuccess)
|
||||
{
|
||||
@@ -408,18 +334,17 @@ void ParChecker::Run()
|
||||
}
|
||||
|
||||
delete pRepairer;
|
||||
Cleanup();
|
||||
}
|
||||
|
||||
bool ParChecker::LoadMorePars()
|
||||
{
|
||||
m_mutexQueuedParFiles.Lock();
|
||||
FileList moreFiles;
|
||||
QueuedParFiles moreFiles;
|
||||
moreFiles.assign(m_QueuedParFiles.begin(), m_QueuedParFiles.end());
|
||||
m_QueuedParFiles.clear();
|
||||
m_mutexQueuedParFiles.Unlock();
|
||||
|
||||
for (FileList::iterator it = moreFiles.begin(); it != moreFiles.end() ;it++)
|
||||
for (QueuedParFiles::iterator it = moreFiles.begin(); it != moreFiles.end() ;it++)
|
||||
{
|
||||
char* szParFilename = *it;
|
||||
bool loadedOK = ((Repairer*)m_pRepairer)->LoadPacketsFromFile(szParFilename);
|
||||
@@ -513,7 +438,7 @@ bool ParChecker::AddSplittedFragments(const char* szFilename)
|
||||
|
||||
if (!extrafiles.empty())
|
||||
{
|
||||
m_iExtraFiles += extrafiles.size();
|
||||
m_iExtraFiles = extrafiles.size();
|
||||
m_bVerifyingExtraFiles = true;
|
||||
bFragmentsAdded = ((Repairer*)m_pRepairer)->VerifyExtraFiles(extrafiles);
|
||||
m_bVerifyingExtraFiles = false;
|
||||
@@ -522,64 +447,6 @@ bool ParChecker::AddSplittedFragments(const char* szFilename)
|
||||
return bFragmentsAdded;
|
||||
}
|
||||
|
||||
bool ParChecker::AddAllFiles()
|
||||
{
|
||||
info("Performing full par-scan for %s", m_szInfoName);
|
||||
|
||||
char szDirectory[1024];
|
||||
strncpy(szDirectory, m_szParFilename, 1024);
|
||||
szDirectory[1024-1] = '\0';
|
||||
|
||||
char* szBasename = Util::BaseFileName(szDirectory);
|
||||
if (szBasename == szDirectory)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
szBasename[-1] = '\0';
|
||||
|
||||
list<CommandLine::ExtraFile> extrafiles;
|
||||
|
||||
DirBrowser dir(szDirectory);
|
||||
while (const char* filename = dir.Next())
|
||||
{
|
||||
if (strcmp(filename, ".") && strcmp(filename, "..") && strcmp(filename, "_brokenlog.txt"))
|
||||
{
|
||||
bool bAlreadyScanned = false;
|
||||
for (FileList::iterator it = m_ProcessedFiles.begin(); it != m_ProcessedFiles.end(); it++)
|
||||
{
|
||||
const char* szProcessedFilename = *it;
|
||||
if (!strcasecmp(Util::BaseFileName(szProcessedFilename), filename))
|
||||
{
|
||||
bAlreadyScanned = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!bAlreadyScanned)
|
||||
{
|
||||
char fullfilename[1024];
|
||||
snprintf(fullfilename, 1024, "%s%c%s", szDirectory, PATH_SEPARATOR, filename);
|
||||
fullfilename[1024-1] = '\0';
|
||||
|
||||
CommandLine::ExtraFile extrafile(fullfilename, Util::FileSize(fullfilename));
|
||||
extrafiles.push_back(extrafile);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool bFilesAdded = false;
|
||||
|
||||
if (!extrafiles.empty())
|
||||
{
|
||||
m_iExtraFiles += extrafiles.size();
|
||||
m_bVerifyingExtraFiles = true;
|
||||
bFilesAdded = ((Repairer*)m_pRepairer)->VerifyExtraFiles(extrafiles);
|
||||
m_bVerifyingExtraFiles = false;
|
||||
}
|
||||
|
||||
return bFilesAdded;
|
||||
}
|
||||
|
||||
void ParChecker::signal_filename(std::string str)
|
||||
{
|
||||
const char* szStageMessage[] = { "Loading file", "Verifying file", "Repairing file", "Verifying repaired file" };
|
||||
@@ -591,11 +458,6 @@ void ParChecker::signal_filename(std::string str)
|
||||
|
||||
info("%s %s", szStageMessage[m_eStage], str.c_str());
|
||||
|
||||
if (m_eStage == ptLoadingPars || m_eStage == ptVerifyingSources)
|
||||
{
|
||||
m_ProcessedFiles.push_back(strdup(str.c_str()));
|
||||
}
|
||||
|
||||
snprintf(m_szProgressLabel, 1024, "%s %s", szStageMessage[m_eStage], str.c_str());
|
||||
m_szProgressLabel[1024-1] = '\0';
|
||||
m_iFileProgress = 0;
|
||||
@@ -678,7 +540,6 @@ void ParChecker::signal_done(std::string str, int available, int total)
|
||||
else
|
||||
{
|
||||
warn("File %s with %i block(s) is missing", str.c_str(), total);
|
||||
m_iMissingFiles++;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -690,7 +551,7 @@ void ParChecker::Cancel()
|
||||
((Repairer*)m_pRepairer)->cancelled = true;
|
||||
m_bCancelled = true;
|
||||
#else
|
||||
error("Could not cancel par-repair. The program was compiled using version of libpar2 which doesn't support cancelling of par-repair. Please apply libpar2-patches supplied with NZBGet and recompile libpar2 and NZBGet (see README for details).");
|
||||
error("Could not cancel par-repair. The used version of libpar2 does not support the cancelling of par-repair. Libpar2 needs to be patched for that feature to work.");
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@ public:
|
||||
ptVerifyingRepaired,
|
||||
};
|
||||
|
||||
typedef std::deque<char*> FileList;
|
||||
typedef std::deque<char*> QueuedParFiles;
|
||||
|
||||
private:
|
||||
char* m_szInfoName;
|
||||
@@ -62,25 +62,21 @@ private:
|
||||
void* m_pRepairer; // declared as void* to prevent the including of libpar2-headers into this header-file
|
||||
char* m_szErrMsg;
|
||||
bool m_bRepairNotNeeded;
|
||||
FileList m_QueuedParFiles;
|
||||
QueuedParFiles m_QueuedParFiles;
|
||||
Mutex m_mutexQueuedParFiles;
|
||||
bool m_bQueuedParFilesChanged;
|
||||
FileList m_ProcessedFiles;
|
||||
int m_iProcessedFiles;
|
||||
int m_iFilesToRepair;
|
||||
int m_iExtraFiles;
|
||||
int m_iMissingFiles;
|
||||
bool m_bVerifyingExtraFiles;
|
||||
char* m_szProgressLabel;
|
||||
int m_iFileProgress;
|
||||
int m_iStageProgress;
|
||||
bool m_bCancelled;
|
||||
|
||||
void Cleanup();
|
||||
bool LoadMorePars();
|
||||
bool CheckSplittedFragments();
|
||||
bool AddSplittedFragments(const char* szFilename);
|
||||
bool AddAllFiles();
|
||||
void signal_filename(std::string str);
|
||||
void signal_progress(double progress);
|
||||
void signal_done(std::string str, int available, int total);
|
||||
|
||||
@@ -67,9 +67,6 @@
|
||||
/* Define to 1 to use OpenSSL library for TLS/SSL-support. */
|
||||
#undef HAVE_OPENSSL
|
||||
|
||||
/* Define to 1 if libpar2 has recent bugfixes-patch (version 2) */
|
||||
#undef HAVE_PAR2_BUGFIXES_V2
|
||||
|
||||
/* Define to 1 if libpar2 supports cancelling (needs a special patch) */
|
||||
#undef HAVE_PAR2_CANCEL
|
||||
|
||||
|
||||
94
configure
vendored
94
configure
vendored
@@ -1,6 +1,6 @@
|
||||
#! /bin/sh
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# Generated by GNU Autoconf 2.61 for nzbget 9.1.
|
||||
# Generated by GNU Autoconf 2.61 for nzbget 9.0.
|
||||
#
|
||||
# Report bugs to <hugbug@users.sourceforge.net>.
|
||||
#
|
||||
@@ -574,8 +574,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
|
||||
# Identity of this package.
|
||||
PACKAGE_NAME='nzbget'
|
||||
PACKAGE_TARNAME='nzbget'
|
||||
PACKAGE_VERSION='9.1'
|
||||
PACKAGE_STRING='nzbget 9.1'
|
||||
PACKAGE_VERSION='9.0'
|
||||
PACKAGE_STRING='nzbget 9.0'
|
||||
PACKAGE_BUGREPORT='hugbug@users.sourceforge.net'
|
||||
|
||||
ac_unique_file="nzbget.cpp"
|
||||
@@ -1234,7 +1234,7 @@ if test "$ac_init_help" = "long"; then
|
||||
# Omit some internal or obsolete options to make the list less imposing.
|
||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||
cat <<_ACEOF
|
||||
\`configure' configures nzbget 9.1 to adapt to many kinds of systems.
|
||||
\`configure' configures nzbget 9.0 to adapt to many kinds of systems.
|
||||
|
||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||
|
||||
@@ -1305,7 +1305,7 @@ fi
|
||||
|
||||
if test -n "$ac_init_help"; then
|
||||
case $ac_init_help in
|
||||
short | recursive ) echo "Configuration of nzbget 9.1:";;
|
||||
short | recursive ) echo "Configuration of nzbget 9.0:";;
|
||||
esac
|
||||
cat <<\_ACEOF
|
||||
|
||||
@@ -1318,9 +1318,6 @@ Optional Features:
|
||||
curses-library)
|
||||
--disable-parcheck do not include par-check/-repair-support (removes
|
||||
dependency from libpar2- and libsigc-libraries)
|
||||
--disable-libpar2-bugfixes-check
|
||||
do not check if libpar2 has recent bugfixes-patch
|
||||
applied
|
||||
--disable-tls do not use TLS/SSL (removes dependency from
|
||||
TLS/SSL-libraries)
|
||||
--disable-gzip disable gzip-compression/decompression (removes
|
||||
@@ -1447,7 +1444,7 @@ fi
|
||||
test -n "$ac_init_help" && exit $ac_status
|
||||
if $ac_init_version; then
|
||||
cat <<\_ACEOF
|
||||
nzbget configure 9.1
|
||||
nzbget configure 9.0
|
||||
generated by GNU Autoconf 2.61
|
||||
|
||||
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
|
||||
@@ -1461,7 +1458,7 @@ cat >config.log <<_ACEOF
|
||||
This file contains any messages produced by compilers while
|
||||
running configure, to aid debugging if configure makes a mistake.
|
||||
|
||||
It was created by nzbget $as_me 9.1, which was
|
||||
It was created by nzbget $as_me 9.0, which was
|
||||
generated by GNU Autoconf 2.61. Invocation command line was
|
||||
|
||||
$ $0 $@
|
||||
@@ -2257,7 +2254,7 @@ fi
|
||||
|
||||
# Define the identity of the package.
|
||||
PACKAGE=nzbget
|
||||
VERSION=9.1
|
||||
VERSION=9.0
|
||||
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
@@ -7360,77 +7357,6 @@ echo "${ECHO_T}no" >&6; }
|
||||
fi
|
||||
|
||||
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||
|
||||
{ echo "$as_me:$LINENO: checking whether libpar2 has recent bugfixes-patch (version 2)" >&5
|
||||
echo $ECHO_N "checking whether libpar2 has recent bugfixes-patch (version 2)... $ECHO_C" >&6; }
|
||||
cat >conftest.$ac_ext <<_ACEOF
|
||||
/* confdefs.h. */
|
||||
_ACEOF
|
||||
cat confdefs.h >>conftest.$ac_ext
|
||||
cat >>conftest.$ac_ext <<_ACEOF
|
||||
/* end confdefs.h. */
|
||||
#include <libpar2/par2cmdline.h>
|
||||
#include <libpar2/par2repairer.h>
|
||||
class Repairer : public Par2Repairer { void test() { BugfixesPatchVersion2(); } };
|
||||
int
|
||||
main ()
|
||||
{
|
||||
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
_ACEOF
|
||||
rm -f conftest.$ac_objext
|
||||
if { (ac_try="$ac_compile"
|
||||
case "(($ac_try" in
|
||||
*\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
|
||||
*) ac_try_echo=$ac_try;;
|
||||
esac
|
||||
eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
|
||||
(eval "$ac_compile") 2>conftest.er1
|
||||
ac_status=$?
|
||||
grep -v '^ *+' conftest.er1 >conftest.err
|
||||
rm -f conftest.er1
|
||||
cat conftest.err >&5
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); } && {
|
||||
test -z "$ac_cxx_werror_flag" ||
|
||||
test ! -s conftest.err
|
||||
} && test -s conftest.$ac_objext; then
|
||||
{ echo "$as_me:$LINENO: result: yes" >&5
|
||||
echo "${ECHO_T}yes" >&6; }
|
||||
PAR2PATCHV2=yes
|
||||
|
||||
cat >>confdefs.h <<\_ACEOF
|
||||
#define HAVE_PAR2_BUGFIXES_V2 1
|
||||
_ACEOF
|
||||
|
||||
else
|
||||
echo "$as_me: failed program was:" >&5
|
||||
sed 's/^/| /' conftest.$ac_ext >&5
|
||||
|
||||
{ echo "$as_me:$LINENO: result: no" >&5
|
||||
echo "${ECHO_T}no" >&6; }
|
||||
PAR2PATCHV2=no
|
||||
fi
|
||||
|
||||
rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
|
||||
|
||||
if test "$PAR2PATCHV2" = "no" ; then
|
||||
# Check whether --enable-libpar2-bugfixes-check was given.
|
||||
if test "${enable_libpar2_bugfixes_check+set}" = set; then
|
||||
enableval=$enable_libpar2_bugfixes_check; PAR2PATCHCHECK=$enableval
|
||||
else
|
||||
PAR2PATCHCHECK=yes
|
||||
fi
|
||||
|
||||
if test "$PAR2PATCHCHECK" = "yes"; then
|
||||
{ { echo "$as_me:$LINENO: error: Your version of libpar2 doesn't include the recent bugfixes-patch (version 2, updated Dec 3, 2012). Please patch libpar2 with the patches supplied with NZBGet (see README for details). If you cannot patch libpar2, you can use configure parameter --disable-libpar2-bugfixes-check to suppress the check. Please note however that in this case the program may crash during par-check/repair. The patch is highly recommended!" >&5
|
||||
echo "$as_me: error: Your version of libpar2 doesn't include the recent bugfixes-patch (version 2, updated Dec 3, 2012). Please patch libpar2 with the patches supplied with NZBGet (see README for details). If you cannot patch libpar2, you can use configure parameter --disable-libpar2-bugfixes-check to suppress the check. Please note however that in this case the program may crash during par-check/repair. The patch is highly recommended!" >&2;}
|
||||
{ (exit 1); exit 1; }; }
|
||||
fi
|
||||
fi
|
||||
|
||||
else
|
||||
|
||||
cat >>confdefs.h <<\_ACEOF
|
||||
@@ -9093,7 +9019,7 @@ exec 6>&1
|
||||
# report actual input values of CONFIG_FILES etc. instead of their
|
||||
# values after options handling.
|
||||
ac_log="
|
||||
This file was extended by nzbget $as_me 9.1, which was
|
||||
This file was extended by nzbget $as_me 9.0, which was
|
||||
generated by GNU Autoconf 2.61. Invocation command line was
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
@@ -9146,7 +9072,7 @@ Report bugs to <bug-autoconf@gnu.org>."
|
||||
_ACEOF
|
||||
cat >>$CONFIG_STATUS <<_ACEOF
|
||||
ac_cs_version="\\
|
||||
nzbget config.status 9.1
|
||||
nzbget config.status 9.0
|
||||
configured by $0, generated by GNU Autoconf 2.61,
|
||||
with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
|
||||
|
||||
|
||||
30
configure.ac
30
configure.ac
@@ -2,9 +2,9 @@
|
||||
# Process this file with autoconf to produce a configure script.
|
||||
|
||||
AC_PREREQ(2.59)
|
||||
AC_INIT(nzbget, 9.1, hugbug@users.sourceforge.net)
|
||||
AC_INIT(nzbget, 9.0, hugbug@users.sourceforge.net)
|
||||
AC_CANONICAL_SYSTEM
|
||||
AM_INIT_AUTOMAKE(nzbget, 9.1)
|
||||
AM_INIT_AUTOMAKE(nzbget, 9.0)
|
||||
AC_CONFIG_SRCDIR([nzbget.cpp])
|
||||
AC_CONFIG_HEADERS([config.h])
|
||||
|
||||
@@ -338,32 +338,6 @@ if test "$ENABLEPARCHECK" = "yes"; then
|
||||
AC_MSG_RESULT([[yes]])
|
||||
AC_DEFINE([HAVE_PAR2_CANCEL], 1, [Define to 1 if libpar2 supports cancelling (needs a special patch)]),
|
||||
AC_MSG_RESULT([[no]]))
|
||||
|
||||
dnl
|
||||
dnl check if libpar2 has recent bugfixes-patch
|
||||
dnl
|
||||
AC_MSG_CHECKING(whether libpar2 has recent bugfixes-patch (version 2))
|
||||
AC_TRY_COMPILE(
|
||||
[#include <libpar2/par2cmdline.h>]
|
||||
[#include <libpar2/par2repairer.h>]
|
||||
[ class Repairer : public Par2Repairer { void test() { BugfixesPatchVersion2(); } }; ],
|
||||
[],
|
||||
AC_MSG_RESULT([[yes]])
|
||||
PAR2PATCHV2=yes
|
||||
AC_DEFINE([HAVE_PAR2_BUGFIXES_V2], 1, [Define to 1 if libpar2 has recent bugfixes-patch (version 2)]),
|
||||
AC_MSG_RESULT([[no]])
|
||||
PAR2PATCHV2=no)
|
||||
|
||||
if test "$PAR2PATCHV2" = "no" ; then
|
||||
AC_ARG_ENABLE(libpar2-bugfixes-check,
|
||||
[AS_HELP_STRING([--disable-libpar2-bugfixes-check], [do not check if libpar2 has recent bugfixes-patch applied])],
|
||||
[ PAR2PATCHCHECK=$enableval ],
|
||||
[ PAR2PATCHCHECK=yes] )
|
||||
if test "$PAR2PATCHCHECK" = "yes"; then
|
||||
AC_ERROR([Your version of libpar2 doesn't include the recent bugfixes-patch (version 2, updated Dec 3, 2012). Please patch libpar2 with the patches supplied with NZBGet (see README for details). If you cannot patch libpar2, you can use configure parameter --disable-libpar2-bugfixes-check to suppress the check. Please note however that in this case the program may crash during par-check/repair. The patch is highly recommended!])
|
||||
fi
|
||||
fi
|
||||
|
||||
else
|
||||
AC_DEFINE([DISABLE_PARCHECK],1,[Define to 1 to disable smart par-verification and restoration])
|
||||
fi
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
diff -aud -U 5 ../libpar2-0.2-original/par2repairer.cpp ../libpar2-0.2/par2repairer.cpp
|
||||
diff -aud ../libpar2-0.2-original/par2repairer.cpp ../libpar2-0.2/par2repairer.cpp
|
||||
--- ../libpar2-0.2-original/par2repairer.cpp 2006-01-20 18:25:20.000000000 +0100
|
||||
+++ ../libpar2-0.2/par2repairer.cpp 2012-11-30 14:23:31.000000000 +0100
|
||||
@@ -76,10 +76,11 @@
|
||||
++sf;
|
||||
}
|
||||
+++ ../libpar2-0.2/par2repairer.cpp 2008-02-06 12:02:53.226050300 +0100
|
||||
@@ -78,6 +78,7 @@
|
||||
|
||||
delete mainpacket;
|
||||
delete creatorpacket;
|
||||
@@ -11,11 +9,7 @@ diff -aud -U 5 ../libpar2-0.2-original/par2repairer.cpp ../libpar2-0.2/par2repai
|
||||
}
|
||||
|
||||
|
||||
Result Par2Repairer::PreProcess(const CommandLine &commandline)
|
||||
{
|
||||
@@ -1259,11 +1260,11 @@
|
||||
string path;
|
||||
string name;
|
||||
@@ -1261,7 +1262,7 @@
|
||||
DiskFile::SplitFilename(filename, path, name);
|
||||
|
||||
cout << "Target: \"" << name << "\" - missing." << endl;
|
||||
@@ -24,37 +18,12 @@ diff -aud -U 5 ../libpar2-0.2-original/par2repairer.cpp ../libpar2-0.2/par2repai
|
||||
}
|
||||
}
|
||||
|
||||
++sf;
|
||||
}
|
||||
@@ -1802,11 +1803,11 @@
|
||||
<< "\" - no data found."
|
||||
<< endl;
|
||||
@@ -1804,7 +1805,7 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
- sig_done.emit(name,count,sourcefile->GetVerificationPacket()->BlockCount());
|
||||
+ sig_done.emit(name,count, count>0 && sourcefile->GetVerificationPacket() ? sourcefile->GetVerificationPacket()->BlockCount() : 0);
|
||||
+ sig_done.emit(name,count, sourcefile->GetVerificationPacket() ? sourcefile->GetVerificationPacket()->BlockCount() : 0);
|
||||
sig_progress.emit(1000.0);
|
||||
return true;
|
||||
}
|
||||
|
||||
// Find out how much data we have found
|
||||
diff -aud -U 5 ../libpar2-0.2-original/par2repairer.h ../libpar2-0.2/par2repairer.h
|
||||
--- ../libpar2-0.2-original/par2repairer.h 2006-01-20 00:38:27.000000000 +0100
|
||||
+++ ../libpar2-0.2/par2repairer.h 2012-11-30 14:24:46.000000000 +0100
|
||||
@@ -34,10 +34,15 @@
|
||||
sigc::signal<void, std::string> sig_filename;
|
||||
sigc::signal<void, double> sig_progress;
|
||||
sigc::signal<void, ParHeaders*> sig_headers;
|
||||
sigc::signal<void, std::string, int, int> sig_done;
|
||||
|
||||
+ // This method allows to determine whether libpar2 includes the patches
|
||||
+ // ("libpar2-0.2-bugfixes.patch") submitted to libpar2 project.
|
||||
+ // Use the method in configure scripts for detection.
|
||||
+ void BugfixesPatchVersion2() { }
|
||||
+
|
||||
protected:
|
||||
// Steps in verifying and repairing files:
|
||||
|
||||
// Load packets from the specified file
|
||||
bool LoadPacketsFromFile(string filename);
|
||||
|
||||
@@ -1,9 +1,7 @@
|
||||
diff -aud -U 5 ../libpar2-0.2-original/par2repairer.cpp ../libpar2-0.2/par2repairer.cpp
|
||||
--- ../libpar2-0.2-original/par2repairer.cpp 2012-12-03 10:47:04.000000000 +0100
|
||||
+++ ../libpar2-0.2/par2repairer.cpp 2012-12-03 10:48:13.000000000 +0100
|
||||
@@ -50,10 +50,12 @@
|
||||
outputbuffer = 0;
|
||||
|
||||
diff -aud ../libpar2-0.2-original/par2repairer.cpp ../libpar2-0.2/par2repairer.cpp
|
||||
--- ../libpar2-0.2-original/par2repairer.cpp 2008-10-26 19:54:33.000000000 +0100
|
||||
+++ ../libpar2-0.2/par2repairer.cpp 2008-10-29 10:24:48.000000000 +0100
|
||||
@@ -52,6 +52,8 @@
|
||||
noiselevel = CommandLine::nlNormal;
|
||||
headers = new ParHeaders;
|
||||
alreadyloaded = false;
|
||||
@@ -12,11 +10,7 @@ diff -aud -U 5 ../libpar2-0.2-original/par2repairer.cpp ../libpar2-0.2/par2repai
|
||||
}
|
||||
|
||||
Par2Repairer::~Par2Repairer(void)
|
||||
{
|
||||
delete [] (u8*)inputbuffer;
|
||||
@@ -404,10 +406,14 @@
|
||||
{
|
||||
cout << "Loading: " << newfraction/10 << '.' << newfraction%10 << "%\r" << flush;
|
||||
@@ -406,6 +408,10 @@
|
||||
progress = offset;
|
||||
sig_progress.emit(newfraction);
|
||||
|
||||
@@ -27,11 +21,7 @@ diff -aud -U 5 ../libpar2-0.2-original/par2repairer.cpp ../libpar2-0.2/par2repai
|
||||
}
|
||||
}
|
||||
|
||||
// Attempt to read the next packet header
|
||||
PACKET_HEADER header;
|
||||
@@ -582,10 +588,15 @@
|
||||
if (noiselevel > CommandLine::nlQuiet)
|
||||
cout << "No new packets found" << endl;
|
||||
@@ -584,6 +590,11 @@
|
||||
delete diskfile;
|
||||
}
|
||||
|
||||
@@ -43,11 +33,7 @@ diff -aud -U 5 ../libpar2-0.2-original/par2repairer.cpp ../libpar2-0.2/par2repai
|
||||
return true;
|
||||
}
|
||||
|
||||
// Finish loading a recovery packet
|
||||
bool Par2Repairer::LoadRecoveryPacket(DiskFile *diskfile, u64 offset, PACKET_HEADER &header)
|
||||
@@ -831,26 +842,42 @@
|
||||
|
||||
// Load packets from each file that was found
|
||||
@@ -833,9 +844,17 @@
|
||||
for (list<string>::const_iterator s=files->begin(); s!=files->end(); ++s)
|
||||
{
|
||||
LoadPacketsFromFile(*s);
|
||||
@@ -65,10 +51,7 @@ diff -aud -U 5 ../libpar2-0.2-original/par2repairer.cpp ../libpar2-0.2/par2repai
|
||||
}
|
||||
|
||||
{
|
||||
string wildcard = name.empty() ? "*.PAR2" : name + ".*.PAR2";
|
||||
list<string> *files = DiskFile::FindFiles(path, wildcard);
|
||||
|
||||
// Load packets from each file that was found
|
||||
@@ -846,9 +865,17 @@
|
||||
for (list<string>::const_iterator s=files->begin(); s!=files->end(); ++s)
|
||||
{
|
||||
LoadPacketsFromFile(*s);
|
||||
@@ -86,11 +69,7 @@ diff -aud -U 5 ../libpar2-0.2-original/par2repairer.cpp ../libpar2-0.2/par2repai
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -864,13 +891,22 @@
|
||||
// If the filename contains ".par2" anywhere
|
||||
if (string::npos != filename.find(".par2") ||
|
||||
@@ -866,9 +893,18 @@
|
||||
string::npos != filename.find(".PAR2"))
|
||||
{
|
||||
LoadPacketsFromFile(filename);
|
||||
@@ -109,11 +88,7 @@ diff -aud -U 5 ../libpar2-0.2-original/par2repairer.cpp ../libpar2-0.2/par2repai
|
||||
return true;
|
||||
}
|
||||
|
||||
// Check that the packets are consistent and discard any that are not
|
||||
bool Par2Repairer::CheckPacketConsistency(void)
|
||||
@@ -1208,10 +1244,15 @@
|
||||
|
||||
// Start verifying the files
|
||||
@@ -1210,6 +1246,11 @@
|
||||
sf = sortedfiles.begin();
|
||||
while (sf != sortedfiles.end())
|
||||
{
|
||||
@@ -125,11 +100,7 @@ diff -aud -U 5 ../libpar2-0.2-original/par2repairer.cpp ../libpar2-0.2/par2repai
|
||||
// Do we have a source file
|
||||
Par2RepairerSourceFile *sourcefile = *sf;
|
||||
|
||||
// What filename does the file use
|
||||
string filename = sourcefile->TargetFileName();
|
||||
@@ -1560,10 +1601,14 @@
|
||||
if (oldfraction != newfraction)
|
||||
{
|
||||
@@ -1562,6 +1603,10 @@
|
||||
cout << "Scanning: \"" << shortname << "\": " << newfraction/10 << '.' << newfraction%10 << "%\r" << flush;
|
||||
sig_progress.emit(newfraction);
|
||||
|
||||
@@ -140,11 +111,7 @@ diff -aud -U 5 ../libpar2-0.2-original/par2repairer.cpp ../libpar2-0.2/par2repai
|
||||
}
|
||||
}
|
||||
|
||||
// If we fail to find a match, it might be because it was a duplicate of a block
|
||||
// that we have already found.
|
||||
@@ -1649,10 +1694,15 @@
|
||||
return false;
|
||||
}
|
||||
@@ -1651,6 +1696,11 @@
|
||||
}
|
||||
}
|
||||
|
||||
@@ -156,11 +123,7 @@ diff -aud -U 5 ../libpar2-0.2-original/par2repairer.cpp ../libpar2-0.2/par2repai
|
||||
// Get the Full and 16k hash values of the file
|
||||
filechecksummer.GetFileHashes(hashfull, hash16k);
|
||||
|
||||
// Did we make any matches at all
|
||||
if (count > 0)
|
||||
@@ -2289,14 +2339,23 @@
|
||||
if (oldfraction != newfraction)
|
||||
{
|
||||
@@ -2291,10 +2341,19 @@
|
||||
cout << "Repairing: " << newfraction/10 << '.' << newfraction%10 << "%\r" << flush;
|
||||
sig_progress.emit(newfraction);
|
||||
|
||||
@@ -180,11 +143,7 @@ diff -aud -U 5 ../libpar2-0.2-original/par2repairer.cpp ../libpar2-0.2/par2repai
|
||||
++inputblock;
|
||||
++inputindex;
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -2346,13 +2405,22 @@
|
||||
if (oldfraction != newfraction)
|
||||
{
|
||||
@@ -2348,9 +2407,18 @@
|
||||
cout << "Processing: " << newfraction/10 << '.' << newfraction%10 << "%\r" << flush;
|
||||
sig_progress.emit(newfraction);
|
||||
|
||||
@@ -203,11 +162,7 @@ diff -aud -U 5 ../libpar2-0.2-original/par2repairer.cpp ../libpar2-0.2/par2repai
|
||||
++copyblock;
|
||||
++inputblock;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2360,10 +2428,15 @@
|
||||
if (lastopenfile != NULL)
|
||||
{
|
||||
@@ -2362,6 +2430,11 @@
|
||||
lastopenfile->Close();
|
||||
}
|
||||
|
||||
@@ -219,14 +174,10 @@ diff -aud -U 5 ../libpar2-0.2-original/par2repairer.cpp ../libpar2-0.2/par2repai
|
||||
if (noiselevel > CommandLine::nlQuiet)
|
||||
cout << "Writing recovered data\r";
|
||||
|
||||
// For each output block that has been recomputed
|
||||
vector<DataBlock*>::iterator outputblock = outputblocks.begin();
|
||||
diff -aud -U 5 ../libpar2-0.2-with-bugfixes-patch/par2repairer.h ../libpar2-0.2/par2repairer.h
|
||||
--- ../libpar2-0.2-original/par2repairer.h 2012-12-03 10:47:04.000000000 +0100
|
||||
+++ ../libpar2-0.2/par2repairer.h 2012-12-03 10:48:13.000000000 +0100
|
||||
@@ -186,8 +186,9 @@
|
||||
|
||||
u64 progress; // How much data has been processed.
|
||||
diff -aud ../libpar2-0.2-original/par2repairer.h ../libpar2-0.2/par2repairer.h
|
||||
--- ../libpar2-0.2-original/par2repairer.h 2006-01-20 00:38:27.000000000 +0100
|
||||
+++ ../libpar2-0.2/par2repairer.h 2008-10-26 19:01:08.000000000 +0100
|
||||
@@ -183,6 +183,7 @@
|
||||
u64 totaldata; // Total amount of data to be processed.
|
||||
u64 totalsize; // Total data size
|
||||
|
||||
|
||||
@@ -258,19 +258,6 @@ if (ls *.rar >/dev/null 2>&1); then
|
||||
rmdir extracted
|
||||
fi
|
||||
|
||||
|
||||
# If there were nothing to unrar and the download was not par-checked,
|
||||
# we don't know if it's OK. To be sure we force par-check.
|
||||
# In particular that helps with downloads containing renamed rar-files.
|
||||
# The par-repair will rename files to correct names, then we can unpack.
|
||||
if [ "$Unrared" -eq 0 -a "$NZBPP_PARSTATUS" -eq 0 ]; then
|
||||
if (ls *.[pP][aA][rR]2 >/dev/null 2>&1); then
|
||||
echo "[INFO] Post-Process: No rar-files found, requesting par-check"
|
||||
exit $POSTPROCESS_PARCHECK_ALL
|
||||
fi
|
||||
fi
|
||||
|
||||
|
||||
# If download contains only nzb-files move them into nzb-directory
|
||||
# for further download
|
||||
# Check if command "wc" exists
|
||||
|
||||
17
nzbget.conf
17
nzbget.conf
@@ -732,23 +732,6 @@ ParCheck=no
|
||||
# resources and time on a slow computers.
|
||||
ParRepair=yes
|
||||
|
||||
# What files should be scanned during par-verification (limited,
|
||||
# full, auto).
|
||||
#
|
||||
# limited - scan only files belonging to the par-set;
|
||||
# full - scan all files in the directory. This helps if the
|
||||
# files were renamed after creating of par-set.
|
||||
# auto - a limited scan is performed first. If the par-checker
|
||||
# detects missing files, it scans all files in the
|
||||
# directory which were not scanned yet.
|
||||
#
|
||||
# NOTE: for par-check/repair NZBGet uses library libpar2. The last and
|
||||
# widely used version 0.2 of the library has few bugs, sometimes causing
|
||||
# a crash of the program. This is especially true when using "full" or
|
||||
# "auto" par-scan. NZBGet is supplied with patches addressing these
|
||||
# issues. Please apply the patches to libpar2 and recompile it.
|
||||
ParScan=limited
|
||||
|
||||
# Use only par2-files with matching names (yes, no).
|
||||
#
|
||||
# If par-check needs extra par-blocks it searches for par2-files
|
||||
|
||||
@@ -175,11 +175,6 @@ var Upload = (new function($)
|
||||
|
||||
function fileSelectHandler(event)
|
||||
{
|
||||
if (!event.target.files)
|
||||
{
|
||||
alert("Unfortunately your browser doesn't support direct access to local files.\n\nPlease use alternative ways to add files to queue:\nadd via URL or put the files directly into incoming nzb-directory.");
|
||||
return;
|
||||
}
|
||||
addFiles(event.target.files);
|
||||
}
|
||||
|
||||
|
||||
7
win32.h
7
win32.h
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* This file is part of nzbget
|
||||
*
|
||||
* Copyright (C) 2007-2013 Andrey Prygunkov <hugbug@users.sourceforge.net>
|
||||
* Copyright (C) 2007-2010 Andrey Prygunkov <hugbug@users.sourceforge.net>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
@@ -57,9 +57,6 @@
|
||||
/* Define to 1 if libpar2 supports cancelling (needs a special patch) */
|
||||
#define HAVE_PAR2_CANCEL
|
||||
|
||||
/* Define to 1 if libpar2 has bugfixes applied (needs a special patch) */
|
||||
#define HAVE_PAR2_BUGFIXES_V2
|
||||
|
||||
/* Define to 1 if function GetAddrInfo is supported */
|
||||
#define HAVE_GETADDRINFO
|
||||
|
||||
@@ -72,7 +69,7 @@
|
||||
/* Define to 1 if spinlocks are supported */
|
||||
#define HAVE_SPINLOCK
|
||||
|
||||
#define VERSION "9.1"
|
||||
#define VERSION "9.0-testing"
|
||||
|
||||
/* Suppress warnings */
|
||||
#define _CRT_SECURE_NO_DEPRECATE
|
||||
|
||||
Reference in New Issue
Block a user