From 507a9d518eb3b66d01489ddd4d18bedc1f709949 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9=20van=20Geldorp?= Date: Mon, 12 Dec 2005 00:23:07 +0000 Subject: [PATCH] Add small utility to download/install Firefox svn path=/trunk/; revision=20096 --- reactos/apps/utils/directory.xml | 3 + reactos/apps/utils/getfirefox/En.rc | 44 +++ reactos/apps/utils/getfirefox/firefox.ico | Bin 0 -> 22486 bytes reactos/apps/utils/getfirefox/getfirefox.c | 378 +++++++++++++++++++ reactos/apps/utils/getfirefox/getfirefox.rc | 25 ++ reactos/apps/utils/getfirefox/getfirefox.xml | 17 + reactos/apps/utils/getfirefox/precomp.h | 19 + reactos/apps/utils/getfirefox/resource.h | 17 + reactos/bootdata/packages/reactos.dff | 1 + reactos/lib/syssetup/install.c | 1 + reactos/lib/syssetup/resource.h | 1 + reactos/lib/syssetup/syssetup_En.rc | 3 +- 12 files changed, 508 insertions(+), 1 deletion(-) create mode 100644 reactos/apps/utils/getfirefox/En.rc create mode 100755 reactos/apps/utils/getfirefox/firefox.ico create mode 100644 reactos/apps/utils/getfirefox/getfirefox.c create mode 100644 reactos/apps/utils/getfirefox/getfirefox.rc create mode 100644 reactos/apps/utils/getfirefox/getfirefox.xml create mode 100644 reactos/apps/utils/getfirefox/precomp.h create mode 100644 reactos/apps/utils/getfirefox/resource.h diff --git a/reactos/apps/utils/directory.xml b/reactos/apps/utils/directory.xml index 1a1a7676129..360c153cd48 100644 --- a/reactos/apps/utils/directory.xml +++ b/reactos/apps/utils/directory.xml @@ -2,6 +2,9 @@ + + + diff --git a/reactos/apps/utils/getfirefox/En.rc b/reactos/apps/utils/getfirefox/En.rc new file mode 100644 index 00000000000..27d0d903aaf --- /dev/null +++ b/reactos/apps/utils/getfirefox/En.rc @@ -0,0 +1,44 @@ +/* + * PROJECT: ReactOS utilities + * LICENSE: GPL - See COPYING in the top level directory + * FILE: apps/utils/getfirefox/En.rc + * PURPOSE: English resources + * COPYRIGHT: Copyright 2004 Mike McCormack for CodeWeavers + * Copyright 2005 Ge van Geldorp (gvg@reactos.org) + */ +/* + * Based on Wine dlls/shdocvw/En.rc + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT + +IDD_GETFIREFOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 220, 76 +STYLE DS_MODALFRAME | DS_CENTER | WS_VISIBLE | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Downloading Firefox" +FONT 8, "MS Shell Dlg" +{ + CONTROL "Progress1",IDC_PROGRESS,"msctls_progress32",WS_BORDER|PBS_SMOOTH,10,10,200,12 + LTEXT "", IDC_STATUS, 10, 30, 200, 10, SS_CENTER + CHECKBOX "Remove \"Get Firefox\" from Start Menu when done", IDC_REMOVE, + 10, 44, 200, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Cancel", IDCANCEL, 85, 58, 50, 15, WS_GROUP | WS_TABSTOP +} + +STRINGTABLE +BEGIN + IDS_START_MENU_NAME "Get Firefox" +END diff --git a/reactos/apps/utils/getfirefox/firefox.ico b/reactos/apps/utils/getfirefox/firefox.ico new file mode 100755 index 0000000000000000000000000000000000000000..0518438a040d8fa9b5523893e9edbcf9faf9a38c GIT binary patch literal 22486 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 literal 0 HcmV?d00001 diff --git a/reactos/apps/utils/getfirefox/getfirefox.c b/reactos/apps/utils/getfirefox/getfirefox.c new file mode 100644 index 00000000000..604ddbeb9b3 --- /dev/null +++ b/reactos/apps/utils/getfirefox/getfirefox.c @@ -0,0 +1,378 @@ +/* + * PROJECT: ReactOS utilities + * LICENSE: GPL - See COPYING in the top level directory + * FILE: apps/utils/getfirefox/getfirefox.c + * PURPOSE: Main program + * COPYRIGHT: Copyright 2001 John R. Sheets (for CodeWeavers) + * Copyright 2004 Mike McCormack (for CodeWeavers) + * Copyright 2005 Ge van Geldorp (gvg@reactos.org) + */ +/* + * Based on Wine dlls/shdocvw/shdocvw_main.c + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + + +#include + +#define NDEBUG +#include + +#define DOWNLOAD_URL L"http://links.reactos.org/getfirefox" + +typedef struct _IBindStatusCallbackImpl + { + const IBindStatusCallbackVtbl *vtbl; + LONG ref; + HWND hDialog; + BOOL *pbCancelled; + } IBindStatusCallbackImpl; + +static HRESULT WINAPI +dlQueryInterface(IBindStatusCallback* This, REFIID riid, void** ppvObject) +{ + if (NULL == ppvObject) + { + return E_POINTER; + } + + if (IsEqualIID(riid, &IID_IUnknown) || + IsEqualIID(riid, &IID_IBindStatusCallback)) + { + IBindStatusCallback_AddRef( This ); + *ppvObject = This; + return S_OK; + } + + return E_NOINTERFACE; +} + +static ULONG WINAPI +dlAddRef(IBindStatusCallback* iface) +{ + IBindStatusCallbackImpl *This = (IBindStatusCallbackImpl *) iface; + + return InterlockedIncrement(&This->ref); +} + +static ULONG WINAPI +dlRelease(IBindStatusCallback* iface) +{ + IBindStatusCallbackImpl *This = (IBindStatusCallbackImpl *) iface; + DWORD ref = InterlockedDecrement(&This->ref); + + if( !ref ) + { + DestroyWindow( This->hDialog ); + HeapFree(GetProcessHeap(), 0, This); + } + + return ref; +} + +static HRESULT WINAPI +dlOnStartBinding(IBindStatusCallback* iface, DWORD dwReserved, IBinding* pib) +{ + DPRINT1("OnStartBinding not implemented\n"); + + return S_OK; +} + +static HRESULT WINAPI +dlGetPriority(IBindStatusCallback* iface, LONG* pnPriority) +{ + DPRINT1("GetPriority not implemented\n"); + + return S_OK; +} + +static HRESULT WINAPI +dlOnLowResource( IBindStatusCallback* iface, DWORD reserved) +{ + DPRINT1("OnLowResource not implemented\n"); + + return S_OK; +} + +static HRESULT WINAPI +dlOnProgress(IBindStatusCallback* iface, ULONG ulProgress, + ULONG ulProgressMax, ULONG ulStatusCode, LPCWSTR szStatusText) +{ + IBindStatusCallbackImpl *This = (IBindStatusCallbackImpl *) iface; + HWND Item; + LONG r; + WCHAR OldText[100]; + + Item = GetDlgItem(This->hDialog, IDC_PROGRESS); + if (NULL != Item && 0 != ulProgressMax) + { + SendMessageW(Item, PBM_SETPOS, (ulProgress * 100) / ulProgressMax, 0); + } + + Item = GetDlgItem(This->hDialog, IDC_STATUS); + if (NULL != Item) + { + SendMessageW(Item, WM_GETTEXT, sizeof(OldText) / sizeof(OldText[0]), + (LPARAM) OldText); + if (sizeof(OldText) / sizeof(OldText[0]) - 1 <= wcslen(OldText) || + 0 != wcscmp(OldText, szStatusText)) + { + SendMessageW(Item, WM_SETTEXT, 0, (LPARAM) szStatusText); + } + } + + SetLastError(0); + r = GetWindowLongPtrW(This->hDialog, GWLP_USERDATA); + if (0 != r || 0 != GetLastError()) + { + *This->pbCancelled = TRUE; + DPRINT("Cancelled\n"); + return E_ABORT; + } + + return S_OK; +} + +static HRESULT WINAPI +dlOnStopBinding(IBindStatusCallback* iface, HRESULT hresult, LPCWSTR szError) +{ + DPRINT1("OnStopBinding not implemented\n"); + + return S_OK; +} + +static HRESULT WINAPI +dlGetBindInfo(IBindStatusCallback* iface, DWORD* grfBINDF, BINDINFO* pbindinfo) +{ + DPRINT1("GetBindInfo not implemented\n"); + + return S_OK; +} + +static HRESULT WINAPI +dlOnDataAvailable(IBindStatusCallback* iface, DWORD grfBSCF, + DWORD dwSize, FORMATETC* pformatetc, STGMEDIUM* pstgmed) +{ + DPRINT1("OnDataAvailable implemented\n"); + + return S_OK; +} + +static HRESULT WINAPI +dlOnObjectAvailable(IBindStatusCallback* iface, REFIID riid, IUnknown* punk) +{ + DPRINT1("OnObjectAvailable implemented\n"); + + return S_OK; +} + +static const IBindStatusCallbackVtbl dlVtbl = +{ + dlQueryInterface, + dlAddRef, + dlRelease, + dlOnStartBinding, + dlGetPriority, + dlOnLowResource, + dlOnProgress, + dlOnStopBinding, + dlGetBindInfo, + dlOnDataAvailable, + dlOnObjectAvailable +}; + +static IBindStatusCallback* +CreateDl(HWND Dlg, BOOL *pbCancelled) +{ + IBindStatusCallbackImpl *This; + + This = HeapAlloc(GetProcessHeap(), 0, sizeof(IBindStatusCallbackImpl)); + This->vtbl = &dlVtbl; + This->ref = 1; + This->hDialog = Dlg; + This->pbCancelled = pbCancelled; + + return (IBindStatusCallback*) This; +} + +static BOOL +GetShortcutName(LPWSTR ShortcutName) +{ + if (! SHGetSpecialFolderPathW(0, ShortcutName, CSIDL_PROGRAMS, FALSE)) + { + return FALSE; + } + if (NULL == PathAddBackslashW(ShortcutName)) + { + return FALSE; + } + if (0 == LoadStringW(GetModuleHandle(NULL), IDS_START_MENU_NAME, + ShortcutName + wcslen(ShortcutName), + MAX_PATH - wcslen(ShortcutName))) + { + return FALSE; + } + if (MAX_PATH - 5 < wcslen(ShortcutName)) + { + return FALSE; + } + wcscat(ShortcutName, L".lnk"); + + return TRUE; +} + +static DWORD WINAPI +ThreadFunc(LPVOID Context) +{ + static const WCHAR szUrl[] = DOWNLOAD_URL; + IBindStatusCallback *dl; + WCHAR path[MAX_PATH], ShortcutName[MAX_PATH]; + LPWSTR p; + STARTUPINFOW si; + PROCESS_INFORMATION pi; + HWND Dlg = (HWND) Context; + DWORD r; + BOOL bCancelled = FALSE; + BOOL bTempfile = FALSE; + + /* built the path for the download */ + p = wcsrchr(szUrl, L'/'); + if (NULL == p) + { + goto end; + } + if (! GetTempPathW(MAX_PATH, path)) + { + goto end; + } + wcscat(path, p + 1); + + /* download it */ + bTempfile = TRUE; + dl = CreateDl(Context, &bCancelled); + r = URLDownloadToFileW(NULL, szUrl, path, 0, dl); + if (NULL != dl) + { + IBindStatusCallback_Release(dl); + } + if (S_OK != r || bCancelled ) + { + goto end; + } + ShowWindow(Dlg, SW_HIDE); + + /* run it */ + memset(&si, 0, sizeof(si)); + si.cb = sizeof(si); + r = CreateProcessW(path, NULL, NULL, NULL, 0, 0, NULL, NULL, &si, &pi); + if (0 == r) + { + goto end; + } + CloseHandle(pi.hThread); + WaitForSingleObject(pi.hProcess, INFINITE); + CloseHandle(pi.hProcess); + + if (BST_CHECKED == SendMessageW(GetDlgItem(Dlg, IDC_REMOVE), BM_GETCHECK, + 0, 0) && + GetShortcutName(ShortcutName)) + { + DeleteFileW(ShortcutName); + } + +end: + if (bTempfile) + { + DeleteFileW(path); + } + EndDialog(Dlg, 0); + return 0; +} + +static INT_PTR CALLBACK +dlProc(HWND Dlg, UINT Msg, WPARAM wParam, LPARAM lParam) +{ + HANDLE Thread; + DWORD ThreadId; + HWND Item; + HICON Icon; + WCHAR ShortcutName[MAX_PATH]; + + switch (Msg) + { + case WM_INITDIALOG: + Icon = LoadIconW((HINSTANCE) GetWindowLongPtr(Dlg, GWLP_HINSTANCE), + MAKEINTRESOURCEW(IDI_ICON_MAIN)); + if (NULL != Icon) + { + SendMessageW(Dlg, WM_SETICON, ICON_BIG, (LPARAM) Icon); + SendMessageW(Dlg, WM_SETICON, ICON_SMALL, (LPARAM) Icon); + } + SetWindowLongPtrW(Dlg, GWLP_USERDATA, 0); + Item = GetDlgItem(Dlg, IDC_PROGRESS); + if (NULL != Item) + { + SendMessageW(Item, PBM_SETRANGE, 0, MAKELPARAM(0,100)); + SendMessageW(Item, PBM_SETPOS, 0, 0); + } + Item = GetDlgItem(Dlg, IDC_REMOVE); + if (NULL != Item) + { + if (GetShortcutName(ShortcutName) && + INVALID_FILE_ATTRIBUTES != GetFileAttributesW(ShortcutName)) + { + SendMessageW(Item, BM_SETCHECK, BST_CHECKED, 0); + } + else + { + SendMessageW(Item, BM_SETCHECK, BST_UNCHECKED, 0); + ShowWindow(Item, SW_HIDE); + } + } + Thread = CreateThread(NULL, 0, ThreadFunc, Dlg, 0, &ThreadId); + if (NULL == Thread) + { + return FALSE; + } + CloseHandle(Thread); + return TRUE; + + case WM_COMMAND: + if (wParam == IDCANCEL) + { + SetWindowLongPtrW(Dlg, GWLP_USERDATA, 1); + } + return FALSE; + + default: + return FALSE; + } +} + + +/*********************************************************************** + * Main program + */ +int +main(int argc, char *argv[]) +{ + InitCommonControls(); + + DialogBoxW(GetModuleHandle(NULL), MAKEINTRESOURCEW(IDD_GETFIREFOX), 0, + dlProc); + + return 0; +} diff --git a/reactos/apps/utils/getfirefox/getfirefox.rc b/reactos/apps/utils/getfirefox/getfirefox.rc new file mode 100644 index 00000000000..e26cf17d5ca --- /dev/null +++ b/reactos/apps/utils/getfirefox/getfirefox.rc @@ -0,0 +1,25 @@ +/* + * PROJECT: ReactOS utilities + * LICENSE: GPL - See COPYING in the top level directory + * FILE: apps/utils/getfirefox/getfirefox.rc + * PURPOSE: Language-independent resources + * COPYRIGHT: Copyright 2005 Ge van Geldorp (gvg@reactos.org) + */ + +#include +#include "resource.h" + +#define REACTOS_STR_FILE_DESCRIPTION "Firefox downloader\0" +#define REACTOS_STR_INTERNAL_NAME "getfirefox\0" +#define REACTOS_STR_ORIGINAL_FILENAME "getfirefox.exe\0" +#include + +/* + * Note: this icon is the "default logo" referenced here: + * http://www.mozilla.org/foundation/trademarks/faq.html (under "What are the + * Mozilla Trademarks and Logos?"). Don't use the official Firefox logo as it + * is trademarked. + */ +1 ICON "firefox.ico" + +#include "En.rc" diff --git a/reactos/apps/utils/getfirefox/getfirefox.xml b/reactos/apps/utils/getfirefox/getfirefox.xml new file mode 100644 index 00000000000..fab9acc49f4 --- /dev/null +++ b/reactos/apps/utils/getfirefox/getfirefox.xml @@ -0,0 +1,17 @@ + + . + + + + 0x0501 +