Compare commits

...

25 Commits

Author SHA1 Message Date
Andrey Prygunkov
b0d35f9a09 updated version string to "21.1" 2021-06-03 16:55:57 +02:00
Andrey Prygunkov
ce7cd631c2 updated ChangeLog for v21.1 2021-06-03 14:20:06 +02:00
Andrey Prygunkov
0432cf13d3 #715: improved reporting for binding errors
on Windows
2021-04-23 20:24:42 +02:00
Andrey Prygunkov
799de88b3e #704: corrected line endings 2021-04-22 20:59:47 +02:00
Andrey Prygunkov
7ff3251dcf #682: allow special characters in URL for username and password 2021-04-21 20:20:21 +02:00
Andrey Prygunkov
97ae03bbd3 #704: corrected icon in Windows "uninstall program" list 2021-04-21 18:12:30 +02:00
Captain Trips
6bbfb6b7b7 #736: cast time_t to int for printf (#742)
This fixes crashes on systems with 64-bit time_t.
2021-04-20 23:56:23 +02:00
Andrey Prygunkov
f02bbbefd7 #725: set SameSite attribute for cooikes 2021-04-19 20:45:04 +02:00
Andrey Prygunkov
4d19c899bd #749, #688: fixed crash on windows 2021-04-18 21:36:53 +02:00
Andrey Prygunkov
1d008bd1f5 #748: removed outdated links from web interface
and merged Info and About tabs
2021-04-15 22:17:00 +02:00
Andrey Prygunkov
8c1e62ef49 fixed #731: file selector in WebKit based browsers doesn't allow to choose the same file again 2021-04-15 21:28:47 +02:00
Andrey Prygunkov
e18c25c231 #747: updated url of the global certificate storage file
in the build scripts
2021-04-15 20:55:20 +02:00
Lucas Held
6dbe6edbab #739: fixed processing of group command in nserv 2021-04-15 01:43:29 +02:00
Andrey Prygunkov
1ee8e02586 #745: fixed crash caused by malformed nzb files
: for file elements not having subject attribute a (somewhat) random
subject is generated and is used as file name; correct file names are
read from articles later anyway
2021-04-15 01:26:36 +02:00
Andrey Prygunkov
f8f9dd2b6d #720: fixed file allocating
on file systems where sparse files are not supported
2020-11-01 16:59:38 +01:00
Andrey Prygunkov
414ffcbc35 #688: always using dirbrowser snapshot
to fix issues with leftovers on cleanup
2020-05-21 18:42:42 +02:00
Andrey Prygunkov
0522b5f49d #694: support new error messages in unrar 5.80 2020-04-20 21:03:56 +02:00
Disconnect3d
575b823758 #679: fix strncasecmp size parameter off by ones 2020-04-20 19:36:01 +02:00
Andrey Prygunkov
a124a91a84 fixed #693: negative values for "FileSizeLo" in JSON-RPC 2020-04-20 19:32:15 +02:00
Sander
4546b0f368 #650, #651: corrected space characters in one js-file 2019-06-29 23:44:57 +02:00
Andrey Prygunkov
625e7a61e1 #648: update license text
because of change of Free Software Foundation address but also includes
minor formatting changes.
2019-06-22 22:01:13 +02:00
Andrey Prygunkov
f1c1373c7d #637: nzbget version on about page 2019-05-13 18:20:51 +02:00
pfidr34
5dda6b2e49 #634: correct typo in about dialog of web interface 2019-05-10 20:27:12 +02:00
Andrey Prygunkov
81aa56324f #635: fixed PC sleep mode not working (Windows only) 2019-05-09 23:20:00 +02:00
Andrey Prygunkov
a8533e7f0a updated version string to "21.1-testing" 2019-05-09 22:30:00 +02:00
26 changed files with 239 additions and 266 deletions

41
COPYING
View File

@@ -1,12 +1,12 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
@@ -15,7 +15,7 @@ software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
@@ -55,8 +55,8 @@ patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
@@ -110,7 +110,7 @@ above, provided that you also meet all of these conditions:
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
@@ -168,7 +168,7 @@ access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
@@ -225,7 +225,7 @@ impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
@@ -255,7 +255,7 @@ make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
@@ -277,9 +277,9 @@ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
@@ -303,10 +303,9 @@ the "copyright" line and a pointer to where the full notice is found.
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
@@ -336,5 +335,5 @@ necessary. Here is a sample; alter the names:
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.
library. If this is what you want to do, use the GNU Lesser General
Public License instead of this License.

View File

@@ -1,3 +1,32 @@
nzbget-21.1:
- fixed crash on systems with 64-bit time;
- corrected icon in Windows "uninstall program" list;
- allow special characters in URL for username and password;
- improved reporting for binding errors on Windows;
- fixed unicode space characters in javascript files, which could cause issues
with nginx proxy;
- fixed negative values for "FileSizeLo" in json-rpc;
- corrected url detection in rpc-method "append";
- added support for new error messages in unrar 5.80;
- now always using snapshots when reading directory contents:
- in previous versions snapshots were used on macOS only;
- now they are used on all OSes;
- this solves issue with leftovers during directory cleanup, which could
happen on certain OSes when working with network drives;
- fixed file allocating on file systems where sparse files are not supported:
- the issue could happen when InterDir was located on a network drive;
- fixed crash caused by malformed nzb files;
- fixed GROUP command in nserv;
- updated url of the global certificate storage file in the build scripts;
- fixed: file selector in WebKit based browsers doesn't allow to choose the
same file again;
- removed outdated links from web interface;
- fixed PC sleep mode not working (Windows only);
- set "SameSite" attribute for cookies;
- corrected typo in about dialog of web interface;
- updated license text: changed address of Free Software Foundation and minor
formatting changes.
nzbget-21.0:
- reworked duplicate handling to support URLs, especially when using RSS
feeds:

