mirror of https://github.com/odrling/Aegisub
dd the beginings of the Aegisub Reporter, this is my first C++ program from scratch. (yes, that's a disclaimer)
What's left to be done: * Crash support. (only works for 'reports') * UI cleanups. * Interfacing with Aegisub to get proper metrics. * OSX support. * Windows support. (someone else will have to do this) * Server-side code. There's probably a lot of other things I'm forgetting, anyone is free to commit to this, if you want to make major changes let me know beforehand. Originally committed to SVN as r3475.
This commit is contained in:
parent
1155d1bcf8
commit
930f593d6a
|
@ -22,7 +22,7 @@ m4_define([libswscale_required_version], [0.7.1]) # (r18642)
|
||||||
m4_define([lua_auto4_required_version], [5.1])
|
m4_define([lua_auto4_required_version], [5.1])
|
||||||
m4_define([portaudio_required_version], [19])
|
m4_define([portaudio_required_version], [19])
|
||||||
m4_define([pulseaudio_required_version], [0.5])
|
m4_define([pulseaudio_required_version], [0.5])
|
||||||
|
m4_define([curl_required_version], [7.19.2])
|
||||||
m4_define([fontconfig_required_version], [2.4])
|
m4_define([fontconfig_required_version], [2.4])
|
||||||
m4_define([freetype_required_version], [9.7.0])
|
m4_define([freetype_required_version], [9.7.0])
|
||||||
m4_define([pkgconfig_required_version], [0.20])
|
m4_define([pkgconfig_required_version], [0.20])
|
||||||
|
@ -333,6 +333,22 @@ if test "$agi_cv_with_openglu" = "no" && test "$build_darwin" != "yes"; then
|
||||||
AC_MSG_FAILURE([Please install a working OpenGL GLU library.])
|
AC_MSG_FAILURE([Please install a working OpenGL GLU library.])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
#######
|
||||||
|
## cURL
|
||||||
|
#######
|
||||||
|
PKG_CHECK_MODULES(LIBCURL, libcurl >= curl_required_version,,
|
||||||
|
[AC_MSG_FAILURE([aegisub requires >= cURL curl_required_version])])
|
||||||
|
|
||||||
|
AC_AGI_COMPILE([cURL], [curl], [$LIBCURL_CFLAGS], [$LIBCURL_LIBS],[
|
||||||
|
#include <curl/curl.h>
|
||||||
|
int main(void) {
|
||||||
|
CURL *handle = curl_easy_init();
|
||||||
|
}])
|
||||||
|
|
||||||
|
if test "$agi_cv_with_curl" = "no"; then
|
||||||
|
AC_MSG_FAILURE([Please install a working cURL library.])
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
###########
|
###########
|
||||||
## Freetype
|
## Freetype
|
||||||
|
@ -1109,17 +1125,18 @@ AM_CONDITIONAL([FOUND_VIDEO_PROVIDER], [test "$found_video_provider" = "yes"])
|
||||||
# Makefiles
|
# Makefiles
|
||||||
AC_CONFIG_FILES([
|
AC_CONFIG_FILES([
|
||||||
Makefile
|
Makefile
|
||||||
|
automation/Makefile
|
||||||
|
desktop/Makefile
|
||||||
|
libass/Makefile
|
||||||
|
libffms/Makefile
|
||||||
|
po/Makefile.in
|
||||||
|
reporter/Makefile
|
||||||
src/Makefile
|
src/Makefile
|
||||||
src/bitmaps/Makefile
|
src/bitmaps/Makefile
|
||||||
src/libresrc/Makefile
|
|
||||||
src/libosxutil/Makefile
|
src/libosxutil/Makefile
|
||||||
universalchardet/Makefile
|
src/libresrc/Makefile
|
||||||
libffms/Makefile
|
|
||||||
libass/Makefile
|
|
||||||
automation/Makefile
|
|
||||||
po/Makefile.in
|
|
||||||
desktop/Makefile
|
|
||||||
tools/Makefile
|
tools/Makefile
|
||||||
|
universalchardet/Makefile
|
||||||
])
|
])
|
||||||
|
|
||||||
# Files that need substitution.
|
# Files that need substitution.
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
AUTOMAKE_OPTIONS = foreign
|
||||||
|
AM_CXXFLAGS =
|
||||||
|
|
||||||
|
bin_PROGRAMS = reporter
|
||||||
|
|
||||||
|
if PRECOMPILED_HEADER
|
||||||
|
BUILT_SOURCES = wx_pre.h.gch
|
||||||
|
AM_CXXFLAGS += -include wx_pre.h -Winvalid-pch -fpch-deps -fpch-preprocess
|
||||||
|
nodist_reporter_SOURCES = wx_prec.h.gch
|
||||||
|
endif
|
||||||
|
|
||||||
|
reporter_CPPFLAGS = -Iinclude @LIBCURL_CFLAGS@ @WX_CPPFLAGS@
|
||||||
|
reporter_LDFLAGS = @WX_LIBS@ @LIBCURL_LIBS@
|
||||||
|
|
||||||
|
if PRECOMPILED_HEADER
|
||||||
|
# This doesn't depend on Makefile on purpose, you should already know what you're doing when using this.
|
||||||
|
wx_pre.h.gch: wx_pre.h
|
||||||
|
@CXX@ @WX_CPPFLAGS@ @CXXFLAGS@ @DEBUG_FLAGS@ wx_pre.h
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
reporter_SOURCES = \
|
||||||
|
aegisub.cpp \
|
||||||
|
main.cpp \
|
||||||
|
name_map.cpp \
|
||||||
|
platform.cpp \
|
||||||
|
platform_unix.cpp \
|
||||||
|
platform_unix_bsd.cpp \
|
||||||
|
progress.cpp \
|
||||||
|
report.cpp \
|
||||||
|
upload.cpp \
|
||||||
|
view.cpp
|
||||||
|
|
||||||
|
|
||||||
|
reporter_SOURCES += \
|
||||||
|
*.h \
|
||||||
|
include/*.h
|
||||||
|
|
|
@ -0,0 +1,47 @@
|
||||||
|
// Copyright (c) 2009, Amar Takhar <verm@aegisub.org>
|
||||||
|
//
|
||||||
|
// Permission to use, copy, modify, and distribute this software for any
|
||||||
|
// purpose with or without fee is hereby granted, provided that the above
|
||||||
|
// copyright notice and this permission notice appear in all copies.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
//
|
||||||
|
// $Id$
|
||||||
|
|
||||||
|
/// @@file aegisub.cpp
|
||||||
|
/// @brief Aegisub specific configuration options and properties.
|
||||||
|
|
||||||
|
#ifndef R_PRECOMP
|
||||||
|
#include <wx/fileconf.h>
|
||||||
|
#include <wx/wfstream.h>
|
||||||
|
#include <wx/stdpaths.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "aegisub.h"
|
||||||
|
#include "../acconf.h"
|
||||||
|
|
||||||
|
Aegisub::Aegisub() {
|
||||||
|
wxStandardPathsBase &paths = wxStandardPaths::Get();
|
||||||
|
// Using ifdefs is a pain but it's much easier to centralise this.
|
||||||
|
#ifdef __UNIX__
|
||||||
|
wxString configdir = wxString::Format("%s/.aegisub-%s", paths.GetUserConfigDir(), _T(AEGISUB_VERSION_DATA));
|
||||||
|
#elif __APPLE__
|
||||||
|
wxString configdir = wxString::Format("%s/Aegisub-%s", paths.GetUserConfigDir(), _T(AEGISUB_VERSION_DATA));
|
||||||
|
#else
|
||||||
|
wxString configdir = wxString::Format("%s/Aegisub", paths.GetUserConfigDir());
|
||||||
|
#endif
|
||||||
|
|
||||||
|
wxFileInputStream file(wxString::Format("%s/config.dat", configdir));
|
||||||
|
conf = new wxFileConfig(file);
|
||||||
|
conf->SetExpandEnvVars(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString Aegisub::Read(wxString key) {
|
||||||
|
return conf->Read(key);
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
// Copyright (c) 2009, Amar Takhar <verm@aegisub.org>
|
||||||
|
//
|
||||||
|
// Permission to use, copy, modify, and distribute this software for any
|
||||||
|
// purpose with or without fee is hereby granted, provided that the above
|
||||||
|
// copyright notice and this permission notice appear in all copies.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
//
|
||||||
|
// $Id$
|
||||||
|
|
||||||
|
/// @@file aegisub.h
|
||||||
|
/// @see aegisub.cpp
|
||||||
|
|
||||||
|
class Aegisub {
|
||||||
|
private:
|
||||||
|
wxFileConfig *conf;
|
||||||
|
public:
|
||||||
|
Aegisub();
|
||||||
|
~Aegisub();
|
||||||
|
void Config(wxString config);
|
||||||
|
wxString Read(wxString key);
|
||||||
|
};
|
||||||
|
|
|
@ -0,0 +1,103 @@
|
||||||
|
// Copyright (c) 2009, Amar Takhar <verm@aegisub.org>
|
||||||
|
//
|
||||||
|
// Permission to use, copy, modify, and distribute this software for any
|
||||||
|
// purpose with or without fee is hereby granted, provided that the above
|
||||||
|
// copyright notice and this permission notice appear in all copies.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
//
|
||||||
|
// $Id$
|
||||||
|
|
||||||
|
/// @@file platform.h
|
||||||
|
/// @brief API for gathering platform information.
|
||||||
|
/// @see platform.cpp
|
||||||
|
|
||||||
|
#ifndef R_PRECOMP
|
||||||
|
#include <wx/platinfo.h>
|
||||||
|
#include <wx/string.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/// @brief Grab platform-specific information.
|
||||||
|
class Platform {
|
||||||
|
public:
|
||||||
|
|
||||||
|
/// @brief Constructor
|
||||||
|
Platform() {};
|
||||||
|
|
||||||
|
/// @brief Destructor
|
||||||
|
virtual ~Platform() {};
|
||||||
|
|
||||||
|
// Get platform instance.
|
||||||
|
static Platform* GetPlatform();
|
||||||
|
|
||||||
|
// These are platform agnostic.
|
||||||
|
// From wxPlatformInfo
|
||||||
|
wxString ArchName(); /// Architecture
|
||||||
|
wxString OSFamily(); /// OS Family
|
||||||
|
wxString OSName(); /// OS Name
|
||||||
|
wxString Endian(); /// Endian
|
||||||
|
|
||||||
|
// From <wx/gdicmn.h>
|
||||||
|
wxString DisplayColour(); /// Is the display colour?
|
||||||
|
wxString DisplayDepth(); /// Depth
|
||||||
|
wxString DisplaySize(); /// Size
|
||||||
|
wxString DisplayPPI(); /// Pixels Per Inch
|
||||||
|
|
||||||
|
// Misc
|
||||||
|
wxString Signature(); /// Report signature.
|
||||||
|
wxString wxVersion(); /// wxWidgets version.
|
||||||
|
wxString Locale(); /// Locale
|
||||||
|
wxString Language(); /// Language currently in use
|
||||||
|
wxString SystemLanguage(); /// System language
|
||||||
|
wxString Date(); /// Date
|
||||||
|
wxString Time(); /// Time
|
||||||
|
wxString TimeZone(); /// TimeZone
|
||||||
|
|
||||||
|
// The following are all platform-specific.
|
||||||
|
// Misc
|
||||||
|
virtual wxString OSVersion()=0;
|
||||||
|
|
||||||
|
// Hardware
|
||||||
|
virtual wxString CPUId()=0;
|
||||||
|
virtual wxString CPUSpeed()=0;
|
||||||
|
virtual wxString CPUCount()=0;
|
||||||
|
virtual wxString CPUCores()=0;
|
||||||
|
virtual wxString CPUFeatures()=0;
|
||||||
|
virtual wxString CPUFeatures2()=0;
|
||||||
|
virtual wxString Memory()=0;
|
||||||
|
virtual wxString Video()=0;
|
||||||
|
|
||||||
|
// Windows
|
||||||
|
#ifdef __WINDOWS__
|
||||||
|
virtual wxString ServicePack()=0;
|
||||||
|
virtual wxString DriverGraphicsVersion()=0;
|
||||||
|
virtual wxString DirectShowFilters()=0;
|
||||||
|
virtual wxString AntiVirus()=0;
|
||||||
|
virtual wxString FireWall()=0;
|
||||||
|
virtual wxString DLLVersions()=0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// Unix
|
||||||
|
#ifdef __UNIX__
|
||||||
|
virtual wxString UnixLibraries()=0;
|
||||||
|
virtual wxString DesktopEnvironment()=0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// OS X
|
||||||
|
#ifdef __OSX__
|
||||||
|
virtual wxString PatchLevel()=0;
|
||||||
|
virtual wxString QuickTimeExt()=0;
|
||||||
|
virtual wxString HardwareModel()=0;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
private:
|
||||||
|
void Init();
|
||||||
|
const wxPlatformInfo plat;
|
||||||
|
wxLocale *locale;
|
||||||
|
};
|
|
@ -0,0 +1,149 @@
|
||||||
|
// Copyright (c) 2009, Amar Takhar <verm@aegisub.org>
|
||||||
|
//
|
||||||
|
// Permission to use, copy, modify, and distribute this software for any
|
||||||
|
// purpose with or without fee is hereby granted, provided that the above
|
||||||
|
// copyright notice and this permission notice appear in all copies.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
//
|
||||||
|
// $Id$
|
||||||
|
|
||||||
|
/// @@file main.cpp
|
||||||
|
/// @brief Main loop
|
||||||
|
|
||||||
|
#ifndef R_PRECOMP
|
||||||
|
#include <wx/app.h>
|
||||||
|
#include <wx/window.h>
|
||||||
|
#include <wx/log.h>
|
||||||
|
#include <wx/cmdline.h>
|
||||||
|
#include <wx/wxchar.h>
|
||||||
|
#include <wx/sizer.h>
|
||||||
|
#include <wx/stattext.h>
|
||||||
|
#include <wx/panel.h>
|
||||||
|
#include <wx/font.h>
|
||||||
|
#include <wx/button.h>
|
||||||
|
#include <wx/textctrl.h>
|
||||||
|
#include <wx/intl.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <locale.h>
|
||||||
|
|
||||||
|
#include "main.h"
|
||||||
|
#include "view.h"
|
||||||
|
#include "upload.h"
|
||||||
|
|
||||||
|
/// @brief Init the reporter.
|
||||||
|
bool Reporter::OnInit()
|
||||||
|
{
|
||||||
|
if ( !wxApp::OnInit() )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
wxApp::CheckBuildOptions(WX_BUILD_OPTIONS_SIGNATURE, _("Reporter"));
|
||||||
|
|
||||||
|
static const wxCmdLineEntryDesc cmdLineDesc[] = {
|
||||||
|
{ wxCMD_LINE_SWITCH, "c", "crash", "Launch in crash mode.", wxCMD_LINE_VAL_NONE, NULL },
|
||||||
|
{ wxCMD_LINE_SWITCH, "r", "report", "Launch in Report mode.", wxCMD_LINE_VAL_NONE, NULL },
|
||||||
|
{ wxCMD_LINE_SWITCH, "h", "help", "This help message", wxCMD_LINE_VAL_NONE, wxCMD_LINE_OPTION_HELP },
|
||||||
|
{ wxCMD_LINE_NONE, NULL, NULL, NULL, wxCMD_LINE_VAL_NONE, NULL}
|
||||||
|
};
|
||||||
|
|
||||||
|
wxCmdLineParser parser(cmdLineDesc, argc, argv);
|
||||||
|
switch ( parser.Parse() ) {
|
||||||
|
case -1:
|
||||||
|
break; // Help
|
||||||
|
case 0:
|
||||||
|
break; // OK
|
||||||
|
default:
|
||||||
|
wxLogMessage(_T("Syntax error."));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
setlocale(LC_NUMERIC, "C");
|
||||||
|
setlocale(LC_CTYPE, "C");
|
||||||
|
wxLocale *locale = new wxLocale();
|
||||||
|
locale->Init(wxLANGUAGE_ENGLISH);
|
||||||
|
#ifdef __WINDOWS__
|
||||||
|
locale->AddCatalogLookupPathPrefix(StandardPaths::DecodePath(_T("?data/locale")));
|
||||||
|
locale->AddCatalog(_T("reporter"));
|
||||||
|
#else
|
||||||
|
locale->AddCatalog("reporter");
|
||||||
|
#endif
|
||||||
|
locale->AddCatalog(_T("wxstd"));
|
||||||
|
setlocale(LC_NUMERIC, "C");
|
||||||
|
setlocale(LC_CTYPE, "C");
|
||||||
|
|
||||||
|
mFrame *frame = new mFrame(_("Aegisub Reporter"));
|
||||||
|
SetTopWindow(frame);
|
||||||
|
|
||||||
|
Report *r = new Report;
|
||||||
|
frame->SetReport(r);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Main frame.
|
||||||
|
/// @param window_title Window title.
|
||||||
|
mFrame::mFrame(const wxString &window_title)
|
||||||
|
: wxFrame(NULL, wxID_ANY, window_title, wxDefaultPosition, wxSize(300,-1)) {
|
||||||
|
|
||||||
|
wxBoxSizer *topSizer = new wxBoxSizer(wxVERTICAL);
|
||||||
|
|
||||||
|
wxStaticBoxSizer *msgSizer = new wxStaticBoxSizer(wxVERTICAL, this, "");
|
||||||
|
topSizer->Add(msgSizer, 1, wxALL, 5);
|
||||||
|
|
||||||
|
wxStaticText *title = new wxStaticText(this, -1,_("Welcome to the Aegisub Reporter!"), wxDefaultPosition, wxSize(325,-1), wxALIGN_CENTRE|wxST_NO_AUTORESIZE);
|
||||||
|
msgSizer->Add(title, 1, wxALL, 5);
|
||||||
|
title->SetFont(wxFont(11, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD));
|
||||||
|
|
||||||
|
wxStaticText *msg = new wxStaticText(this, -1,_("In order to better help us target development, and improve Aegisub we would like you to submit some information about your system and setup."));
|
||||||
|
msg->Wrap(325);
|
||||||
|
msgSizer->Add(msg, 1, wxALL, 5);
|
||||||
|
|
||||||
|
wxStaticText *notice = new wxStaticText(this, -1,_("This information is completely anonymous, no personal information is sent along it is strictly used for targeting new features and the future direction of Aegisub."));
|
||||||
|
notice->Wrap(325);
|
||||||
|
msgSizer->Add(notice, 1, wxALL, 5);
|
||||||
|
notice->SetFont(wxFont(11, wxFONTFAMILY_SWISS, wxFONTSTYLE_ITALIC, wxFONTWEIGHT_NORMAL));
|
||||||
|
msgSizer->Add(new wxButton(this, 42, "View Report"), 0, wxALL, 10 );
|
||||||
|
|
||||||
|
|
||||||
|
wxStdDialogButtonSizer *stdButton = new wxStdDialogButtonSizer();
|
||||||
|
stdButton->AddButton(new wxButton(this, wxID_OK, _("Submit")));
|
||||||
|
stdButton->AddButton(new wxButton(this, wxID_CANCEL, _("Cancel")));
|
||||||
|
stdButton->Realize();
|
||||||
|
topSizer->Add(stdButton, 1, wxALL, 5);
|
||||||
|
|
||||||
|
this->SetSizerAndFit(topSizer);
|
||||||
|
|
||||||
|
// Is there a better way to do this?
|
||||||
|
this->SetMinSize(wxSize(360,-1));
|
||||||
|
this->SetMaxSize(this->GetEffectiveMinSize());
|
||||||
|
this->SetMinSize(this->GetEffectiveMinSize());
|
||||||
|
|
||||||
|
this->Show(true);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @brief View report.
|
||||||
|
void mFrame::ReportView(wxCommandEvent& WXUNUSED(event)) {
|
||||||
|
View View(this, r);
|
||||||
|
View.ShowModal();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @brief Cancel reporter.
|
||||||
|
void mFrame::Cancel(wxCommandEvent& WXUNUSED(event)) {
|
||||||
|
Close(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @brief Submit report
|
||||||
|
void mFrame::Submit(wxCommandEvent& WXUNUSED(event)) {
|
||||||
|
Progress *progress = new Progress::Progress(this);
|
||||||
|
Upload *upload = new Upload::Upload(progress);
|
||||||
|
upload->Report(_("./test.xml"));
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,61 @@
|
||||||
|
// Copyright (c) 2009, Amar Takhar <verm@aegisub.org>
|
||||||
|
//
|
||||||
|
// Permission to use, copy, modify, and distribute this software for any
|
||||||
|
// purpose with or without fee is hereby granted, provided that the above
|
||||||
|
// copyright notice and this permission notice appear in all copies.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
//
|
||||||
|
// $Id$
|
||||||
|
|
||||||
|
/// @@file main.h
|
||||||
|
/// @see main.cpp
|
||||||
|
|
||||||
|
#ifndef R_PRECOMP
|
||||||
|
#include <wx/frame.h>
|
||||||
|
#include <wx/event.h>
|
||||||
|
#include <wx/window.h>
|
||||||
|
#include <wx/dialog.h>
|
||||||
|
#include <wx/progdlg.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "report.h"
|
||||||
|
|
||||||
|
/// @brief Reporter
|
||||||
|
class Reporter : public wxApp {
|
||||||
|
public:
|
||||||
|
virtual bool OnInit();
|
||||||
|
|
||||||
|
private:
|
||||||
|
Report *r;
|
||||||
|
};
|
||||||
|
|
||||||
|
IMPLEMENT_APP(Reporter)
|
||||||
|
|
||||||
|
/// @brief Main frame.
|
||||||
|
class mFrame : public wxFrame {
|
||||||
|
public:
|
||||||
|
mFrame(const wxString& window_title);
|
||||||
|
void Submit(wxCommandEvent& event);
|
||||||
|
void Cancel(wxCommandEvent& event);
|
||||||
|
void ReportView(wxCommandEvent& event);
|
||||||
|
void SetReport(Report *report) { r = report; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
Report *r;
|
||||||
|
DECLARE_EVENT_TABLE()
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
BEGIN_EVENT_TABLE(mFrame, wxFrame)
|
||||||
|
EVT_BUTTON(wxID_OK, mFrame::Submit)
|
||||||
|
EVT_BUTTON(wxID_CANCEL, mFrame::Cancel)
|
||||||
|
EVT_BUTTON(42, mFrame::ReportView)
|
||||||
|
END_EVENT_TABLE()
|
||||||
|
|
|
@ -0,0 +1,88 @@
|
||||||
|
// Copyright (c) 2009, Amar Takhar <verm@aegisub.org>
|
||||||
|
//
|
||||||
|
// Permission to use, copy, modify, and distribute this software for any
|
||||||
|
// purpose with or without fee is hereby granted, provided that the above
|
||||||
|
// copyright notice and this permission notice appear in all copies.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
//
|
||||||
|
// $Id$
|
||||||
|
|
||||||
|
/// @@file name_map.cpp
|
||||||
|
/// @brief XML element -> human readable name mappings.
|
||||||
|
|
||||||
|
#include "report.h"
|
||||||
|
|
||||||
|
#define _TT(x) x /// No-op macro for nMap.
|
||||||
|
|
||||||
|
/// @brief Load readable names of XML elements.
|
||||||
|
const Report::nameMap Report::HumanNames() {
|
||||||
|
nameMap nMap;
|
||||||
|
|
||||||
|
nMap.insert(nPair("antivirus", _TT("AntiVirus Installed")));
|
||||||
|
nMap.insert(nPair("arch", _TT("Architecture")));
|
||||||
|
nMap.insert(nPair("colour", _TT("Colour Screen")));
|
||||||
|
nMap.insert(nPair("colour", _TT("Colour")));
|
||||||
|
nMap.insert(nPair("cores", _TT("Cores")));
|
||||||
|
nMap.insert(nPair("count", _TT("Count")));
|
||||||
|
nMap.insert(nPair("cpu", _TT("CPU")));
|
||||||
|
nMap.insert(nPair("depth", _TT("Depth")));
|
||||||
|
nMap.insert(nPair("display", _TT("Display")));
|
||||||
|
nMap.insert(nPair("dll", _TT("DLL")));
|
||||||
|
nMap.insert(nPair("dshowfilter", _TT("DirectShow Filters")));
|
||||||
|
nMap.insert(nPair("features", _TT("Features")));
|
||||||
|
nMap.insert(nPair("features2", _TT("Features2")));
|
||||||
|
nMap.insert(nPair("firewall", _TT("Firewall Installed")));
|
||||||
|
nMap.insert(nPair("general", _TT("General")));
|
||||||
|
nMap.insert(nPair("graphicsver", _TT("Graphics Driver Version")));
|
||||||
|
nMap.insert(nPair("hardware", _TT("Hardware")));
|
||||||
|
nMap.insert(nPair("id", _TT("Id")));
|
||||||
|
nMap.insert(nPair("lang", _TT("Language")));
|
||||||
|
nMap.insert(nPair("lib", _TT("Libraries")));
|
||||||
|
nMap.insert(nPair("locale", _TT("Locale")));
|
||||||
|
nMap.insert(nPair("memory", _TT("Memory")));
|
||||||
|
nMap.insert(nPair("model", _TT("Model")));
|
||||||
|
nMap.insert(nPair("osendian", _TT("Endian")));
|
||||||
|
nMap.insert(nPair("osfamily", _TT("OS Family")));
|
||||||
|
nMap.insert(nPair("osname", _TT("OS Name")));
|
||||||
|
nMap.insert(nPair("osx", _TT("OS X")));
|
||||||
|
nMap.insert(nPair("osversion", _TT("OS Version")));
|
||||||
|
nMap.insert(nPair("patch", _TT("Patch")));
|
||||||
|
nMap.insert(nPair("ppi", _TT("Pixels Per Inch")));
|
||||||
|
nMap.insert(nPair("quicktimeext", _TT("QuickTime Extensions")));
|
||||||
|
nMap.insert(nPair("size", _TT("Size")));
|
||||||
|
nMap.insert(nPair("sp", _TT("Service Pack")));
|
||||||
|
nMap.insert(nPair("speed", _TT("Speed")));
|
||||||
|
nMap.insert(nPair("syslang", _TT("System Language")));
|
||||||
|
nMap.insert(nPair("unix", _TT("Unix")));
|
||||||
|
nMap.insert(nPair("video", _TT("Video")));
|
||||||
|
nMap.insert(nPair("windows", _TT("Windows")));
|
||||||
|
nMap.insert(nPair("wxversion", _TT("wx Version")));
|
||||||
|
nMap.insert(nPair("signature", _TT("Signature")));
|
||||||
|
nMap.insert(nPair("date", _TT("Date")));
|
||||||
|
nMap.insert(nPair("aegisub", _TT("Aegisub")));
|
||||||
|
nMap.insert(nPair("spelllang", _TT("Spelling Language")));
|
||||||
|
|
||||||
|
nMap.insert(nPair("lastversion", _TT("Last Version")));
|
||||||
|
nMap.insert(nPair("thesauruslang", _TT("Thesaurus Language")));
|
||||||
|
nMap.insert(nPair("audioplayer", _TT("Audio Player")));
|
||||||
|
nMap.insert(nPair("audioprovider", _TT("Audio Provider")));
|
||||||
|
nMap.insert(nPair("videoprovider", _TT("Video Provider")));
|
||||||
|
nMap.insert(nPair("subtitleprovider", _TT("Subtitles Provider")));
|
||||||
|
nMap.insert(nPair("savecharset", _TT("Save Charset")));
|
||||||
|
nMap.insert(nPair("gridfontsize", _TT("Grid Font Size")));
|
||||||
|
nMap.insert(nPair("editfontsize", _TT("Edit Font Size")));
|
||||||
|
nMap.insert(nPair("spectrum", _TT("Spectrum Enabled")));
|
||||||
|
nMap.insert(nPair("spectrumqual", _TT("Spectrum Quality")));
|
||||||
|
nMap.insert(nPair("calltips", _TT("Call Tips Enabled")));
|
||||||
|
nMap.insert(nPair("medusakeys", _TT("Medusa Hotkeys Enabled")));
|
||||||
|
nMap.insert(nPair("desktopenv", _TT("Desktop Environment")));
|
||||||
|
|
||||||
|
return nMap;
|
||||||
|
}
|
|
@ -0,0 +1,112 @@
|
||||||
|
// Copyright (c) 2009, Amar Takhar <verm@aegisub.org>
|
||||||
|
//
|
||||||
|
// Permission to use, copy, modify, and distribute this software for any
|
||||||
|
// purpose with or without fee is hereby granted, provided that the above
|
||||||
|
// copyright notice and this permission notice appear in all copies.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
//
|
||||||
|
// $Id$
|
||||||
|
|
||||||
|
/// @@file platform.cpp
|
||||||
|
/// @brief Base functions for the Platform class.
|
||||||
|
|
||||||
|
#ifndef R_PRECOMP
|
||||||
|
#include <wx/gdicmn.h> // Display* functions.
|
||||||
|
#include <wx/version.h> // Version info.
|
||||||
|
#include <wx/intl.h> // Locale info.
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "include/platform.h"
|
||||||
|
#include "platform_unix.h"
|
||||||
|
#include "platform_unix_bsd.h"
|
||||||
|
|
||||||
|
/// @brief Constructor.
|
||||||
|
Platform* Platform::GetPlatform() {
|
||||||
|
|
||||||
|
#ifdef __UNIX__
|
||||||
|
# ifdef __FREEBSD__
|
||||||
|
Platform *p = new PlatformUnixBSD;
|
||||||
|
# else
|
||||||
|
Platform *p = new PlatformUnix;
|
||||||
|
# endif
|
||||||
|
#endif // __UNIX__
|
||||||
|
p->Init();
|
||||||
|
return p;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @brief Init variables to avoid duplicate instantiations.
|
||||||
|
void Platform::Init() {
|
||||||
|
locale = new wxLocale();
|
||||||
|
locale->Init();
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString Platform::ArchName() {
|
||||||
|
return plat.GetArchName();
|
||||||
|
};
|
||||||
|
|
||||||
|
wxString Platform::OSFamily() {
|
||||||
|
return plat.GetOperatingSystemFamilyName();
|
||||||
|
};
|
||||||
|
|
||||||
|
wxString Platform::OSName() {
|
||||||
|
return plat.GetOperatingSystemIdName();
|
||||||
|
};
|
||||||
|
|
||||||
|
wxString Platform::Endian() {
|
||||||
|
return plat.GetEndiannessName();
|
||||||
|
};
|
||||||
|
|
||||||
|
wxString Platform::DisplayColour() {
|
||||||
|
return wxString::Format(L"%d", wxColourDisplay());
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString Platform::DisplayDepth() {
|
||||||
|
return wxString::Format(L"%d", wxDisplayDepth());
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString Platform::DisplaySize() {
|
||||||
|
int x, y;
|
||||||
|
wxDisplaySize(&x, &y);
|
||||||
|
return wxString::Format(L"%d %d", x, y);
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString Platform::DisplayPPI() {
|
||||||
|
return wxString::Format(L"%d %d", wxGetDisplayPPI().GetWidth(), wxGetDisplayPPI().GetHeight());
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString Platform::wxVersion() {
|
||||||
|
return wxString::Format(L"%d.%d.%d.%d", wxMAJOR_VERSION, wxMINOR_VERSION, wxRELEASE_NUMBER, wxSUBRELEASE_NUMBER);
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString Platform::Locale() {
|
||||||
|
return wxLocale().GetSysName();
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString Platform::Language() {
|
||||||
|
const wxLanguageInfo *info = locale->GetLanguageInfo(locale->GetLanguage());
|
||||||
|
return info->CanonicalName;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString Platform::SystemLanguage() {
|
||||||
|
const wxLanguageInfo *info = locale->GetLanguageInfo(locale->GetSystemLanguage());
|
||||||
|
return info->CanonicalName;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString Platform::Date() {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString Platform::Signature() {
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString Platform::DesktopEnvironment() {
|
||||||
|
return "";
|
||||||
|
}
|
|
@ -0,0 +1,78 @@
|
||||||
|
// Copyright (c) 2009, Amar Takhar <verm@aegisub.org>
|
||||||
|
//
|
||||||
|
// Permission to use, copy, modify, and distribute this software for any
|
||||||
|
// purpose with or without fee is hereby granted, provided that the above
|
||||||
|
// copyright notice and this permission notice appear in all copies.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
//
|
||||||
|
// $Id$
|
||||||
|
|
||||||
|
/// @@file platform_unix.cpp
|
||||||
|
/// @brief Unix Platform extension.
|
||||||
|
|
||||||
|
#ifndef R_PRECOMP
|
||||||
|
#include <wx/string.h>
|
||||||
|
#include <wx/apptrait.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "include/platform.h"
|
||||||
|
#include "platform_unix.h"
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
#include <sys/utsname.h>
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString PlatformUnix::OSVersion() {
|
||||||
|
struct utsname name;
|
||||||
|
if (uname(&name) != -1) {
|
||||||
|
return name.release;
|
||||||
|
}
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString PlatformUnix::DesktopEnvironment() {
|
||||||
|
return wxTheApp->GetTraits()->GetDesktopEnvironment();
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString PlatformUnix::CPUId() {
|
||||||
|
return "";
|
||||||
|
};
|
||||||
|
|
||||||
|
wxString PlatformUnix::CPUSpeed() {
|
||||||
|
return "";
|
||||||
|
};
|
||||||
|
|
||||||
|
wxString PlatformUnix::CPUCores() {
|
||||||
|
return "";
|
||||||
|
};
|
||||||
|
|
||||||
|
wxString PlatformUnix::CPUCount() {
|
||||||
|
return "";
|
||||||
|
};
|
||||||
|
|
||||||
|
wxString PlatformUnix::CPUFeatures() {
|
||||||
|
return "";
|
||||||
|
};
|
||||||
|
|
||||||
|
wxString PlatformUnix::CPUFeatures2() {
|
||||||
|
return "";
|
||||||
|
};
|
||||||
|
|
||||||
|
wxString PlatformUnix::Memory() {
|
||||||
|
return "";
|
||||||
|
};
|
||||||
|
|
||||||
|
wxString PlatformUnix::Video() {
|
||||||
|
return "";
|
||||||
|
};
|
||||||
|
|
||||||
|
wxString PlatformUnix::UnixLibraries() {
|
||||||
|
return "";
|
||||||
|
};
|
|
@ -0,0 +1,42 @@
|
||||||
|
// Copyright (c) 2009, Amar Takhar <verm@aegisub.org>
|
||||||
|
//
|
||||||
|
// Permission to use, copy, modify, and distribute this software for any
|
||||||
|
// purpose with or without fee is hereby granted, provided that the above
|
||||||
|
// copyright notice and this permission notice appear in all copies.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
//
|
||||||
|
// $Id$
|
||||||
|
|
||||||
|
/// @@file platform_unix.h
|
||||||
|
/// @brief @see platform_unix.cpp
|
||||||
|
|
||||||
|
class Platform;
|
||||||
|
|
||||||
|
/// @brief General Unix functions.
|
||||||
|
class PlatformUnix : public Platform {
|
||||||
|
public:
|
||||||
|
PlatformUnix() {};
|
||||||
|
virtual ~PlatformUnix() {};
|
||||||
|
wxString OSVersion();
|
||||||
|
wxString DesktopEnvironment();
|
||||||
|
|
||||||
|
// Hardware
|
||||||
|
virtual wxString CPUId();
|
||||||
|
virtual wxString CPUSpeed();
|
||||||
|
virtual wxString CPUCores();
|
||||||
|
virtual wxString CPUCount();
|
||||||
|
virtual wxString CPUFeatures();
|
||||||
|
virtual wxString CPUFeatures2();
|
||||||
|
virtual wxString Memory();
|
||||||
|
virtual wxString Video();
|
||||||
|
|
||||||
|
// Unix Specific
|
||||||
|
virtual wxString UnixLibraries();
|
||||||
|
};
|
|
@ -0,0 +1,77 @@
|
||||||
|
// Copyright (c) 2009, Amar Takhar <verm@aegisub.org>
|
||||||
|
//
|
||||||
|
// Permission to use, copy, modify, and distribute this software for any
|
||||||
|
// purpose with or without fee is hereby granted, provided that the above
|
||||||
|
// copyright notice and this permission notice appear in all copies.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
//
|
||||||
|
// $Id$
|
||||||
|
|
||||||
|
/// @@file platform_unix_bsd.cpp
|
||||||
|
/// @brief BSD Platform extensions.
|
||||||
|
#ifndef R_PRECOMP
|
||||||
|
#include <wx/string.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "include/platform.h"
|
||||||
|
#include "platform_unix.h"
|
||||||
|
#include "platform_unix_bsd.h"
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
#include <sys/utsname.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/sysctl.h>
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString PlatformUnixBSD::CPUId() {
|
||||||
|
char id[300];
|
||||||
|
size_t len = sizeof(id);
|
||||||
|
sysctlbyname("hw.model", &id, &len, NULL, 0);
|
||||||
|
return wxString::Format("%s", id);
|
||||||
|
};
|
||||||
|
|
||||||
|
wxString PlatformUnixBSD::CPUSpeed() {
|
||||||
|
return "";
|
||||||
|
};
|
||||||
|
|
||||||
|
wxString PlatformUnixBSD::CPUCores() {
|
||||||
|
return "";
|
||||||
|
};
|
||||||
|
|
||||||
|
wxString PlatformUnixBSD::CPUCount() {
|
||||||
|
int proc;
|
||||||
|
size_t len = sizeof(proc);
|
||||||
|
sysctlbyname("hw.ncpu", &proc, &len, NULL, 0);
|
||||||
|
return wxString::Format("%d", proc);
|
||||||
|
};
|
||||||
|
|
||||||
|
wxString PlatformUnixBSD::CPUFeatures() {
|
||||||
|
return "";
|
||||||
|
};
|
||||||
|
|
||||||
|
wxString PlatformUnixBSD::CPUFeatures2() {
|
||||||
|
return "";
|
||||||
|
};
|
||||||
|
|
||||||
|
wxString PlatformUnixBSD::Memory() {
|
||||||
|
uint64_t memory;
|
||||||
|
size_t len = sizeof(memory);
|
||||||
|
sysctlbyname("hw.physmem", &memory, &len, NULL, 0);
|
||||||
|
return wxString::Format("%d", memory);
|
||||||
|
return "";
|
||||||
|
};
|
||||||
|
|
||||||
|
wxString PlatformUnixBSD::Video() {
|
||||||
|
return "";
|
||||||
|
};
|
||||||
|
|
||||||
|
wxString PlatformUnixBSD::UnixLibraries() {
|
||||||
|
return "";
|
||||||
|
};
|
|
@ -0,0 +1,40 @@
|
||||||
|
// Copyright (c) 2009, Amar Takhar <verm@aegisub.org>
|
||||||
|
//
|
||||||
|
// Permission to use, copy, modify, and distribute this software for any
|
||||||
|
// purpose with or without fee is hereby granted, provided that the above
|
||||||
|
// copyright notice and this permission notice appear in all copies.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
//
|
||||||
|
// $Id$
|
||||||
|
|
||||||
|
/// @@file platform_unix_bsd.h
|
||||||
|
/// @brief @see platform_unix_bsd.cpp
|
||||||
|
|
||||||
|
class Platform;
|
||||||
|
|
||||||
|
/// @brief BSD values.
|
||||||
|
class PlatformUnixBSD : public PlatformUnix {
|
||||||
|
public:
|
||||||
|
PlatformUnixBSD() {};
|
||||||
|
virtual ~PlatformUnixBSD() {};
|
||||||
|
|
||||||
|
// Hardware
|
||||||
|
virtual wxString CPUId();
|
||||||
|
virtual wxString CPUSpeed();
|
||||||
|
virtual wxString CPUCores();
|
||||||
|
virtual wxString CPUCount();
|
||||||
|
virtual wxString CPUFeatures();
|
||||||
|
virtual wxString CPUFeatures2();
|
||||||
|
virtual wxString Memory();
|
||||||
|
virtual wxString Video();
|
||||||
|
|
||||||
|
// Unix Specific
|
||||||
|
virtual wxString UnixLibraries();
|
||||||
|
};
|
|
@ -0,0 +1,40 @@
|
||||||
|
// Copyright (c) 2009, Amar Takhar <verm@aegisub.org>
|
||||||
|
//
|
||||||
|
// Permission to use, copy, modify, and distribute this software for any
|
||||||
|
// purpose with or without fee is hereby granted, provided that the above
|
||||||
|
// copyright notice and this permission notice appear in all copies.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
//
|
||||||
|
// $Id$
|
||||||
|
|
||||||
|
/// @@file progress.cpp
|
||||||
|
/// @brief Progress bar when uploading data.
|
||||||
|
|
||||||
|
#include "progress.h"
|
||||||
|
|
||||||
|
/// @brief Constructor
|
||||||
|
/// @param frame Main frame.
|
||||||
|
Progress::Progress(wxWindow *frame)
|
||||||
|
: wxProgressDialog(_("Progress"), _("Sending data, please wait."), 100, frame, wxPD_CAN_ABORT|wxPD_ELAPSED_TIME|wxPD_ESTIMATED_TIME|wxPD_REMAINING_TIME|wxPD_AUTO_HIDE) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @brief Cancel the transfer.
|
||||||
|
/// This closes the dialog.
|
||||||
|
void Progress::Cancel(wxCommandEvent& WXUNUSED(event)) {
|
||||||
|
printf("close");
|
||||||
|
Destroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
BEGIN_EVENT_TABLE(Progress, wxProgressDialog)
|
||||||
|
EVT_BUTTON(wxID_CLOSE, Progress::Cancel)
|
||||||
|
EVT_BUTTON(wxID_CANCEL, Progress::Cancel)
|
||||||
|
EVT_CLOSE(Progress::Close)
|
||||||
|
END_EVENT_TABLE()
|
||||||
|
|
|
@ -0,0 +1,31 @@
|
||||||
|
// Copyright (c) 2009, Amar Takhar <verm@aegisub.org>
|
||||||
|
//
|
||||||
|
// Permission to use, copy, modify, and distribute this software for any
|
||||||
|
// purpose with or without fee is hereby granted, provided that the above
|
||||||
|
// copyright notice and this permission notice appear in all copies.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
//
|
||||||
|
// $Id$
|
||||||
|
|
||||||
|
/// @@file progress.h
|
||||||
|
/// @see progress.cpp
|
||||||
|
|
||||||
|
/// @class Progress
|
||||||
|
/// @brief Progress bar.
|
||||||
|
/// @note The Constructor decleration is in main.cpp
|
||||||
|
class Progress: public wxProgressDialog {
|
||||||
|
public:
|
||||||
|
Progress(wxWindow *frame);
|
||||||
|
private:
|
||||||
|
/// @brief No-op incase the user hits the window manager close button.
|
||||||
|
void Close(wxCloseEvent &event) {};
|
||||||
|
void Cancel(wxCommandEvent& event);
|
||||||
|
DECLARE_EVENT_TABLE()
|
||||||
|
};
|
|
@ -0,0 +1,205 @@
|
||||||
|
// Copyright (c) 2009, Amar Takhar <verm@aegisub.org>
|
||||||
|
//
|
||||||
|
// Permission to use, copy, modify, and distribute this software for any
|
||||||
|
// purpose with or without fee is hereby granted, provided that the above
|
||||||
|
// copyright notice and this permission notice appear in all copies.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
//
|
||||||
|
// $Id$
|
||||||
|
|
||||||
|
/// @@file report.cpp
|
||||||
|
/// @brief Generation and manipulation of reports.
|
||||||
|
|
||||||
|
#ifndef R_PRECOMP
|
||||||
|
#include <wx/intl.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "report.h"
|
||||||
|
#include "platform.h"
|
||||||
|
#include "aegisub.h"
|
||||||
|
|
||||||
|
/// @brief Contstructor
|
||||||
|
Report::Report() {
|
||||||
|
ReportCreate();
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @brief Create report layout and add contents.
|
||||||
|
/// @return Document.
|
||||||
|
Report::XMLReport Report::ReportCreate() {
|
||||||
|
|
||||||
|
// So we can use GetString() below.
|
||||||
|
locale = new wxLocale();
|
||||||
|
|
||||||
|
doc.doc = new wxXmlDocument();
|
||||||
|
|
||||||
|
doc.report = new wxXmlNode(wxXML_ELEMENT_NODE, "report");
|
||||||
|
doc.doc->SetRoot(doc.report);
|
||||||
|
Platform *p = Platform::GetPlatform();
|
||||||
|
|
||||||
|
doc.general = new wxXmlNode(doc.report, wxXML_ELEMENT_NODE, "general");
|
||||||
|
Add(doc.general, "signature", p->Signature());
|
||||||
|
Add(doc.general, "date", p->Date());
|
||||||
|
Add(doc.general, "arch", p->ArchName());
|
||||||
|
Add(doc.general, "osfamily", p->OSFamily());
|
||||||
|
Add(doc.general, "osname", p->OSName());
|
||||||
|
Add(doc.general, "osendian", p->Endian());
|
||||||
|
Add(doc.general, "osversion", p->OSVersion());
|
||||||
|
Add(doc.general, "wxversion", p->wxVersion());
|
||||||
|
Add(doc.general, "locale", p->Locale());
|
||||||
|
Add(doc.general, "lang", p->Language());
|
||||||
|
Add(doc.general, "syslang", p->SystemLanguage());
|
||||||
|
|
||||||
|
doc.aegisub = new wxXmlNode(wxXML_ELEMENT_NODE, "aegisub");
|
||||||
|
doc.report->AddChild(doc.aegisub);
|
||||||
|
|
||||||
|
Aegisub *config = new Aegisub::Aegisub();
|
||||||
|
Add(doc.aegisub, "lastversion", config->Read("Config/last version"));
|
||||||
|
Add(doc.aegisub, "spelllang", config->Read("Config/spell checker language"));
|
||||||
|
Add(doc.aegisub, "thesauruslang", config->Read("Config/thesaurus language"));
|
||||||
|
Add(doc.aegisub, "audioplayer", config->Read("Config/audio player"));
|
||||||
|
Add(doc.aegisub, "audioprovider", config->Read("Config/audio provider"));
|
||||||
|
Add(doc.aegisub, "videoprovider", config->Read("Config/video provider"));
|
||||||
|
Add(doc.aegisub, "subtitleprovider", config->Read("Config/subtitles provider"));
|
||||||
|
Add(doc.aegisub, "savecharset", config->Read("Config/save charset"));
|
||||||
|
Add(doc.aegisub, "gridfontsize", config->Read("Config/grid font size"));
|
||||||
|
Add(doc.aegisub, "editfontsize", config->Read("Config/edit font size"));
|
||||||
|
Add(doc.aegisub, "spectrum", config->Read("Config/audio spectrum"));
|
||||||
|
Add(doc.aegisub, "spectrumqual", config->Read("Config/audio spectrum quality"));
|
||||||
|
Add(doc.aegisub, "calltips", config->Read("Config/call tips enabled"));
|
||||||
|
Add(doc.aegisub, "medusakeys", config->Read("Config/audio medusa timing hotkeys"));
|
||||||
|
|
||||||
|
doc.hardware = new wxXmlNode(wxXML_ELEMENT_NODE, "hardware");
|
||||||
|
doc.report->AddChild(doc.hardware);
|
||||||
|
Add(doc.hardware, "memory", p->Memory());
|
||||||
|
Add(doc.hardware, "video", p->Video());
|
||||||
|
|
||||||
|
wxXmlNode *cpu = new wxXmlNode(wxXML_ELEMENT_NODE, "cpu");
|
||||||
|
doc.hardware->AddChild(cpu);
|
||||||
|
Add(cpu, "id", p->CPUId());
|
||||||
|
Add(cpu, "speed", p->CPUSpeed());
|
||||||
|
Add(cpu, "count", p->CPUCount());
|
||||||
|
Add(cpu, "cores", p->CPUCores());
|
||||||
|
Add(cpu, "features", p->CPUFeatures());
|
||||||
|
Add(cpu, "features2", p->CPUFeatures2());
|
||||||
|
|
||||||
|
wxXmlNode *display = new wxXmlNode(wxXML_ELEMENT_NODE, "display");
|
||||||
|
doc.hardware->AddChild(display);
|
||||||
|
Add(display, "depth", p->DisplayDepth());
|
||||||
|
Add(display, "colour", p->DisplayColour());
|
||||||
|
Add(display, "size", p->DisplaySize());
|
||||||
|
Add(display, "ppi", p->DisplayPPI());
|
||||||
|
|
||||||
|
#ifdef __WINDOWS__
|
||||||
|
doc.windows = new wxXmlNode(wxXML_ELEMENT_NODE, "windows");
|
||||||
|
doc.report->AddChild(doc.windows);
|
||||||
|
Add(doc.windows, "sp", p->ServicePack());
|
||||||
|
Add(doc.windows, "graphicsver", p->DriverGraphicsVersion());
|
||||||
|
Add(doc.windows, "dshowfilter", p->DirectShowFilters());
|
||||||
|
Add(doc.windows, "antivirus", p->());
|
||||||
|
Add(doc.windows, "firewall", p->());
|
||||||
|
Add(doc.windows, "dll", p->DLLVersions());
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __UNIX__
|
||||||
|
doc.unixx = new wxXmlNode(wxXML_ELEMENT_NODE, "unix");
|
||||||
|
doc.report->AddChild(doc.unixx);
|
||||||
|
Add(doc.unixx, "desktopenv", p->DesktopEnvironment());
|
||||||
|
Add(doc.unixx, "lib", p->UnixLibraries());
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __APPLE__
|
||||||
|
doc.osx = new wxXmlNode(wxXML_ELEMENT_NODE, "osx");
|
||||||
|
doc.report->AddChild(doc.osx);
|
||||||
|
Add(doc.osx, "patch", p->PatchLevel);
|
||||||
|
Add(doc.osx, "quicktimeext", p->QuickTimeExt);
|
||||||
|
Add(doc.osx, "model", p->HardwareModel);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return doc;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @brief Add a new XML node.
|
||||||
|
/// @param parent Parent nodee
|
||||||
|
/// @param node Name of the new node
|
||||||
|
/// @param text Contents
|
||||||
|
void Report::Add(wxXmlNode *parent, wxString node, wxString text) {
|
||||||
|
// Using AddChild() keeps the nodes in their natural order. It's slower but our
|
||||||
|
// document is pretty small. Doing it the faster way results in reverse-ordered nodes.
|
||||||
|
wxXmlNode *tmp = new wxXmlNode(wxXML_ELEMENT_NODE, node);
|
||||||
|
tmp->AddChild(new wxXmlNode(wxXML_TEXT_NODE, node, text));
|
||||||
|
parent->AddChild(tmp);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @brief Recursive function to populate listView and text-based for Clipboard.
|
||||||
|
/// @param node Node to parse.
|
||||||
|
/// @param listView wxListView to populate.
|
||||||
|
void Report::ProcessNode(wxXmlNode *node, wxString *text, wxListView *listView) {
|
||||||
|
wxString node_name;
|
||||||
|
nameMap::iterator names;
|
||||||
|
nameMap nMap = HumanNames();
|
||||||
|
|
||||||
|
wxXmlNode *child = node->GetChildren();
|
||||||
|
|
||||||
|
while (child) {
|
||||||
|
wxString name = child->GetName();
|
||||||
|
|
||||||
|
if ((names = nMap.find(std::string(name.utf8_str()))) != nMap.end()) {
|
||||||
|
node_name = locale->GetString(names->second);
|
||||||
|
} else {
|
||||||
|
wxLogDebug("Report::ProcessNode Unknown node found: \"%s\" (add it to nMap)\n", name);
|
||||||
|
node_name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxListItem column;
|
||||||
|
int row = listView->GetItemCount();
|
||||||
|
int depth = child->GetDepth();
|
||||||
|
|
||||||
|
if (child->GetChildren()->GetType() == wxXML_ELEMENT_NODE) {
|
||||||
|
int font_size = 15 - (round(depth * 2.5));
|
||||||
|
int bgcolour = 185 + (depth * 25);
|
||||||
|
listView->InsertItem(row,node_name);
|
||||||
|
listView->SetItemFont(row, wxFont(font_size, wxFONTFAMILY_SWISS, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_BOLD));
|
||||||
|
listView->SetItemBackgroundColour(row, wxColour(bgcolour,bgcolour,bgcolour, wxALPHA_OPAQUE));
|
||||||
|
if (depth == 1) text->Append("\n");
|
||||||
|
text->Append(wxString::Format("%s\n", node_name.Pad((depth*2)-2, ' ', 0)));
|
||||||
|
ProcessNode(child, text, listView);
|
||||||
|
} else {
|
||||||
|
wxString content = child->GetNodeContent();
|
||||||
|
listView->InsertItem(row,node_name);
|
||||||
|
listView->SetItem(row,1, content);
|
||||||
|
text->Append(wxString::Format("%-22s: %s\n", node_name.Pad((depth*2)-2, ' ', 0), content));
|
||||||
|
}
|
||||||
|
|
||||||
|
child = child->GetNext();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @brief Fill wxListView with report contents.
|
||||||
|
/// @param listview wxListview to fill.
|
||||||
|
void Report::Fill(wxString *text, wxListView *listView) {
|
||||||
|
|
||||||
|
listView->InsertColumn(0, _("Entry"), wxLIST_FORMAT_RIGHT);
|
||||||
|
listView->InsertColumn(1, _("Text"), wxLIST_FORMAT_LEFT, 100);
|
||||||
|
|
||||||
|
|
||||||
|
//wxString *text = new wxString();
|
||||||
|
|
||||||
|
ProcessNode(doc.report, text, listView);
|
||||||
|
|
||||||
|
listView->SetColumnWidth(0, wxLIST_AUTOSIZE);
|
||||||
|
listView->SetColumnWidth(1, wxLIST_AUTOSIZE);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @brief Return Report as Text for the Clipboard.
|
||||||
|
wxString Report::AsText() {
|
||||||
|
return "not implimented.";
|
||||||
|
}
|
|
@ -0,0 +1,62 @@
|
||||||
|
// Copyright (c) 2009, Amar Takhar <verm@aegisub.org>
|
||||||
|
//
|
||||||
|
// Permission to use, copy, modify, and distribute this software for any
|
||||||
|
// purpose with or without fee is hereby granted, provided that the above
|
||||||
|
// copyright notice and this permission notice appear in all copies.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
//
|
||||||
|
// $Id$
|
||||||
|
|
||||||
|
/// @@file report.h
|
||||||
|
/// @see report.cpp
|
||||||
|
|
||||||
|
#ifndef R_PRECOMP
|
||||||
|
#include <wx/xml/xml.h>
|
||||||
|
#include <wx/listctrl.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include <map>
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
class Report {
|
||||||
|
|
||||||
|
public:
|
||||||
|
Report();
|
||||||
|
~Report() {};
|
||||||
|
|
||||||
|
void Fill(wxString *text, wxListView *listView);
|
||||||
|
wxString AsText();
|
||||||
|
|
||||||
|
private:
|
||||||
|
struct lst_comp {
|
||||||
|
bool operator() (const wxString &a, const wxString &b) { return a.Cmp(b) < 0; }
|
||||||
|
};
|
||||||
|
typedef std::map<std::string, std::string, lst_comp> nameMap;
|
||||||
|
typedef std::pair<std::string, std::string> nPair;
|
||||||
|
|
||||||
|
struct XMLReport {
|
||||||
|
wxXmlDocument *doc; /// Parent document.
|
||||||
|
wxXmlNode *report; /// Root node.
|
||||||
|
wxXmlNode *general; /// General.
|
||||||
|
wxXmlNode *aegisub; /// Aegisub related..
|
||||||
|
wxXmlNode *hardware; /// Hardware.
|
||||||
|
wxXmlNode *windows; /// Windows specific.
|
||||||
|
wxXmlNode *unixx; /// Unix specific.
|
||||||
|
wxXmlNode *osx; /// OS X specific.
|
||||||
|
};
|
||||||
|
XMLReport ReportCreate();
|
||||||
|
XMLReport doc;
|
||||||
|
|
||||||
|
void Add(wxXmlNode *parent, wxString node, wxString text);
|
||||||
|
const nameMap HumanNames();
|
||||||
|
nameMap nMap;
|
||||||
|
void ProcessNode(wxXmlNode *node, wxString *text, wxListView *listView);
|
||||||
|
wxLocale *locale;
|
||||||
|
};
|
|
@ -0,0 +1,315 @@
|
||||||
|
/*-
|
||||||
|
* Copyright 2005 Colin Percival
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* $FreeBSD: src/lib/libmd/sha256c.c,v 1.1 2005/03/09 19:23:04 cperciva Exp $
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
#include "sha256.h"
|
||||||
|
|
||||||
|
static __inline uint32_t
|
||||||
|
be32dec(const void *pp)
|
||||||
|
{
|
||||||
|
unsigned char const *p = (unsigned char const *)pp;
|
||||||
|
|
||||||
|
return ((p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3]);
|
||||||
|
}
|
||||||
|
|
||||||
|
static __inline void
|
||||||
|
be32enc(void *pp, uint32_t u)
|
||||||
|
{
|
||||||
|
unsigned char *p = (unsigned char *)pp;
|
||||||
|
|
||||||
|
p[0] = (u >> 24) & 0xff;
|
||||||
|
p[1] = (u >> 16) & 0xff;
|
||||||
|
p[2] = (u >> 8) & 0xff;
|
||||||
|
p[3] = u & 0xff;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if BYTE_ORDER == BIG_ENDIAN
|
||||||
|
|
||||||
|
/* Copy a vector of big-endian uint32_t into a vector of bytes */
|
||||||
|
#define be32enc_vect(dst, src, len) \
|
||||||
|
memcpy((void *)dst, (const void *)src, (size_t)len)
|
||||||
|
|
||||||
|
/* Copy a vector of bytes into a vector of big-endian uint32_t */
|
||||||
|
#define be32dec_vect(dst, src, len) \
|
||||||
|
memcpy((void *)dst, (const void *)src, (size_t)len)
|
||||||
|
|
||||||
|
#else /* BYTE_ORDER != BIG_ENDIAN */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Encode a length len/4 vector of (uint32_t) into a length len vector of
|
||||||
|
* (unsigned char) in big-endian form. Assumes len is a multiple of 4.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
be32enc_vect(unsigned char *dst, const uint32_t *src, size_t len)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
for (i = 0; i < len / 4; i++)
|
||||||
|
be32enc(dst + i * 4, src[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Decode a big-endian length len vector of (unsigned char) into a length
|
||||||
|
* len/4 vector of (uint32_t). Assumes len is a multiple of 4.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
be32dec_vect(uint32_t *dst, const unsigned char *src, size_t len)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
for (i = 0; i < len / 4; i++)
|
||||||
|
dst[i] = be32dec(src + i * 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* BYTE_ORDER != BIG_ENDIAN */
|
||||||
|
|
||||||
|
/* Elementary functions used by SHA256 */
|
||||||
|
#define Ch(x, y, z) ((x & (y ^ z)) ^ z)
|
||||||
|
#define Maj(x, y, z) ((x & (y | z)) | (y & z))
|
||||||
|
#define SHR(x, n) (x >> n)
|
||||||
|
#define ROTR(x, n) ((x >> n) | (x << (32 - n)))
|
||||||
|
#define S0(x) (ROTR(x, 2) ^ ROTR(x, 13) ^ ROTR(x, 22))
|
||||||
|
#define S1(x) (ROTR(x, 6) ^ ROTR(x, 11) ^ ROTR(x, 25))
|
||||||
|
#define s0(x) (ROTR(x, 7) ^ ROTR(x, 18) ^ SHR(x, 3))
|
||||||
|
#define s1(x) (ROTR(x, 17) ^ ROTR(x, 19) ^ SHR(x, 10))
|
||||||
|
|
||||||
|
/* SHA256 round function */
|
||||||
|
#define RND(a, b, c, d, e, f, g, h, k) \
|
||||||
|
t0 = h + S1(e) + Ch(e, f, g) + k; \
|
||||||
|
t1 = S0(a) + Maj(a, b, c); \
|
||||||
|
d += t0; \
|
||||||
|
h = t0 + t1;
|
||||||
|
|
||||||
|
/* Adjusted round function for rotating state */
|
||||||
|
#define RNDr(S, W, i, k) \
|
||||||
|
RND(S[(64 - i) % 8], S[(65 - i) % 8], \
|
||||||
|
S[(66 - i) % 8], S[(67 - i) % 8], \
|
||||||
|
S[(68 - i) % 8], S[(69 - i) % 8], \
|
||||||
|
S[(70 - i) % 8], S[(71 - i) % 8], \
|
||||||
|
W[i] + k)
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SHA256 block compression function. The 256-bit state is transformed via
|
||||||
|
* the 512-bit input block to produce a new state.
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
SHA256_Transform(uint32_t * state, const unsigned char block[64])
|
||||||
|
{
|
||||||
|
uint32_t W[64];
|
||||||
|
uint32_t S[8];
|
||||||
|
uint32_t t0, t1;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
/* 1. Prepare message schedule W. */
|
||||||
|
be32dec_vect(W, block, 64);
|
||||||
|
for (i = 16; i < 64; i++)
|
||||||
|
W[i] = s1(W[i - 2]) + W[i - 7] + s0(W[i - 15]) + W[i - 16];
|
||||||
|
|
||||||
|
/* 2. Initialize working variables. */
|
||||||
|
memcpy(S, state, 32);
|
||||||
|
|
||||||
|
/* 3. Mix. */
|
||||||
|
RNDr(S, W, 0, 0x428a2f98);
|
||||||
|
RNDr(S, W, 1, 0x71374491);
|
||||||
|
RNDr(S, W, 2, 0xb5c0fbcf);
|
||||||
|
RNDr(S, W, 3, 0xe9b5dba5);
|
||||||
|
RNDr(S, W, 4, 0x3956c25b);
|
||||||
|
RNDr(S, W, 5, 0x59f111f1);
|
||||||
|
RNDr(S, W, 6, 0x923f82a4);
|
||||||
|
RNDr(S, W, 7, 0xab1c5ed5);
|
||||||
|
RNDr(S, W, 8, 0xd807aa98);
|
||||||
|
RNDr(S, W, 9, 0x12835b01);
|
||||||
|
RNDr(S, W, 10, 0x243185be);
|
||||||
|
RNDr(S, W, 11, 0x550c7dc3);
|
||||||
|
RNDr(S, W, 12, 0x72be5d74);
|
||||||
|
RNDr(S, W, 13, 0x80deb1fe);
|
||||||
|
RNDr(S, W, 14, 0x9bdc06a7);
|
||||||
|
RNDr(S, W, 15, 0xc19bf174);
|
||||||
|
RNDr(S, W, 16, 0xe49b69c1);
|
||||||
|
RNDr(S, W, 17, 0xefbe4786);
|
||||||
|
RNDr(S, W, 18, 0x0fc19dc6);
|
||||||
|
RNDr(S, W, 19, 0x240ca1cc);
|
||||||
|
RNDr(S, W, 20, 0x2de92c6f);
|
||||||
|
RNDr(S, W, 21, 0x4a7484aa);
|
||||||
|
RNDr(S, W, 22, 0x5cb0a9dc);
|
||||||
|
RNDr(S, W, 23, 0x76f988da);
|
||||||
|
RNDr(S, W, 24, 0x983e5152);
|
||||||
|
RNDr(S, W, 25, 0xa831c66d);
|
||||||
|
RNDr(S, W, 26, 0xb00327c8);
|
||||||
|
RNDr(S, W, 27, 0xbf597fc7);
|
||||||
|
RNDr(S, W, 28, 0xc6e00bf3);
|
||||||
|
RNDr(S, W, 29, 0xd5a79147);
|
||||||
|
RNDr(S, W, 30, 0x06ca6351);
|
||||||
|
RNDr(S, W, 31, 0x14292967);
|
||||||
|
RNDr(S, W, 32, 0x27b70a85);
|
||||||
|
RNDr(S, W, 33, 0x2e1b2138);
|
||||||
|
RNDr(S, W, 34, 0x4d2c6dfc);
|
||||||
|
RNDr(S, W, 35, 0x53380d13);
|
||||||
|
RNDr(S, W, 36, 0x650a7354);
|
||||||
|
RNDr(S, W, 37, 0x766a0abb);
|
||||||
|
RNDr(S, W, 38, 0x81c2c92e);
|
||||||
|
RNDr(S, W, 39, 0x92722c85);
|
||||||
|
RNDr(S, W, 40, 0xa2bfe8a1);
|
||||||
|
RNDr(S, W, 41, 0xa81a664b);
|
||||||
|
RNDr(S, W, 42, 0xc24b8b70);
|
||||||
|
RNDr(S, W, 43, 0xc76c51a3);
|
||||||
|
RNDr(S, W, 44, 0xd192e819);
|
||||||
|
RNDr(S, W, 45, 0xd6990624);
|
||||||
|
RNDr(S, W, 46, 0xf40e3585);
|
||||||
|
RNDr(S, W, 47, 0x106aa070);
|
||||||
|
RNDr(S, W, 48, 0x19a4c116);
|
||||||
|
RNDr(S, W, 49, 0x1e376c08);
|
||||||
|
RNDr(S, W, 50, 0x2748774c);
|
||||||
|
RNDr(S, W, 51, 0x34b0bcb5);
|
||||||
|
RNDr(S, W, 52, 0x391c0cb3);
|
||||||
|
RNDr(S, W, 53, 0x4ed8aa4a);
|
||||||
|
RNDr(S, W, 54, 0x5b9cca4f);
|
||||||
|
RNDr(S, W, 55, 0x682e6ff3);
|
||||||
|
RNDr(S, W, 56, 0x748f82ee);
|
||||||
|
RNDr(S, W, 57, 0x78a5636f);
|
||||||
|
RNDr(S, W, 58, 0x84c87814);
|
||||||
|
RNDr(S, W, 59, 0x8cc70208);
|
||||||
|
RNDr(S, W, 60, 0x90befffa);
|
||||||
|
RNDr(S, W, 61, 0xa4506ceb);
|
||||||
|
RNDr(S, W, 62, 0xbef9a3f7);
|
||||||
|
RNDr(S, W, 63, 0xc67178f2);
|
||||||
|
|
||||||
|
/* 4. Mix local working variables into global state */
|
||||||
|
for (i = 0; i < 8; i++)
|
||||||
|
state[i] += S[i];
|
||||||
|
}
|
||||||
|
|
||||||
|
static unsigned char PAD[64] = {
|
||||||
|
0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
|
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Add padding and terminating bit-count. */
|
||||||
|
static void
|
||||||
|
SHA256_Pad(SHA256_CTX * ctx)
|
||||||
|
{
|
||||||
|
unsigned char len[8];
|
||||||
|
uint32_t r, plen;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Convert length to a vector of bytes -- we do this now rather
|
||||||
|
* than later because the length will change after we pad.
|
||||||
|
*/
|
||||||
|
be32enc_vect(len, ctx->count, 8);
|
||||||
|
|
||||||
|
/* Add 1--64 bytes so that the resulting length is 56 mod 64 */
|
||||||
|
r = (ctx->count[1] >> 3) & 0x3f;
|
||||||
|
plen = (r < 56) ? (56 - r) : (120 - r);
|
||||||
|
SHA256_Update(ctx, PAD, (size_t)plen);
|
||||||
|
|
||||||
|
/* Add the terminating bit-count */
|
||||||
|
SHA256_Update(ctx, len, 8);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* SHA-256 initialization. Begins a SHA-256 operation. */
|
||||||
|
void
|
||||||
|
SHA256_Init(SHA256_CTX * ctx)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* Zero bits processed so far */
|
||||||
|
ctx->count[0] = ctx->count[1] = 0;
|
||||||
|
|
||||||
|
/* Magic initialization constants */
|
||||||
|
ctx->state[0] = 0x6A09E667;
|
||||||
|
ctx->state[1] = 0xBB67AE85;
|
||||||
|
ctx->state[2] = 0x3C6EF372;
|
||||||
|
ctx->state[3] = 0xA54FF53A;
|
||||||
|
ctx->state[4] = 0x510E527F;
|
||||||
|
ctx->state[5] = 0x9B05688C;
|
||||||
|
ctx->state[6] = 0x1F83D9AB;
|
||||||
|
ctx->state[7] = 0x5BE0CD19;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Add bytes into the hash */
|
||||||
|
void
|
||||||
|
SHA256_Update(SHA256_CTX * ctx, const unsigned char *src, size_t len)
|
||||||
|
{
|
||||||
|
uint32_t bitlen[2];
|
||||||
|
uint32_t r;
|
||||||
|
|
||||||
|
/* Number of bytes left in the buffer from previous updates */
|
||||||
|
r = (ctx->count[1] >> 3) & 0x3f;
|
||||||
|
|
||||||
|
/* Convert the length into a number of bits */
|
||||||
|
bitlen[1] = ((uint32_t)len) << 3;
|
||||||
|
bitlen[0] = (uint32_t)(len >> 29);
|
||||||
|
|
||||||
|
/* Update number of bits */
|
||||||
|
if ((ctx->count[1] += bitlen[1]) < bitlen[1])
|
||||||
|
ctx->count[0]++;
|
||||||
|
ctx->count[0] += bitlen[0];
|
||||||
|
|
||||||
|
/* Handle the case where we don't need to perform any transforms */
|
||||||
|
if (len < 64 - r) {
|
||||||
|
memcpy(&ctx->buf[r], src, len);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Finish the current block */
|
||||||
|
memcpy(&ctx->buf[r], src, 64 - r);
|
||||||
|
SHA256_Transform(ctx->state, ctx->buf);
|
||||||
|
src += 64 - r;
|
||||||
|
len -= 64 - r;
|
||||||
|
|
||||||
|
/* Perform complete blocks */
|
||||||
|
while (len >= 64) {
|
||||||
|
SHA256_Transform(ctx->state, src);
|
||||||
|
src += 64;
|
||||||
|
len -= 64;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Copy left over data into buffer */
|
||||||
|
memcpy(ctx->buf, src, len);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* SHA-256 finalization. Pads the input data, exports the hash value,
|
||||||
|
* and clears the context state.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
SHA256_Final(unsigned char digest[32], SHA256_CTX * ctx)
|
||||||
|
{
|
||||||
|
|
||||||
|
/* Add padding */
|
||||||
|
SHA256_Pad(ctx);
|
||||||
|
|
||||||
|
/* Write the hash */
|
||||||
|
be32enc_vect(digest, ctx->state, 32);
|
||||||
|
|
||||||
|
/* Clear the context state */
|
||||||
|
memset((void *)ctx, 0, sizeof(*ctx));
|
||||||
|
}
|
|
@ -0,0 +1,45 @@
|
||||||
|
/*-
|
||||||
|
* Copyright 2005 Colin Percival
|
||||||
|
* All rights reserved.
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
|
* documentation and/or other materials provided with the distribution.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
|
||||||
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
||||||
|
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
|
||||||
|
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||||
|
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||||
|
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
|
||||||
|
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||||
|
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||||
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
|
* SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
* $FreeBSD: src/lib/libmd/sha256.h,v 1.1 2005/03/09 19:23:04 cperciva Exp $
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _SHA256_H_
|
||||||
|
#define _SHA256_H_
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
typedef struct SHA256Context {
|
||||||
|
uint32_t state[8];
|
||||||
|
uint32_t count[2];
|
||||||
|
unsigned char buf[64];
|
||||||
|
} SHA256_CTX;
|
||||||
|
|
||||||
|
void SHA256_Init(SHA256_CTX *);
|
||||||
|
void SHA256_Update(SHA256_CTX *, const unsigned char *, size_t);
|
||||||
|
void SHA256_Final(unsigned char [32], SHA256_CTX *);
|
||||||
|
|
||||||
|
#endif /* !_SHA256_H_ */
|
|
@ -0,0 +1,145 @@
|
||||||
|
// Copyright (c) 2009, Amar Takhar <verm@aegisub.org>
|
||||||
|
//
|
||||||
|
// Permission to use, copy, modify, and distribute this software for any
|
||||||
|
// purpose with or without fee is hereby granted, provided that the above
|
||||||
|
// copyright notice and this permission notice appear in all copies.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
//
|
||||||
|
// $Id$
|
||||||
|
|
||||||
|
/// @@file upload.cpp
|
||||||
|
/// @brief Handle uploading of data.
|
||||||
|
|
||||||
|
#ifndef R_PRECOMP
|
||||||
|
#include <wx/file.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "upload.h"
|
||||||
|
|
||||||
|
/// @brief Constructor.
|
||||||
|
Upload::Upload(Progress *prog) {
|
||||||
|
/// XXX: error checking.
|
||||||
|
progress = prog;
|
||||||
|
handle = curl_easy_init();
|
||||||
|
// curl_easy_setopt(handle, CURLOPT_VERBOSE, 1L);
|
||||||
|
curl_easy_setopt(handle, CURLOPT_USERAGENT, "Reporter v1.0");
|
||||||
|
curl_easy_setopt(handle, CURLOPT_READFUNCTION, CBRead);
|
||||||
|
curl_easy_setopt(handle, CURLOPT_PROGRESSFUNCTION, CBProgress);
|
||||||
|
curl_easy_setopt(handle, CURLOPT_NOPROGRESS, 0L);
|
||||||
|
curl_easy_setopt(handle, CURLOPT_PROGRESSDATA, progress);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// @brief Destructor.
|
||||||
|
Upload::~Upload() {
|
||||||
|
curl_free(handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// @brief Submit an XML report.
|
||||||
|
/// @param report filename of the report.
|
||||||
|
void Upload::Report(wxString report) {
|
||||||
|
wxFile file(report, wxFile::read);
|
||||||
|
SendFile("http://reporter.darkbeer.org/PUT/", file);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// @brief Progress callback.
|
||||||
|
/// @param p pointer to progress info.
|
||||||
|
/// @param dlt download size.
|
||||||
|
/// @param dln downloaded.
|
||||||
|
/// @param ult upload size.
|
||||||
|
/// @param uln uploaded.
|
||||||
|
int Upload::CBProgress(void *p, double dlt, double dln, double ult, double uln) {
|
||||||
|
|
||||||
|
if (uln > 0) {
|
||||||
|
Progress *progress = (Progress*) p;
|
||||||
|
// Update returns false if the user has hit abort.
|
||||||
|
if (progress->Update(round(ult / uln) * 100) == false)
|
||||||
|
// Returning non-zero will cause curl to abort the transfer.
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// @brief Callback to read data from a FD.
|
||||||
|
/// @param p buffer to fill.
|
||||||
|
/// @param size byte length.
|
||||||
|
/// @param nmemb object size.
|
||||||
|
/// @param filep FP to read from.
|
||||||
|
size_t Upload::CBRead(char *p, size_t size, size_t nmemb, void *filep) {
|
||||||
|
// This is on purpose to wx doesn't close the fp, curl does that for us.
|
||||||
|
wxFile *file = new wxFile((int)filep);
|
||||||
|
|
||||||
|
if (file->Eof())
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
int ret = file->Read(p, file->Length());
|
||||||
|
if (ret == wxInvalidOffset)
|
||||||
|
return CURL_READFUNC_ABORT;
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// @brief Send a file to the server
|
||||||
|
/// @param file file to send.
|
||||||
|
/// @return 1/0 for success/failure.
|
||||||
|
bool Upload::SendFile(const char *url, wxFile &file) {
|
||||||
|
progress->Update(0, _("Connecting..."));
|
||||||
|
curl_easy_setopt(handle, CURLOPT_URL, url);
|
||||||
|
Error(curl_easy_perform(handle));
|
||||||
|
|
||||||
|
curl_easy_setopt(handle, CURLOPT_UPLOAD, 1L);
|
||||||
|
curl_easy_setopt(handle, CURLOPT_PUT, 1L);
|
||||||
|
curl_easy_setopt(handle, CURLOPT_READDATA, file.fd());
|
||||||
|
curl_easy_setopt(handle, CURLOPT_INFILESIZE_LARGE, (curl_off_t)file.Length());
|
||||||
|
CURLcode res = curl_easy_perform(handle);
|
||||||
|
Error(res);
|
||||||
|
|
||||||
|
curl_easy_setopt(handle, CURLOPT_HTTPGET, 1L); // Reset to HTTP GET
|
||||||
|
curl_easy_cleanup(handle);
|
||||||
|
if (res == CURLE_OK)
|
||||||
|
return 1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// @brief Handle error codes
|
||||||
|
/// @param error CURLcode.
|
||||||
|
void Upload::Error(CURLcode error) {
|
||||||
|
switch (error) {
|
||||||
|
case CURLE_OK:
|
||||||
|
progress->Update(0, _("Sending data..."));
|
||||||
|
break;
|
||||||
|
case CURLE_COULDNT_RESOLVE_HOST:
|
||||||
|
progress->Update(0, _("Couldn't resolve host."));
|
||||||
|
break;
|
||||||
|
case CURLE_COULDNT_CONNECT:
|
||||||
|
progress->Update(0, _("Couldn't connect to server."));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CURLE_SEND_ERROR: // socket error
|
||||||
|
case CURLE_RECV_ERROR: // socket error
|
||||||
|
progress->Update(0, _("Connection error."));
|
||||||
|
break;
|
||||||
|
case CURLE_GOT_NOTHING: // no response from server
|
||||||
|
case CURLE_HTTP_RETURNED_ERROR: // HTTP error >= 400
|
||||||
|
progress->Update(0, _("Server error."));
|
||||||
|
break;
|
||||||
|
case CURLE_OPERATION_TIMEDOUT:
|
||||||
|
progress->Update(0, _("Operation timeout."));
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
progress->Update(0, wxString::Format("Transfer error. (%d)\n", error));
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
// Copyright (c) 2009, Amar Takhar <verm@aegisub.org>
|
||||||
|
//
|
||||||
|
// Permission to use, copy, modify, and distribute this software for any
|
||||||
|
// purpose with or without fee is hereby granted, provided that the above
|
||||||
|
// copyright notice and this permission notice appear in all copies.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
//
|
||||||
|
// $Id$
|
||||||
|
|
||||||
|
/// @@file upload.h
|
||||||
|
/// @see upload.cpp
|
||||||
|
|
||||||
|
#ifndef R_PRECMP
|
||||||
|
#include <wx/file.h>
|
||||||
|
#endif
|
||||||
|
#include <curl/curl.h>
|
||||||
|
#include "progress.h"
|
||||||
|
|
||||||
|
/// @class Upload
|
||||||
|
/// @brief Upload files to the server.
|
||||||
|
class Upload {
|
||||||
|
private:
|
||||||
|
/// Curl handle.
|
||||||
|
CURL *handle;
|
||||||
|
|
||||||
|
/// Progress instance.
|
||||||
|
Progress *progress;
|
||||||
|
static int CBProgress(void *p, double dt, double dc, double ut, double uc);
|
||||||
|
static size_t CBRead(char *p, size_t size, size_t nmemb, void *filep);
|
||||||
|
void Error(CURLcode error);
|
||||||
|
public:
|
||||||
|
Upload(Progress *prog);
|
||||||
|
~Upload();
|
||||||
|
void Report(wxString report);
|
||||||
|
bool SendFile(const char *url, wxFile &file);
|
||||||
|
};
|
|
@ -0,0 +1,77 @@
|
||||||
|
// Copyright (c) 2009, Amar Takhar <verm@aegisub.org>
|
||||||
|
//
|
||||||
|
// Permission to use, copy, modify, and distribute this software for any
|
||||||
|
// purpose with or without fee is hereby granted, provided that the above
|
||||||
|
// copyright notice and this permission notice appear in all copies.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
//
|
||||||
|
// $Id$
|
||||||
|
|
||||||
|
/// @@file view.cpp
|
||||||
|
/// @brief View report in a human readable way.
|
||||||
|
|
||||||
|
#ifndef R_PRECOMP
|
||||||
|
#include <wx/window.h>
|
||||||
|
#include <wx/sizer.h>
|
||||||
|
#include <wx/button.h>
|
||||||
|
#include <wx/clipbrd.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "view.h"
|
||||||
|
|
||||||
|
/// @brief View report dialog.
|
||||||
|
/// @param frame Parent frame.
|
||||||
|
/// @param r Report instance.
|
||||||
|
View::View(wxWindow *frame, Report *r)
|
||||||
|
: wxDialog (frame, wxID_ANY, _("View Report"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX | wxRESIZE_BORDER, _("View Report"))
|
||||||
|
{
|
||||||
|
wxSizer *topSizer = new wxBoxSizer(wxVERTICAL);
|
||||||
|
|
||||||
|
wxSizer *listSizer = new wxBoxSizer(wxHORIZONTAL);
|
||||||
|
wxListView *listView = new wxListView(this,wxID_ANY,wxDefaultPosition,wxDefaultSize);
|
||||||
|
|
||||||
|
// Fill the list with the actual report.
|
||||||
|
text = new wxString();
|
||||||
|
r->Fill(text, listView);
|
||||||
|
|
||||||
|
listSizer->Add(listView, 1, wxEXPAND);
|
||||||
|
topSizer->Add(listSizer, 1, wxEXPAND | wxALL, 0);
|
||||||
|
|
||||||
|
wxStdDialogButtonSizer *stdButton = new wxStdDialogButtonSizer();
|
||||||
|
stdButton->AddButton(new wxButton(this, wxID_CLOSE, _("Close")));
|
||||||
|
stdButton->AddButton(new wxButton(this, wxID_SAVE, _("Copy to clipboard")));
|
||||||
|
stdButton->Realize();
|
||||||
|
topSizer->Add(stdButton, 0, wxALL | wxCENTRE | wxSHRINK, 5);
|
||||||
|
|
||||||
|
this->SetSizerAndFit(topSizer);
|
||||||
|
this->SetSize(wxSize(500,550));
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @brief Close dialog
|
||||||
|
void View::CloseDialog(wxCommandEvent& WXUNUSED(event)) {
|
||||||
|
Close(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// @brief Copy report to clipboard
|
||||||
|
void View::Clipboard(wxCommandEvent& WXUNUSED(event)) {
|
||||||
|
if (wxTheClipboard->Open()) {
|
||||||
|
#ifdef __UNIX__
|
||||||
|
wxTheClipboard->UsePrimarySelection(true);
|
||||||
|
#endif
|
||||||
|
wxTheClipboard->SetData( new wxTextDataObject(*text));
|
||||||
|
wxTheClipboard->Flush();
|
||||||
|
wxTheClipboard->Close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BEGIN_EVENT_TABLE(View, wxDialog)
|
||||||
|
EVT_BUTTON(wxID_CLOSE, View::CloseDialog)
|
||||||
|
EVT_BUTTON(wxID_SAVE, View::Clipboard)
|
||||||
|
END_EVENT_TABLE()
|
|
@ -0,0 +1,40 @@
|
||||||
|
// Copyright (c) 2009, Amar Takhar <verm@aegisub.org>
|
||||||
|
//
|
||||||
|
// Permission to use, copy, modify, and distribute this software for any
|
||||||
|
// purpose with or without fee is hereby granted, provided that the above
|
||||||
|
// copyright notice and this permission notice appear in all copies.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
//
|
||||||
|
// $Id$
|
||||||
|
|
||||||
|
/// @@file view.h
|
||||||
|
/// @see view.cpp
|
||||||
|
|
||||||
|
#ifndef R_PRECOMP
|
||||||
|
#include <wx/frame.h>
|
||||||
|
#include <wx/event.h>
|
||||||
|
#include <wx/window.h>
|
||||||
|
#include <wx/dialog.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "report.h"
|
||||||
|
|
||||||
|
class View: public wxDialog {
|
||||||
|
public:
|
||||||
|
View(wxWindow *frame, Report *r);
|
||||||
|
~View() {};
|
||||||
|
|
||||||
|
private:
|
||||||
|
Report *r;
|
||||||
|
wxString *text;
|
||||||
|
void CloseDialog(wxCommandEvent& event);
|
||||||
|
void Clipboard(wxCommandEvent& event);
|
||||||
|
DECLARE_EVENT_TABLE()
|
||||||
|
};
|
|
@ -0,0 +1,51 @@
|
||||||
|
// Copyright (c) 2009, Amar Takhar <verm@aegisub.org>
|
||||||
|
//
|
||||||
|
// Permission to use, copy, modify, and distribute this software for any
|
||||||
|
// purpose with or without fee is hereby granted, provided that the above
|
||||||
|
// copyright notice and this permission notice appear in all copies.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
//
|
||||||
|
// $Id$
|
||||||
|
|
||||||
|
/// @@file wx_pre.h
|
||||||
|
/// @brief Precompiled header.
|
||||||
|
|
||||||
|
#define R_PRECOMP
|
||||||
|
|
||||||
|
#include <wx/wxprec.h>
|
||||||
|
|
||||||
|
#include <wx/app.h>
|
||||||
|
#include <wx/button.h>
|
||||||
|
#include <wx/cmdline.h>
|
||||||
|
#include <wx/dialog.h>
|
||||||
|
#include <wx/event.h>
|
||||||
|
#include <wx/font.h>
|
||||||
|
#include <wx/frame.h>
|
||||||
|
#include <wx/gdicmn.h>
|
||||||
|
#include <wx/intl.h>
|
||||||
|
#include <wx/log.h>
|
||||||
|
#include <wx/panel.h>
|
||||||
|
#include <wx/sizer.h>
|
||||||
|
#include <wx/stattext.h>
|
||||||
|
#include <wx/string.h>
|
||||||
|
#include <wx/version.h>
|
||||||
|
#include <wx/window.h>
|
||||||
|
#include <wx/wx.h>
|
||||||
|
#include <wx/wxchar.h>
|
||||||
|
#include <wx/xml/xml.h>
|
||||||
|
#include <wx/listctrl.h>
|
||||||
|
#include <wx/clipbrd.h>
|
||||||
|
#include <wx/intl.h>
|
||||||
|
#include <wx/file.h>
|
||||||
|
#include <wx/progdlg.h>
|
||||||
|
#include <wx/fileconf.h>
|
||||||
|
#include <wx/wfstream.h>
|
||||||
|
#include <wx/apptrait.h>
|
||||||
|
#include <wx/stdpaths.h>
|
Loading…
Reference in New Issue