View File

@@ -11,14 +11,9 @@
NZBGet is a binary downloader, which downloads files from Usenet
based on information given in nzb-files.
NZBGet is written in C++ and is known for its extraordinary performance and efficiency.
NZBGet is written in C++ and is known for its performance and efficiency.
NZBGet can be run on almost every device - classic PCs, NAS, media players, SAT-receivers, WLAN-routers, etc.
The download area provides precompiled binaries
for Windows, macOS, Linux (compatible with many CPUs and platform variants), FreeBSD and Android. For other platforms
the program can be compiled from sources.
- [Home page (nzbget.net)](http://nzbget.net) - learn more about NZBGet;
- [Downloads](http://nzbget.net/download) - get compiled binaries and sources;
- [Documentation](http://nzbget.net/documentation) - installation manuals, HOW-TOs, API;
- [Forum](http://forum.nzbget.net) - get support, share your ideas, scripts, add-ons.
NZBGet can run on almost any device - classic PC, NAS, media player, SAT-receiver, WLAN-router, etc.
The download area provides precompiled binaries for Windows, macOS, Linux (compatible with
many CPUs and platform variants), FreeBSD and Android. For other platforms
the program can be compiled from sources.

View File

@@ -3,10 +3,6 @@
/* Define to 1 to include debug-code */
#undef DEBUG
/* Define to 1 if deleting of files during reading of directory is not
properly supported by OS */
#undef DIRBROWSER_SNAPSHOT
/* Define to 1 to not use curses */
#undef DISABLE_CURSES

34
configure vendored
View File

@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.69 for nzbget 21.0.
# Generated by GNU Autoconf 2.69 for nzbget 21.1.
#
# Report bugs to <hugbug@users.sourceforge.net>.
#
@@ -580,8 +580,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='nzbget'
PACKAGE_TARNAME='nzbget'
PACKAGE_VERSION='21.0'
PACKAGE_STRING='nzbget 21.0'
PACKAGE_VERSION='21.1'
PACKAGE_STRING='nzbget 21.1'
PACKAGE_BUGREPORT='hugbug@users.sourceforge.net'
PACKAGE_URL=''
@@ -1348,7 +1348,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 21.0 to adapt to many kinds of systems.
\`configure' configures nzbget 21.1 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1419,7 +1419,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
short | recursive ) echo "Configuration of nzbget 21.0:";;
short | recursive ) echo "Configuration of nzbget 21.1:";;
esac
cat <<\_ACEOF
@@ -1584,7 +1584,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
nzbget configure 21.0
nzbget configure 21.1
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2053,7 +2053,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 21.0, which was
It was created by nzbget $as_me 21.1, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3026,7 +3026,7 @@ fi
# Define the identity of the package.
PACKAGE='nzbget'
VERSION='21.0'
VERSION='21.1'
cat >>confdefs.h <<_ACEOF
@@ -6611,20 +6611,6 @@ _ACEOF
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether dir-browser snapshot workaround is needed" >&5
$as_echo_n "checking whether dir-browser snapshot workaround is needed... " >&6; }
if test "$target_vendor" == "apple"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
$as_echo "yes" >&6; }
$as_echo "#define DIRBROWSER_SNAPSHOT 1" >>confdefs.h
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for cpu cores via sysconf" >&5
$as_echo_n "checking for cpu cores via sysconf... " >&6; }
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -9177,7 +9163,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=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 21.0, which was
This file was extended by nzbget $as_me 21.1, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -9243,7 +9229,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
nzbget config.status 21.0
nzbget config.status 21.1
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"

View File

@@ -1,7 +1,7 @@
#
# This file is part of nzbget. See <http://nzbget.net>.
#
# Copyright (C) 2008-2019 Andrey Prygunkov <hugbug@users.sourceforge.net>
# Copyright (C) 2008-2021 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
@@ -21,7 +21,7 @@
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.65)
AC_INIT(nzbget, 21.0, hugbug@users.sourceforge.net)
AC_INIT(nzbget, 21.1, hugbug@users.sourceforge.net)
AC_CONFIG_AUX_DIR(posix)
AC_CANONICAL_TARGET
AM_INIT_AUTOMAKE([foreign subdir-objects])
@@ -222,18 +222,6 @@ AC_TRY_COMPILE([
AC_DEFINE_UNQUOTED(SOCKLEN_T, $SOCKLEN_T, [Determine what socket length (socklen_t) data type is])
dnl
dnl Dir-browser's snapshot
dnl
AC_MSG_CHECKING(whether dir-browser snapshot workaround is needed)
if test "$target_vendor" == "apple"; then
AC_MSG_RESULT([[yes]])
AC_DEFINE([DIRBROWSER_SNAPSHOT], 1, [Define to 1 if deleting of files during reading of directory is not properly supported by OS])
else
AC_MSG_RESULT([[no]])
fi
dnl
dnl check cpu cores via sysconf
dnl

View File

@@ -209,6 +209,8 @@ bool Connection::Bind()
return true;
}
int errcode = 0;
#ifndef WIN32
if (m_host && m_host[0] == '/')
{
@@ -280,6 +282,7 @@ bool Connection::Bind()
break;
}
// Connection failed
errcode = GetLastNetworkError();
closesocket(m_socket);
m_socket = INVALID_SOCKET;
}
@@ -320,6 +323,7 @@ bool Connection::Bind()
if (res == -1)
{
// Connection failed
errcode = GetLastNetworkError();
closesocket(m_socket);
m_socket = INVALID_SOCKET;
}
@@ -328,7 +332,7 @@ bool Connection::Bind()
if (m_socket == INVALID_SOCKET)
{
ReportError("Binding socket failed for %s", m_host, true);
ReportError("Binding socket failed for %s", m_host, true, errcode);
return false;
}
@@ -785,18 +789,15 @@ bool Connection::ConnectWithTimeout(void* address, int address_len)
ret = connect(m_socket, (struct sockaddr*)address, address_len);
if (ret < 0)
{
int err = GetLastNetworkError();
#ifdef WIN32
int err = WSAGetLastError();
if (err != WSAEWOULDBLOCK)
{
return false;
}
#else
if (errno != EINPROGRESS)
if (err != EINPROGRESS)
#endif
{
return false;
}
#endif
}
//connect succeeded right away?
@@ -916,7 +917,16 @@ void Connection::Cancel()
}
}
void Connection::ReportError(const char* msgPrefix, const char* msgArg, bool PrintErrCode, int herrno, const char* herrMsg)
int Connection::GetLastNetworkError()
{
#ifdef WIN32
return WSAGetLastError();
#else
return errno;
#endif
}
void Connection::ReportError(const char* msgPrefix, const char* msgArg, bool printErrCode, int errCode, const char* errMsg)
{
#ifndef DISABLE_TLS
if (m_tlsError)
@@ -929,34 +939,34 @@ void Connection::ReportError(const char* msgPrefix, const char* msgArg, bool Pri
BString<1024> errPrefix(msgPrefix, msgArg);
if (PrintErrCode)
if (printErrCode)
{
#ifdef WIN32
int ErrCode = WSAGetLastError();
char errMsg[1024];
errMsg[0] = '\0';
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, nullptr, ErrCode, 0, errMsg, 1024, nullptr);
errMsg[1024-1] = '\0';
#else
const char* errMsg = herrMsg;
int ErrCode = herrno;
if (herrno == 0)
BString<1024> printErrMsg;
if (errCode == 0)
{
ErrCode = errno;
errMsg = strerror(ErrCode);
errCode = GetLastNetworkError();
}
else if (!herrMsg)
if (errMsg)
{
errMsg = hstrerror(ErrCode);
}
#endif
if (m_suppressErrors)
{
debug("%s: ErrNo %i, %s", *errPrefix, ErrCode, errMsg);
printErrMsg = errMsg;
}
else
{
PrintError(BString<1024>("%s: ErrNo %i, %s", *errPrefix, ErrCode, errMsg));
#ifdef WIN32
FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, nullptr, errCode, 0, printErrMsg, printErrMsg.Capacity(), nullptr);
printErrMsg[1024-1] = '\0';
#else
printErrMsg = strerror(errCode);
#endif
}
if (m_suppressErrors)
{
debug("%s: Error %i - %s", *errPrefix, errCode, (const char*)printErrMsg);
}
else
{
PrintError(BString<1024>("%s: Error %i - %s", *errPrefix, errCode, (const char*)printErrMsg));
}
}
else
@@ -1074,7 +1084,7 @@ in_addr_t Connection::ResolveHostAddr(const char* host)
#endif
if (err)
{
ReportError("Could not resolve hostname %s", host, true, h_errnop);
ReportError("Could not resolve hostname %s", host, true, h_errnop, hstrerror(h_errnop));
return INADDR_NONE;
}

View File

@@ -136,9 +136,10 @@ protected:
#endif
#endif
void ReportError(const char* msgPrefix, const char* msgArg, bool PrintErrCode, int herrno = 0,
const char* herrMsg = nullptr);
void ReportError(const char* msgPrefix, const char* msgArg, bool printErrCode, int errCode = 0,
const char* errMsg = nullptr);
virtual void PrintError(const char* errMsg);
int GetLastNetworkError();
bool DoConnect();
bool DoDisconnect();
bool InitSocketOpts(SOCKET socket);

View File

@@ -172,7 +172,7 @@ void NntpProcessor::Run()
}
else if (!strncasecmp(line, "GROUP ", 6))
{
m_connection->WriteLine(CString::FormatStr("211 0 0 0 %s\r\n", line + 7));
m_connection->WriteLine(CString::FormatStr("211 0 0 0 %s\r\n", line + 6));
}
else if (!strncasecmp(line, "AUTHINFO ", 9))
{

View File

@@ -888,7 +888,8 @@ void UnpackController::AddMessage(Message::EKind kind, const char* text)
m_unpackDecryptError = true;
}
if (m_unpacker == upUnrar && !strncmp(text, "Unrar: The specified password is incorrect.", 43))
if (m_unpacker == upUnrar && (!strncmp(text, "Unrar: The specified password is incorrect.", 43) ||
!strncmp(text, "Unrar: Incorrect password for", 29)))
{
m_unpackPasswordError = true;
}

View File

@@ -117,6 +117,12 @@ void NzbFile::ParseSubject(FileInfo* fileInfo, bool TryQuotes)
{
// Example subject: some garbage "title" yEnc (10/99)
if (!fileInfo->GetSubject())
{
// Malformed file element without subject. We generate subject using internal element id.
fileInfo->SetSubject(CString::FormatStr("%d", fileInfo->GetId()));
}
// strip the "yEnc (10/99)"-suffix
BString<1024> subject = fileInfo->GetSubject();
char* end = subject + strlen(subject) - 1;

View File

@@ -253,7 +253,6 @@ void QueueCoordinator::Run()
// sleep longer in StandBy
if (standBy)
{
Util::SetStandByMode(true);
Guard guard(m_waitMutex);
// sleeping max. 2 seconds; can't sleep much longer because we can't rely on
// notifications from 'WorkState' and we also have periodical work to do here
@@ -280,7 +279,7 @@ void QueueCoordinator::Run()
g_StatMeter->IntervalCheck();
g_Log->IntervalCheck();
AdjustDownloadsLimit();
Util::SetStandByMode(false);
Util::SetStandByMode(standBy);
lastReset = Util::CurrentTime();
}
}

View File

@@ -222,18 +222,11 @@ void WebProcessor::ParseUrl()
if (pauth1 && pauth1 < pauth2)
{
char* pstart = m_url + 1;
int len = 0;
char* pend = strchr(pstart + 1, '/');
if (pend)
{
len = (int)(pend - pstart < (int)sizeof(m_authInfo) - 1 ? pend - pstart : (int)sizeof(m_authInfo) - 1);
}
else
{
len = strlen(pstart);
}
char* pend = pauth2;
int len = std::min((int)(pend - pstart), (int)sizeof(m_authInfo) - 1);
strncpy(m_authInfo, pstart, len);
m_authInfo[len] = '\0';
WebUtil::UrlDecode(m_authInfo);
m_url = CString(pend);
}
@@ -466,8 +459,8 @@ void WebProcessor::SendBodyResponse(const char* body, int bodyLen, const char* c
"Access-Control-Allow-Credentials: true\r\n"
"Access-Control-Max-Age: 86400\r\n"
"Access-Control-Allow-Headers: Content-Type, Authorization\r\n"
"Set-Cookie: Auth-Type=%s\r\n"
"Set-Cookie: Auth-Token=%s; HttpOnly\r\n"
"Set-Cookie: Auth-Type=%s; SameSite=Lax\r\n"
"Set-Cookie: Auth-Token=%s; HttpOnly; SameSite=Lax\r\n"
"Content-Length: %i\r\n"
"%s" // Content-Type: xxx
"%s" // Content-Encoding: gzip

View File

@@ -1443,7 +1443,7 @@ void LogXmlCommand::Execute()
AppendCondResponse(",\n", IsJson() && index++ > 0);
AppendFmtResponse(IsJson() ? JSON_LOG_ITEM : XML_LOG_ITEM,
message.GetId(), messageType[message.GetKind()], message.GetTime(),
message.GetId(), messageType[message.GetKind()], (int)message.GetTime(),
*EncodeStr(message.GetText()));
}
@@ -1550,7 +1550,7 @@ void ListFilesXmlCommand::Execute()
AppendCondResponse(",\n", IsJson() && index++ > 0);
AppendFmtResponse(IsJson() ? JSON_LIST_ITEM : XML_LIST_ITEM,
fileInfo->GetId(), fileSizeLo, fileSizeHi, remainingSizeLo, remainingSizeHi,
fileInfo->GetTime(), BoolToStr(fileInfo->GetFilenameConfirmed()),
(int)fileInfo->GetTime(), BoolToStr(fileInfo->GetFilenameConfirmed()),
BoolToStr(fileInfo->GetPaused()), fileInfo->GetNzbInfo()->GetId(),
*xmlNzbNicename, *xmlNzbNicename, *EncodeStr(fileInfo->GetNzbInfo()->GetFilename()),
*EncodeStr(fileInfo->GetSubject()), *EncodeStr(fileInfo->GetFilename()),
@@ -1748,14 +1748,14 @@ void NzbInfoXmlCommand::AppendNzbInfoFields(NzbInfo* nzbInfo)
deleteStatusName[nzbInfo->GetDeleteStatus()], markStatusName[nzbInfo->GetMarkStatus()],
urlStatusName[nzbInfo->GetUrlStatus()],
fileSizeLo, fileSizeHi, fileSizeMB, nzbInfo->GetFileCount(),
nzbInfo->GetMinTime(), nzbInfo->GetMaxTime(),
(int)nzbInfo->GetMinTime(), (int)nzbInfo->GetMaxTime(),
nzbInfo->GetTotalArticles(), nzbInfo->GetCurrentSuccessArticles(), nzbInfo->GetCurrentFailedArticles(),
nzbInfo->CalcHealth(), nzbInfo->CalcCriticalHealth(false),
*EncodeStr(nzbInfo->GetDupeKey()), nzbInfo->GetDupeScore(), dupeModeName[nzbInfo->GetDupeMode()],
BoolToStr(nzbInfo->GetDeleteStatus() != NzbInfo::dsNone),
downloadedSizeLo, downloadedSizeHi, downloadedSizeMB, nzbInfo->GetDownloadSec(),
nzbInfo->GetPostTotalSec() + (nzbInfo->GetPostInfo() && nzbInfo->GetPostInfo()->GetStartTime() ?
Util::CurrentTime() - nzbInfo->GetPostInfo()->GetStartTime() : 0),
(int)(nzbInfo->GetPostTotalSec() + (nzbInfo->GetPostInfo() && nzbInfo->GetPostInfo()->GetStartTime() ?
Util::CurrentTime() - nzbInfo->GetPostInfo()->GetStartTime() : 0)),
nzbInfo->GetParSec(), nzbInfo->GetRepairSec(), nzbInfo->GetUnpackSec(), messageCount, nzbInfo->GetExtraParBlocks());
// Post-processing parameters
@@ -1856,8 +1856,8 @@ void NzbInfoXmlCommand::AppendPostInfoFields(PostInfo* postInfo, int logEntries,
AppendFmtResponse(itemStart, *EncodeStr(postInfo->GetProgressLabel()),
postInfo->GetStageProgress(),
postInfo->GetStageTime() ? curTime - postInfo->GetStageTime() : 0,
postInfo->GetStartTime() ? curTime - postInfo->GetStartTime() : 0);
(int)(postInfo->GetStageTime() ? curTime - postInfo->GetStageTime() : 0),
(int)(postInfo->GetStartTime() ? curTime - postInfo->GetStartTime() : 0));
}
else
{
@@ -1884,7 +1884,7 @@ void NzbInfoXmlCommand::AppendPostInfoFields(PostInfo* postInfo, int logEntries,
AppendCondResponse(",\n", IsJson() && index++ > 0);
AppendFmtResponse(IsJson() ? JSON_LOG_ITEM : XML_LOG_ITEM,
message.GetId(), messageType[message.GetKind()], message.GetTime(),
message.GetId(), messageType[message.GetKind()], (int)message.GetTime(),
*EncodeStr(message.GetText()));
}
}
@@ -2238,7 +2238,7 @@ void DownloadXmlCommand::Execute()
}
}
if (!strncasecmp(nzbContent, "http://", 6) || !strncasecmp(nzbContent, "https://", 7))
if (!strncasecmp(nzbContent, "http://", 7) || !strncasecmp(nzbContent, "https://", 8))
{
// add url
std::unique_ptr<NzbInfo> nzbInfo = std::make_unique<NzbInfo>();
@@ -2464,8 +2464,8 @@ void HistoryXmlCommand::Execute()
"\"Kind\" : \"%s\",\n"
"\"Name\" : \"%s\",\n"
"\"HistoryTime\" : %i,\n"
"\"FileSizeLo\" : %i,\n"
"\"FileSizeHi\" : %i,\n"
"\"FileSizeLo\" : %u,\n"
"\"FileSizeHi\" : %u,\n"
"\"FileSizeMB\" : %i,\n"
"\"DupeKey\" : \"%s\",\n"
"\"DupeScore\" : %i,\n"
@@ -2502,7 +2502,7 @@ void HistoryXmlCommand::Execute()
AppendFmtResponse(IsJson() ? JSON_HISTORY_ITEM_START : XML_HISTORY_ITEM_START,
historyInfo->GetId(), *EncodeStr(historyInfo->GetName()), nzbInfo->GetParkedFileCount(),
BoolToStr(nzbInfo->GetCompletedFiles()->size()), historyInfo->GetTime(), status);
BoolToStr(nzbInfo->GetCompletedFiles()->size()), (int)historyInfo->GetTime(), status);
}
else if (historyInfo->GetKind() == HistoryInfo::hkDup)
{
@@ -2514,7 +2514,7 @@ void HistoryXmlCommand::Execute()
AppendFmtResponse(IsJson() ? JSON_HISTORY_DUP_ITEM : XML_HISTORY_DUP_ITEM,
historyInfo->GetId(), historyInfo->GetId(), "DUP", *EncodeStr(historyInfo->GetName()),
historyInfo->GetTime(), fileSizeLo, fileSizeHi, fileSizeMB,
(int)historyInfo->GetTime(), fileSizeLo, fileSizeHi, fileSizeMB,
*EncodeStr(dupInfo->GetDupeKey()), dupInfo->GetDupeScore(),
dupeModeName[dupInfo->GetDupeMode()], dupStatusName[dupInfo->GetStatus()],
status);
@@ -2836,8 +2836,8 @@ void ViewFeedXmlCommand::Execute()
"<member><name>Title</name><value><string>%s</string></value></member>\n"
"<member><name>Filename</name><value><string>%s</string></value></member>\n"
"<member><name>URL</name><value><string>%s</string></value></member>\n"
"<member><name>SizeLo</name><value><i4>%i</i4></value></member>\n"
"<member><name>SizeHi</name><value><i4>%i</i4></value></member>\n"
"<member><name>SizeLo</name><value><i4>%u</i4></value></member>\n"
"<member><name>SizeHi</name><value><i4>%u</i4></value></member>\n"
"<member><name>SizeMB</name><value><i4>%i</i4></value></member>\n"
"<member><name>Category</name><value><string>%s</string></value></member>\n"
"<member><name>AddCategory</name><value><string>%s</string></value></member>\n"
@@ -2857,8 +2857,8 @@ void ViewFeedXmlCommand::Execute()
"\"Title\" : \"%s\",\n"
"\"Filename\" : \"%s\",\n"
"\"URL\" : \"%s\",\n"
"\"SizeLo\" : %i,\n"
"\"SizeHi\" : %i,\n"
"\"SizeLo\" : %u,\n"
"\"SizeHi\" : %u,\n"
"\"SizeMB\" : %i,\n"
"\"Category\" : \"%s\",\n"
"\"AddCategory\" : \"%s\",\n"
@@ -2893,7 +2893,7 @@ void ViewFeedXmlCommand::Execute()
*EncodeStr(feedItemInfo.GetTitle()), *EncodeStr(feedItemInfo.GetFilename()),
*EncodeStr(feedItemInfo.GetUrl()), sizeLo, sizeHi, sizeMB,
*EncodeStr(feedItemInfo.GetCategory()), *EncodeStr(feedItemInfo.GetAddCategory()),
BoolToStr(feedItemInfo.GetPauseNzb()), feedItemInfo.GetPriority(), feedItemInfo.GetTime(),
BoolToStr(feedItemInfo.GetPauseNzb()), feedItemInfo.GetPriority(), (int)feedItemInfo.GetTime(),
matchStatusType[feedItemInfo.GetMatchStatus()], feedItemInfo.GetMatchRule(),
*EncodeStr(feedItemInfo.GetDupeKey()), feedItemInfo.GetDupeScore(),
dupeModeType[feedItemInfo.GetDupeMode()], statusType[feedItemInfo.GetStatus()]);
@@ -3119,11 +3119,11 @@ void ServerVolumesXmlCommand::Execute()
"\"ServerID\" : %i,\n"
"\"DataTime\" : %i,\n"
"\"FirstDay\" : %i,\n"
"\"TotalSizeLo\" : %i,\n"
"\"TotalSizeHi\" : %i,\n"
"\"TotalSizeLo\" : %u,\n"
"\"TotalSizeHi\" : %u,\n"
"\"TotalSizeMB\" : %i,\n"
"\"CustomSizeLo\" : %i,\n"
"\"CustomSizeHi\" : %i,\n"
"\"CustomSizeLo\" : %u,\n"
"\"CustomSizeHi\" : %u,\n"
"\"CustomSizeMB\" : %i,\n"
"\"CustomTime\" : %i,\n"
"\"SecSlot\" : %i,\n"

View File

@@ -304,10 +304,29 @@ bool FileSystem::AllocateFile(const char* filename, int64 size, bool sparse, CSt
errmsg = GetLastErrorMessage();
return false;
}
char c = '0';
fwrite(&c, 1, size, file);
// write zeros in 16K chunks
CharBuffer zeros(16 * 1024);
memset(zeros, 0, zeros.Size());
for (int64 remaining = size; remaining > 0;)
{
int64 needbytes = std::min(remaining, (int64)zeros.Size());
int64 written = fwrite(zeros, 1, needbytes, file);
if (written != needbytes)
{
errmsg = GetLastErrorMessage();
fclose(file);
return false;
}
remaining -= written;
}
fclose(file);
ok = FileSize(filename) == size;
if (!ok)
{
errmsg = "created file has wrong size";
}
}
#endif
return ok;
@@ -1020,52 +1039,9 @@ CString FileSystem::WidePathToUtfPath(const wchar_t* wpath)
#endif
#ifdef WIN32
DirBrowser::DirBrowser(const char* path)
{
BString<1024> mask("%s%c*.*", path, PATH_SEPARATOR);
m_file = FindFirstFileW(FileSystem::UtfPathToWidePath(mask), &m_findData);
m_first = true;
}
DirBrowser::~DirBrowser()
{
if (m_file != INVALID_HANDLE_VALUE)
{
FindClose(m_file);
}
}
const char* DirBrowser::InternNext()
{
bool ok = false;
if (m_first)
{
ok = m_file != INVALID_HANDLE_VALUE;
m_first = false;
}
else
{
ok = FindNextFileW(m_file, &m_findData) != 0;
}
if (ok)
{
m_filename = FileSystem::WidePathToUtfPath(m_findData.cFileName);
return m_filename;
}
return nullptr;
}
#else
#ifdef DIRBROWSER_SNAPSHOT
DirBrowser::DirBrowser(const char* path, bool snapshot) :
m_snapshot(snapshot)
#else
DirBrowser::DirBrowser(const char* path)
#endif
{
#ifdef DIRBROWSER_SNAPSHOT
if (m_snapshot)
{
DirBrowser dir(path, false);
@@ -1076,35 +1052,57 @@ DirBrowser::DirBrowser(const char* path)
m_snapshotIter = m_snapshotFiles.begin();
}
else
#endif
{
#ifdef WIN32
BString<1024> mask("%s%c*.*", path, PATH_SEPARATOR);
m_file = FindFirstFileW(FileSystem::UtfPathToWidePath(mask), &m_findData);
m_first = true;
#else
m_dir = opendir(path);
#endif
}
}
DirBrowser::~DirBrowser()
{
#ifdef DIRBROWSER_SNAPSHOT
if (!m_snapshot)
#endif
#ifdef WIN32
if (m_file != INVALID_HANDLE_VALUE)
{
if (m_dir)
{
closedir(m_dir);
}
FindClose(m_file);
}
#else
if (m_dir)
{
closedir(m_dir);
}
#endif
}
const char* DirBrowser::InternNext()
{
#ifdef DIRBROWSER_SNAPSHOT
if (m_snapshot)
{
return m_snapshotIter == m_snapshotFiles.end() ? nullptr : **m_snapshotIter++;
}
else
#endif
{
#ifdef WIN32
bool ok = false;
if (m_first)
{
ok = m_file != INVALID_HANDLE_VALUE;
m_first = false;
}
else
{
ok = FindNextFileW(m_file, &m_findData) != 0;
}
if (ok)
{
m_filename = FileSystem::WidePathToUtfPath(m_findData.cFileName);
return m_filename;
}
#else
if (m_dir)
{
m_findData = readdir(m_dir);
@@ -1113,10 +1111,10 @@ const char* DirBrowser::InternNext()
return m_findData->d_name;
}
}
#endif
return nullptr;
}
}
#endif
const char* DirBrowser::Next()
{

View File

@@ -84,18 +84,14 @@ public:
class DirBrowser
{
public:
#ifdef DIRBROWSER_SNAPSHOT
DirBrowser(const char* path, bool snapshot = true);
#else
DirBrowser(const char* path);
#endif
~DirBrowser();
const char* Next();
private:
#ifdef WIN32
WIN32_FIND_DATAW m_findData;
HANDLE m_file;
HANDLE m_file = INVALID_HANDLE_VALUE;
bool m_first;
CString m_filename;
#else
@@ -103,12 +99,10 @@ private:
struct dirent* m_findData;
#endif
#ifdef DIRBROWSER_SNAPSHOT
bool m_snapshot;
typedef std::deque<CString> FileList;
FileList m_snapshotFiles;
FileList::iterator m_snapshotIter;
#endif
const char* InternNext();
};

View File

@@ -183,7 +183,7 @@ UpdateFromRepository()
echo "Updating root certificates"
cd ../setup
curl --remote-name --time-cond cacert.pem https://curl.haxx.se/ca/cacert.pem
curl --remote-name --time-cond cacert.pem https://curl.se/ca/cacert.pem
cd $BUILDDIR
fi
}

View File

@@ -80,7 +80,7 @@
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>.\daemon\connect;.\daemon\extension;.\daemon\feed;.\daemon\frontend;.\daemon\main;.\daemon\nserv;.\daemon\nntp;.\daemon\postprocess;.\daemon\queue;.\daemon\remote;.\daemon\util;.\daemon\windows;.\lib\par2;.\lib\yencode;.\windows\resources;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;PACKAGE="nzbget";VERSION="21.0";_DEBUG;_CONSOLE;DEBUG;_WIN32_WINNT=0x0403;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;PACKAGE="nzbget";VERSION="21.1";_DEBUG;_CONSOLE;DEBUG;_WIN32_WINNT=0x0403;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>false</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
@@ -101,7 +101,7 @@
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>.\daemon\connect;.\daemon\extension;.\daemon\feed;.\daemon\frontend;.\daemon\main;.\daemon\nserv;.\daemon\nntp;.\daemon\postprocess;.\daemon\queue;.\daemon\remote;.\daemon\util;.\daemon\windows;.\lib\par2;.\lib\yencode;.\windows\resources;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;PACKAGE="nzbget";VERSION="21.0";_DEBUG;_CONSOLE;DEBUG;_WIN32_WINNT=0x0403;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;PACKAGE="nzbget";VERSION="21.1";_DEBUG;_CONSOLE;DEBUG;_WIN32_WINNT=0x0403;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>false</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
@@ -120,7 +120,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>.\daemon\connect;.\daemon\extension;.\daemon\feed;.\daemon\frontend;.\daemon\main;.\daemon\nserv;.\daemon\nntp;.\daemon\postprocess;.\daemon\queue;.\daemon\remote;.\daemon\util;.\daemon\windows;.\lib\par2;.\lib\yencode;.\windows\resources;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;PACKAGE="nzbget";VERSION="21.0";NDEBUG;_CONSOLE;_WIN32_WINNT=0x0403;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;PACKAGE="nzbget";VERSION="21.1";NDEBUG;_CONSOLE;_WIN32_WINNT=0x0403;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ExceptionHandling>Sync</ExceptionHandling>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>
@@ -151,7 +151,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<AdditionalIncludeDirectories>.\daemon\connect;.\daemon\extension;.\daemon\feed;.\daemon\frontend;.\daemon\main;.\daemon\nserv;.\daemon\nntp;.\daemon\postprocess;.\daemon\queue;.\daemon\remote;.\daemon\util;.\daemon\windows;.\lib\par2;.\lib\yencode;.\windows\resources;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;PACKAGE="nzbget";VERSION="21.0";NDEBUG;_CONSOLE;_WIN32_WINNT=0x0403;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<PreprocessorDefinitions>WIN32;PACKAGE="nzbget";VERSION="21.1";NDEBUG;_CONSOLE;_WIN32_WINNT=0x0403;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ExceptionHandling>Sync</ExceptionHandling>
<RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<PrecompiledHeader>Use</PrecompiledHeader>

View File

@@ -24,8 +24,6 @@
<string>10.7</string>
<key>LSUIElement</key>
<true/>
<key>NSHumanReadableCopyright</key>
<string>Copyright © 2007-2019 Andrey Prygunkov</string>
<key>NSMainNibFile</key>
<string>MainApp</string>
<key>NSAppTransportSecurity</key>

View File

@@ -504,7 +504,6 @@ var Config = (new function($)
var $ConfigTabBadgeEmpty;
var $ConfigContent;
var $ConfigInfo;
var $ConfigAbout;
var $ConfigTitle;
var $ConfigTable;
var $ViewButton;
@@ -533,7 +532,6 @@ var Config = (new function($)
$ConfigTabBadgeEmpty = $('#ConfigTabBadgeEmpty');
$ConfigContent = $('#ConfigContent');
$ConfigInfo = $('#ConfigInfo');
$ConfigAbout = $('#ConfigAbout');
$ConfigTitle = $('#ConfigTitle');
$ViewButton = $('#Config_ViewButton');
$LeaveConfigDialog = $('#LeaveConfigDialog');
@@ -1211,10 +1209,9 @@ var Config = (new function($)
$('li', $ConfigNav).removeClass('active');
link.closest('li').addClass('active');
$ConfigContent.removeClass('search');
Util.show($ViewButton, sectionId !== 'Config-Info' && sectionId !== 'Config-About');
Util.show($ViewButton, sectionId !== 'Config-Info');
$ConfigInfo.hide();
$ConfigAbout.hide();
if (sectionId === 'Search')
{
@@ -1228,15 +1225,7 @@ var Config = (new function($)
{
$ConfigInfo.show();
$ConfigData.children().hide();
$ConfigTitle.text('INFO: SETTINGS');
return;
}
if (sectionId === 'Config-About')
{
$ConfigAbout.show();
$ConfigData.children().hide();
$ConfigTitle.text('ABOUT NZBGET');
$ConfigTitle.text('INFO');
return;
}

View File

@@ -683,7 +683,7 @@
function itemCheckClick(data, event)
{
var checkmark = $(event.target).hasClass('check');
if (data.dragging || (!checkmark && !data.config.rowSelect))
if (data.dragging || (!checkmark && !data.config.rowSelect))
{
return;
}
@@ -712,7 +712,7 @@
function titleCheckClick(data, event)
{
var checkmark = $(event.target).hasClass('check');
if (data.dragging || (!checkmark && !data.config.rowSelect))
if (data.dragging || (!checkmark && !data.config.rowSelect))
{
return;
}

View File

@@ -538,7 +538,6 @@
<div class="span3">
<ul class="nav nav-list" id="ConfigNav">
<li class="config-static"><a href="#Config-Info">INFO</a></li>
<li class="config-static"><a href="#Config-About">ABOUT NZBGET</a></li>
<li class="config-static"><a href="#Config-System">SYSTEM</a></li>
</ul>
</div>
@@ -547,7 +546,7 @@
<div>
<div class="config-header clearfix">
<div class="pull-left" id="ConfigTitle">INFO: SETTINGS</div>
<div class="pull-left" id="ConfigTitle">INFO</div>
<div class="btn-group pull-right">
<a class="btn dropdown-toggle" id="Config_ViewButton" data-toggle="dropdown">View <span class="caret"></span></a>
<ul class="dropdown-menu footer-button-menu" id="Config_ViewMenu">
@@ -569,12 +568,6 @@
When you configure NZBGet for the first time you need
to check at least the option <a class="option" href="#" data-category="S" onclick="Config.scrollToOption(event, this)">MainDir</a> and configure one news server.
</p>
<p>
There are many configuration options affecting performance. If you use
NZBGet on a computer with limited capabilities, such as NAS, media player,
router, etc. you should take your time to configure NZBGet for best
performance - see <a href="http://nzbget.net/performance-tips">Performance tips</a>.
</p>
<h4>Extension scripts settings</h4>
<p>
@@ -595,11 +588,6 @@
<p>
This can be done in section <em><strong>SYSTEM</strong></em>.
</p>
</div>
<div id="ConfigAbout">
<p>For info on NZBGet poject please visit <a href="http://nzbget.net">NZBGet Home Page</a>. Among other things the developers of third-party apps find there complete docs about RPC interface.</p>
<p>Should you need help, have suggestions or want to share your improvements - <a href="http://nzbget.net/forum">NZBGet Forum</a> is a place to do that.</p>
<h4>Copyright</h4>
<p>This program is free software; you can redistribute it and/or modify

View File

@@ -172,13 +172,9 @@ var Upload = (new function($)
{
var inp = $('#AddDialog_Input');
// Reset file input control; needed for IE10 but produce problems with opera (the old non-webkit one).
if ($.browser.msie)
{
inp.wrap('<form>').closest('form').get(0).reset();
inp.unwrap();
}
// Reset file input control
inp.val('');
inp.click();
}

View File

@@ -93,7 +93,7 @@ if errorlevel 1 goto BUILD_FAILED
rem Update ca root certificates
echo Updating root certificates
cd image
%CURL% --remote-name --time-cond cacert.pem https://curl.haxx.se/ca/cacert.pem
%CURL% --remote-name --time-cond cacert.pem https://curl.se/ca/cacert.pem
if errorlevel 1 goto BUILD_FAILED
cd ..

View File

@@ -176,8 +176,9 @@ CreateShortCut "$SMPROGRAMS\NZBGet\Uninstall.lnk" "$INSTDIR\Uninstall.exe"
; Add control panel entry for Uninstall
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NZBGet" "DisplayName" "NZBGet"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NZBGet" "UninstallString" "$\"$INSTDIR\uninstall.exe$\""
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NZBGet" "Publisher" "Andrey Prygunkov"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NZBGet" "InstallLocation" "$INSTDIR"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NZBGet" "Publisher" "nzbget.net"
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\Uninstall\NZBGet" "DisplayIcon" "$\"$INSTDIR\nzbget.exe$\",0"
${GetSize} "$INSTDIR" "/S=0K" $0 $1 $2
IntFmt $0 "0x%08X" $0

View File

@@ -15,17 +15,15 @@
// Neutral resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU)
#ifdef _WIN32
LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
#pragma code_page(1252)
#endif //_WIN32
/////////////////////////////////////////////////////////////////////////////
//
// Menu
//
IDR_TRAYMENU MENU
IDR_TRAYMENU MENU
BEGIN
POPUP "Menu"
BEGIN
@@ -81,20 +79,19 @@ IDI_TRAYICON_WORKING ICON "trayicon_working.ico"
// Dialog
//
IDD_ABOUTBOX DIALOGEX 0, 0, 176, 194
IDD_ABOUTBOX DIALOGEX 0, 0, 177, 182
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
CAPTION "About NZBGet"
FONT 8, "Tahoma", 400, 0, 0x0
BEGIN
DEFPUSHBUTTON "OK",IDOK,63,173,50,14
CTEXT "Version 15.0-testing-r1200",IDC_ABOUT_VERSION,16,70,144,8
CTEXT "Lightweight usenet downloader",IDC_STATIC,16,83,144,8
DEFPUSHBUTTON "OK",IDOK,63,161,50,14
CTEXT "Version 15.0-testing-r1200",IDC_ABOUT_VERSION,16,70,145,8
CTEXT "Lightweight usenet downloader",IDC_STATIC,16,83,145,8
CTEXT "http://nzbget.net",IDC_ABOUT_HOMEPAGE,55,144,64,9,SS_NOTIFY
CTEXT "Copyright <20> 2007-2019 Andrey Prygunkov",IDC_STATIC,16,156,144,8
ICON "",IDC_ABOUT_ICON,67,7,21,20
CTEXT "NZBGet",IDC_ABOUT_NAME,16,51,144,16
CTEXT "The package includes other software; see program's folder for licenses.",IDC_STATIC,16,121,144,20
CTEXT "NZBGet is free software; use it under the terms of the ",IDC_STATIC,16,99,144,20
CTEXT "NZBGet",IDC_ABOUT_NAME,16,51,145,16
CTEXT "The package includes other software; see program's folder for licenses.",IDC_STATIC,16,121,145,20
CTEXT "NZBGet is free software; use it under the terms of the ",IDC_STATIC,16,99,145,20
CTEXT "GNU General Public License",IDC_ABOUT_GPL,62,107,90,8,SS_NOTIFY
LTEXT ".",IDC_STATIC,151,107,8,8,SS_NOTIFY
END
@@ -153,14 +150,14 @@ END
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO
GUIDELINES DESIGNINFO
BEGIN
IDD_ABOUTBOX, DIALOG
BEGIN
LEFTMARGIN, 16
RIGHTMARGIN, 160
RIGHTMARGIN, 161
TOPMARGIN, 7
BOTTOMMARGIN, 187
BOTTOMMARGIN, 175
END
IDD_PREFDIALOG, DIALOG
@@ -183,6 +180,17 @@ BEGIN
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// AFX_DIALOG_LAYOUT
//
IDD_ABOUTBOX AFX_DIALOG_LAYOUT
BEGIN
0
END
#endif // Neutral resources
/////////////////////////////////////////////////////////////////////////////
@@ -191,10 +199,8 @@ END
// German (Germany) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_DEU)
#ifdef _WIN32
LANGUAGE LANG_GERMAN, SUBLANG_GERMAN
#pragma code_page(1252)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////