Changeset 107


Ignore:
Timestamp:
12/22/06 15:33:56 (13 years ago)
Author:
Eoin
Message:

Halite v 0.2.7 with new icon.

Files:
9 added
22 edited

Legend:

Unmodified
Added
Removed
  • Halite.iss

    r81 r107  
    1 ; Script generated by the Inno Setup Script Wizard. 
    2 ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! 
     1; -- Halite.iss -- 
    32 
    43#define MyAppName "Halite" 
    5 #define MyAppVerName "Halite 0.5" 
     4#define MyAppVerName "Halite 0.2.8" 
    65#define MyAppPublisher "BinaryNotions.com" 
    7 #define MyAppURL "http://www.binarynotions.com" 
     6#define MyAppURL "http://www.binarynotions.com/halite.php" 
    87#define MyAppExeName "Halite.exe" 
     8#define MyAppUrlName "Halite.url" 
    99 
    1010[Setup] 
     
    1818DefaultGroupName={#MyAppName} 
    1919AllowNoIcons=yes 
    20 LicenseFile=G:\Documents and Settings\Eoin\My Documents\Websites\Website Mirror\LICENSE_1_0.txt 
    21 OutputBaseFilename=setup 
     20LicenseFile=G:\Develop\C++\Personal\Halite\LICENSE_1_0.txt 
     21OutputBaseFilename=Halite.0_2_8.setup 
    2222Compression=lzma 
    23 SolidCompression=yes 
     23SolidCompression=true 
     24UninstallDisplayIcon={app}\{#MyAppName} 
     25OutputDir=.\bin 
    2426 
    2527[Languages] 
     
    2931Name: desktopicon; Description: {cm:CreateDesktopIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked 
    3032Name: quicklaunchicon; Description: {cm:CreateQuickLaunchIcon}; GroupDescription: {cm:AdditionalIcons}; Flags: unchecked 
     33Name: associate_torrent; Description: {cm:AssocFileExtension, Halite, .torrent}; GroupDescription: Other tasks:; Flags: unchecked 
    3134 
    3235[Files] 
    33 Source: G:\Develop\Apps\Halite\bin\msvc-7.1\release\link-static\threading-multi\Halite.exe; DestDir: {app}; Flags: ignoreversion 
    34 ; NOTE: Don't use "Flags: ignoreversion" on any shared system files 
    35 Source: ..\..\..\WINDOWS\system32\msvcp71.dll; DestDir: {app} 
    36 Source: ..\..\..\WINDOWS\system32\msvcr71.dll; DestDir: {app} 
     36Source: bin\msvc-7.1\release\asynch-exceptions-on\runtime-link-static\threading-multi\Halite.exe; DestDir: {app}; Flags: ignoreversion 32bit 
     37Source: Readme.txt; DestDir: {app}; Flags: ignoreversion isreadme 
     38 
     39[INI] 
     40Filename: {app}\{#MyAppUrlName}; Section: InternetShortcut; Key: URL; String: {#MyAppURL} 
    3741 
    3842[Icons] 
    3943Name: {group}\{#MyAppName}; Filename: {app}\{#MyAppExeName} 
     44Name: {group}\{cm:ProgramOnTheWeb,{#MyAppName}}; Filename: {app}\{#MyAppUrlName} 
    4045Name: {group}\{cm:UninstallProgram,{#MyAppName}}; Filename: {uninstallexe} 
    4146Name: {userdesktop}\{#MyAppName}; Filename: {app}\{#MyAppExeName}; Tasks: desktopicon 
     
    4550Filename: {app}\{#MyAppExeName}; Description: {cm:LaunchProgram,{#MyAppName}}; Flags: nowait postinstall skipifsilent 
    4651 
     52[Registry] 
     53Root: HKCR; Subkey: .torrent; ValueType: string; ValueName: ; ValueData: Halite; Flags: uninsdeletevalue; Tasks: associate_torrent 
     54Root: HKCR; Subkey: Halite; ValueType: string; ValueName: ; ValueData: Torrent File; Flags: uninsdeletekey; Tasks: associate_torrent 
     55Root: HKCR; Subkey: Halite\DefaultIcon; ValueType: string; ValueName: ; ValueData: {app}\halite.exe,0; Tasks: associate_torrent 
     56Root: HKCR; Subkey: Halite\shell\open\command; ValueType: string; ValueName: ; ValueData: """{app}\halite.exe"" ""%1"""; Tasks: associate_torrent 
     57 
     58[UninstallDelete] 
     59Type: files; Name: {app}\{#MyAppUrlName} 
  • Halite.pnproj

    r96 r107  
    1 <Project name="Halite"><MagicFolder excludeFolders="CVS;.svn" filter="*.*" name="res" path="res\"><File path="Halite.aps"></File><File path="Halite.ico"></File><File path="Halite.rc"></File><File path="Manifest.xml"></File><File path="Oc.ico"></File><File path="resource.h"></File><File path="toolbar.bmp"></File></MagicFolder><MagicFolder excludeFolders="CVS;.svn" filter="*.*" name="src" path="src\"><MagicFolder excludeFolders="CVS;.svn" filter="*.*" name="ini" path="ini\"><File path="BitTConfig.hpp"></File><File path="Dialog.hpp"></File><File path="Remote.hpp"></File><File path="Splash.hpp"></File><File path="Torrent.hpp"></File><File path="Window.hpp"></File></MagicFolder><File path="ConfigOptions.cpp"></File><File path="ConfigOptions.hpp"></File><File path="CSSFileDialog.hpp"></File><File path="DdxEx.hpp"></File><File path="DropFileTarget.h"></File><File path="GlobalIni.cpp"></File><File path="GlobalIni.hpp"></File><File path="Halite.cpp"></File><File path="Halite.hpp"></File><File path="HaliteDialog.cpp"></File><File path="HaliteDialog.hpp"></File><File path="HaliteListViewCtrl.cpp"></File><File path="HaliteListViewCtrl.hpp"></File><File path="HaliteWindow.cpp"></File><File path="HaliteWindow.hpp"></File><File path="halTorrent.cpp"></File><File path="halTorrent.hpp"></File><File path="halXmlRpc.cpp"></File><File path="halXmlRpc.hpp"></File><File path="NTray.cpp"></File><File path="NTray.hpp"></File><File path="SimpleHtml.h"></File><File path="SplashDialog.hpp"></File><File path="SSFileDialog.hpp"></File><File path="stdAfx.cpp"></File><File path="stdAfx.hpp"></File></MagicFolder><File path="Jamfile"></File></Project> 
     1<Project name="Halite"><MagicFolder excludeFolders="CVS;.svn" filter="*.*" name="res" path="res\"><File path="Golem.ico"></File><File path="Halite.aps"></File><File path="Halite.bak.ico"></File><File path="halite.ico"></File><File path="Halite.rc"></File><File path="Manifest.xml"></File><File path="Oc.ico"></File><File path="resource.h"></File><File path="toolbar.bmp"></File></MagicFolder><MagicFolder excludeFolders="CVS;.svn" filter="*.*" name="src" path="src\"><MagicFolder excludeFolders="CVS;.svn" filter="*.*" name="ini" path="ini\"><File path="BitTConfig.hpp"></File><File path="Dialog.hpp"></File><File path="General.hpp"></File><File path="Remote.hpp"></File><File path="Splash.hpp"></File><File path="Torrent.hpp"></File><File path="Window.hpp"></File></MagicFolder><File path="AdvHaliteDialog.cpp"></File><File path="AdvHaliteDialog.hpp"></File><File path="ConfigOptions.cpp"></File><File path="ConfigOptions.hpp"></File><File path="CSSFileDialog.hpp"></File><File path="DdxEx.hpp"></File><File path="DropFileTarget.h"></File><File path="GlobalIni.cpp"></File><File path="GlobalIni.hpp"></File><File path="Halite.cpp"></File><File path="Halite.hpp"></File><File path="HaliteDialog.cpp"></File><File path="HaliteDialog.hpp"></File><File path="HaliteListViewCtrl.cpp"></File><File path="HaliteListViewCtrl.hpp"></File><File path="HaliteWindow.cpp"></File><File path="HaliteWindow.hpp"></File><File path="HalTabCtrl.hpp"></File><File path="halTorrent.cpp"></File><File path="halTorrent.hpp"></File><File path="halXmlRpc.cpp"></File><File path="halXmlRpc.hpp"></File><File path="NTray.cpp"></File><File path="NTray.hpp"></File><File path="SimpleHtml.h"></File><File path="SplashDialog.hpp"></File><File path="SSFileDialog.hpp"></File><File path="stdAfx.cpp"></File><File path="stdAfx.hpp"></File><File path="ThemeTestDialog.hpp"></File><File path="WinAPIMutex.hpp"></File></MagicFolder><File path="Jamfile"></File></Project> 
  • Halite.pnps

    r100 r107  
    1 <pd><ViewState><e p="Halite" x="true"></e><e p="Halite\res" x="true"></e><e p="Halite\src" x="true"></e><e p="Halite\src\ini" x="false"></e></ViewState></pd> 
     1<pd><ViewState><e p="Halite" x="true"></e><e p="Halite\res" x="true"></e><e p="Halite\src" x="true"></e><e p="Halite\src\ini" x="true"></e></ViewState></pd> 
  • Jamfile

    r105 r107  
    11 
    22use-project /boost : $(/boost) ; 
    3 use-project /http : $(/http) ; 
     3#use-project /http : $(/http) ; 
    44use-project /libtorrent : $(/libtorrent) ; 
    55use-project /WTL : $(/WTL) ; 
     
    1212        HaliteListViewCtrl.cpp 
    1313        HaliteDialog.cpp 
     14        AdvHaliteDialog.cpp 
    1415        ConfigOptions.cpp 
    1516        halTorrent.cpp 
    1617        GlobalIni.cpp 
    17         halXmlRpc.cpp 
     18#       halXmlRpc.cpp 
    1819        NTray.cpp 
    1920        ; 
     
    3031        advapi32 
    3132        gdi32    
     33        UxTheme.lib      
    3234        ; 
    3335 
     
    3840        <library>/boost/signals//boost_signals/<link>static 
    3941        <library>/boost/serialization//boost_serialization/<link>static 
    40         <library>/http//http/<link>static 
     42#       <library>/http//http/<link>static 
    4143    <library>/libtorrent//torrent/<link>static 
    4244         
  • res/Halite.rc

    r104 r107  
    2121#pragma code_page(1252) 
    2222#endif //_WIN32 
    23  
    24 ///////////////////////////////////////////////////////////////////////////// 
    25 // 
    26 // Icon 
    27 // 
    28  
    29 // Icon with lowest ID value placed first to ensure application icon 
    30 // remains consistent on all systems. 
    31 IDR_APP_ICON            ICON                    "Oc.ico" 
    3223 
    3324///////////////////////////////////////////////////////////////////////////// 
     
    8778 
    8879VS_VERSION_INFO VERSIONINFO 
    89  FILEVERSION 0,2,5,96 
    90  PRODUCTVERSION 0,2,5,96 
     80 FILEVERSION 0,2,7,107 
     81 PRODUCTVERSION 0,2,7,107 
    9182 FILEFLAGSMASK 0x3fL 
    9283#ifdef _DEBUG 
     
    10394        BLOCK "180904b0" 
    10495        BEGIN 
    105             VALUE "Comments", "libTorrrent based client. Revision 104." 
     96            VALUE "Comments", "libTorrrent based client. Revision 107." 
    10697            VALUE "CompanyName", "BinaryNotions.com" 
    107             VALUE "FileDescription", "Halite BitTorrent Client" 
    108             VALUE "FileVersion", "0, 2, 6, 104" 
     98            VALUE "FileDescription", "Halite Bittorrent Client" 
     99            VALUE "FileVersion", "0, 2, 7, 107" 
    109100            VALUE "InternalName", "Halite" 
    110101            VALUE "LegalCopyright", "(C) Eoin O'Callaghan 2006" 
    111102            VALUE "OriginalFilename", "Halite.exe" 
    112103            VALUE "ProductName", "Halite" 
    113             VALUE "ProductVersion", "0, 2, 6, 104" 
     104            VALUE "ProductVersion", "0, 2, 7, 107" 
    114105        END 
    115106    END 
     
    127118 
    128119IDD_CONFIGREMOTE DIALOGEX 0, 0, 242, 94 
    129 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION |  
    130     WS_SYSMENU 
     120STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU 
    131121CAPTION "Remote Control" 
    132122FONT 8, "MS Shell Dlg", 400, 0, 0x1 
    133123BEGIN 
    134124    GROUPBOX        "Remote Control Options",IDC_STATIC,6,6,228,30 
    135     CONTROL         "Enable Remote Control",IDC_REMOTECTRL,"Button", 
    136                     BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,12,18,96,12 
     125    CONTROL         "Enable Remote Control",IDC_REMOTECTRL,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,12,18,96,12 
    137126    RTEXT           "Port to listen on : ",IDC_STATIC,114,19,66,11 
    138127    EDITTEXT        IDC_REMOTEPORT,180,18,42,12,ES_AUTOHSCROLL | WS_DISABLED 
     
    141130 
    142131IDD_CONFIGBIT DIALOGEX 0, 0, 242, 94 
    143 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION |  
    144     WS_SYSMENU 
     132STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU 
    145133CAPTION "BitTorrent" 
    146134FONT 8, "MS Shell Dlg", 400, 0, 0x1 
     
    162150 
    163151IDD_ABOUT DIALOGEX 0, 0, 242, 115 
    164 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION |  
    165     WS_SYSMENU 
     152STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU 
    166153CAPTION "About" 
    167154FONT 8, "MS Shell Dlg", 400, 0, 0x1 
    168155BEGIN 
    169156    GROUPBOX        "Program Information",IDC_STATIC,5,7,230,101 
    170     LTEXT           "Halite is a BitTorrent client based on the excellent libtorrent library written by Arvid Norberg of Rasterbar Software. The program is written in C++ and is open sourced under a BSD and/or Boost software licence.", 
    171                     IDC_STATIC,12,18,216,33 
    172     LTEXT           "Some important acknowledgements to the authors whose work contributed to Halite; Arvid Norbery for libTorrent, Christopher Kohlhoff for Boost.ASIO and Paul Davey (mattahan) for the icon.", 
    173                     IDC_STATIC,12,56,216,25 
    174     RTEXT           "Alpha release of v 0.3, Revision 104.",IDC_STATIC,103, 
    175                     96,129,9 
     157    LTEXT           "Halite is a BitTorrent client based on the excellent libtorrent library written by Arvid Norberg of Rasterbar Software. The program is written in C++ and is open sourced under a BSD and/or Boost software licence.",IDC_STATIC,12,18,216,33 
     158    LTEXT           "Some important acknowledgements to the authors whose work contributed to Halite; Arvid Norbery for libTorrent, Christopher Kohlhoff for Boost.ASIO and Paul Davey (mattahan) for the icon.",IDC_STATIC,12,56,216,25 
     159    RTEXT           "Alpha release v 0.2.7, Revision 107.",IDC_STATIC,103,96,129,9 
    176160END 
    177161 
     
    187171    LTEXT           "N/A",IDC_AVAIL,40,39,36,8,SS_ENDELLIPSIS 
    188172    RTEXT           "Status:",IDC_STATIC,8,27,30,8 
    189     RTEXT           "Available:",IDC_STATIC,2,39,36,8 
     173    RTEXT           "Time left:",IDC_STATIC,2,39,36,8 
    190174    RTEXT           "Tracker:",IDC_STATIC,8,15,30,8 
    191175    LTEXT           "N/A",IDC_STATUS,40,27,136,8,SS_ENDELLIPSIS 
    192176    LTEXT           "N/A",IDC_TRACKER,40,15,136,8,SS_PATHELLIPSIS 
    193177    LTEXT           "N/A",IDC_NAME,40,3,136,10,SS_ENDELLIPSIS 
    194     CONTROL         "",LISTPEERS,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT |  
    195                     WS_BORDER | WS_TABSTOP,4,64,309,6 
     178    CONTROL         "",LISTPEERS,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,4,64,309,6 
    196179    EDITTEXT        IDC_EDITTLU,229,36,27,12,ES_AUTOHSCROLL 
    197180    EDITTEXT        IDC_EDITTLD,189,36,27,12,ES_AUTOHSCROLL 
     
    215198FONT 8, "MS Shell Dlg", 400, 0, 0x1 
    216199BEGIN 
    217     ICON            IDR_APP_ICON,IDC_STATIC,7,10,21,20 
    218     LTEXT           "It will take the BitTorrent session a moment to shutdown cleanly after which this message will disappear and the program will close.", 
    219                     IDC_STATIC,35,7,149,27 
    220     CONTROL         "Show this message in future.",IDC_SPLASH_MSG,"Button", 
    221                     BS_AUTOCHECKBOX | WS_TABSTOP,77,35,107,12 
     200    ICON            IDR_APP_ICON,IDC_STATIC,7,10,20,20 
     201    LTEXT           "It will take the BitTorrent session a moment to shutdown cleanly after which this message will disappear and the program will close.",IDC_STATIC,35,7,149,27 
     202    CONTROL         "Show this message in future.",IDC_SPLASH_MSG,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,77,35,107,12 
    222203END 
    223204 
    224205IDD_NEWTORRENT DIALOGEX 0, 0, 229, 132 
    225 STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION |  
    226     WS_SYSMENU 
     206STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU 
    227207CAPTION "Create new torrent" 
    228208FONT 8, "MS Shell Dlg", 400, 0, 0x1 
     
    230210    DEFPUSHBUTTON   "Save",IDOK,130,114,45,14 
    231211    PUSHBUTTON      "Cancel",IDCANCEL,180,114,45,14 
    232     LTEXT           "Select a file or directory to construct the torrent.", 
    233                     IDC_STATIC,4,4,221,11 
    234     EDITTEXT        IDC_NEWT_FILE,4,15,203,12,ES_AUTOHSCROLL, 
    235                     WS_EX_ACCEPTFILES 
     212    LTEXT           "Select a file or directory to construct the torrent.",IDC_STATIC,4,4,221,11 
     213    EDITTEXT        IDC_NEWT_FILE,4,15,203,12,ES_AUTOHSCROLL,WS_EX_ACCEPTFILES 
    236214    PUSHBUTTON      "...",IDC_NEWT_BROWSE,212,14,13,13 
    237     LISTBOX         IDC_NEWT_LISTTRACKERS,4,57,221,52,LBS_SORT |  
    238                     LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP 
    239     LTEXT           "Enter the tracker URLs for the torrent.",IDC_STATIC,4, 
    240                     32,221,11 
    241     EDITTEXT        IDC_NEWT_TRACKER,4,42,193,12,ES_AUTOHSCROLL, 
    242                     WS_EX_ACCEPTFILES 
    243     CONTROL         "Have Halite acts a DHT node.",IDC_NEWT_DHTNODE,"Button", 
    244                     BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,4,116,118,8 
     215    LISTBOX         IDC_NEWT_LISTTRACKERS,4,57,221,52,LBS_SORT | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP 
     216    LTEXT           "Enter the tracker URLs for the torrent.",IDC_STATIC,4,32,221,11 
     217    EDITTEXT        IDC_NEWT_TRACKER,4,42,193,12,ES_AUTOHSCROLL,WS_EX_ACCEPTFILES 
     218    CONTROL         "Have Halite acts a DHT node.",IDC_NEWT_DHTNODE,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,4,116,118,8 
    245219    PUSHBUTTON      "Add",IDC_NEWT_ADDTRACKER,202,41,23,13 
     220END 
     221 
     222IDD_ADVHALITEDLG DIALOGEX 0, 0, 317, 72 
     223STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD 
     224FONT 8, "MS Shell Dlg", 400, 0, 0x1 
     225BEGIN 
     226    CONTROL         "",IDC_TAB,"SysTabControl32",0x0,1,1,316,71 
     227END 
     228 
     229IDD_CONFIGGENERAL DIALOGEX 0, 0, 242, 90 
     230STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU 
     231CAPTION "General" 
     232FONT 8, "MS Shell Dlg", 400, 0, 0x1 
     233BEGIN 
     234    CONTROL         "Allow only one instance to run.",IDC_GENERAL_ONEINST, 
     235                    "Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,16,114,14 
     236    GROUPBOX        "General Settings",IDC_STATIC,7,6,228,77 
     237    CONTROL         "Advanced GUI",IDC_GENERAL_ADVGUI,"Button",BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP,14,29,118,14 
     238    CONTROL         "Minimize to tray.",IDC_GENERAL_TRAY,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,131,16,98,14 
     239END 
     240 
     241IDD_THEMETEST DIALOGEX 0, 0, 186, 93 
     242STYLE DS_SETFONT | DS_FIXEDSYS | DS_CONTROL | WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_SYSMENU 
     243EXSTYLE WS_EX_TRANSPARENT | WS_EX_CONTROLPARENT 
     244FONT 8, "MS Shell Dlg", 400, 0, 0x1 
     245BEGIN 
     246    CONTROL         "Check1",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,7,44,10 
     247    PUSHBUTTON      "Button1",IDC_BUTTON1,69,7,51,14 
     248    EDITTEXT        IDC_EDIT1,134,7,45,15,ES_AUTOHSCROLL 
     249    GROUPBOX        "Static",IDC_STATIC,15,25,98,28 
     250    CONTROL         "Radio1",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON,129,38,50,11 
     251    EDITTEXT        IDC_EDIT2,14,62,45,15,ES_AUTOHSCROLL | WS_DISABLED 
     252    LTEXT           "Static",IDC_STATIC,85,59,68,10,0,WS_EX_TRANSPARENT 
    246253END 
    247254 
     
    326333        TOPMARGIN, 4 
    327334        BOTTOMMARGIN, 128 
     335    END 
     336 
     337    IDD_CONFIGGENERAL, DIALOG 
     338    BEGIN 
     339        LEFTMARGIN, 7 
     340        RIGHTMARGIN, 235 
     341        TOPMARGIN, 7 
     342        BOTTOMMARGIN, 83 
     343    END 
     344 
     345    IDD_THEMETEST, DIALOG 
     346    BEGIN 
     347        LEFTMARGIN, 7 
     348        RIGHTMARGIN, 179 
     349        TOPMARGIN, 7 
     350        BOTTOMMARGIN, 86 
    328351    END 
    329352END 
     
    352375///////////////////////////////////////////////////////////////////////////// 
    353376// 
     377// Icon 
     378// 
     379 
     380// Icon with lowest ID value placed first to ensure application icon 
     381// remains consistent on all systems. 
     382IDR_APP_ICON            ICON                    "Halite.ico" 
     383 
     384///////////////////////////////////////////////////////////////////////////// 
     385// 
    354386// String Table 
    355387// 
  • res/resource.h

    r104 r107  
    1212#define IDPANE_CAPS_INDICATOR           110 
    1313#define IDD_NEWTORRENT                  111 
     14#define IDD_CONFIGGENERAL               112 
     15#define IDD_ADVHALITEDLG                114 
     16#define IDI_ICON1                       114 
     17#define IDR_APP_ICON                    114 
     18#define IDD_DIALOG1                     115 
     19#define IDD_THEMETEST                   115 
    1420#define IDR_MAINFRAME                   128 
    15 #define IDR_APP_ICON                    128 
    1621#define LISTPEERS                       1000 
    1722#define TORRENTPROG                     1003 
     
    5762#define IDC_BUTTON1                     1041 
    5863#define IDC_EDIT1                       1042 
     64#define IDC_GENERAL_ONEINST             1043 
     65#define IDC_EDIT2                       1043 
     66#define IDC_TAB1                        1044 
     67#define IDC_TAB                         1044 
     68#define IDC_GENERAL_ADVGUI              1044 
     69#define IDC_GENERAL_TRAY                1045 
     70#define IDC_CHECK1                      1045 
     71#define IDC_RADIO1                      1046 
    5972#define ID_ABOUT_OPENHALITE             40001 
    6073#define ID_ABOUT_PAUSEALL               40002 
     
    7083#ifndef APSTUDIO_READONLY_SYMBOLS 
    7184#define _APS_NO_MFC                     1 
    72 #define _APS_NEXT_RESOURCE_VALUE        112 
     85#define _APS_NEXT_RESOURCE_VALUE        116 
    7386#define _APS_NEXT_COMMAND_VALUE         40010 
    74 #define _APS_NEXT_CONTROL_VALUE         1043 
     87#define _APS_NEXT_CONTROL_VALUE         1048 
    7588#define _APS_NEXT_SYMED_VALUE           110 
    7689#endif 
  • src/ConfigOptions.hpp

    r97 r107  
    55#include "DdxEx.hpp" 
    66 
     7#include "ini/Window.hpp" 
     8#include "ini/General.hpp" 
     9#include "ini/Remote.hpp" 
    710#include "GlobalIni.hpp" 
    8 #include "ini/Remote.hpp" 
    911#include "ini/BitTConfig.hpp" 
     12 
     13class GeneralOptions : 
     14    public CPropertyPageImpl<GeneralOptions>, 
     15    public CWinDataExchange<GeneralOptions> 
     16{ 
     17public: 
     18    enum { IDD = IDD_CONFIGGENERAL }; 
     19 
     20        GeneralOptions()  
     21        {}       
     22         
     23        ~GeneralOptions() 
     24        {} 
     25  
     26    BEGIN_MSG_MAP(GeneralOptions) 
     27                MSG_WM_INITDIALOG(OnInitDialog) 
     28        CHAIN_MSG_MAP(CPropertyPageImpl<GeneralOptions>) 
     29    END_MSG_MAP() 
     30  
     31    BEGIN_DDX_MAP(GeneralOptions) 
     32        DDX_CHECK(IDC_GENERAL_ONEINST, INI().generalConfig().oneInst) 
     33        DDX_CHECK(IDC_GENERAL_TRAY, INI().windowConfig().use_tray) 
     34//      DDX_CHECK(IDC_GENERAL_ADVGUI, INI().remoteConfig().isEnabled) 
     35    END_DDX_MAP() 
     36  
     37    BOOL OnInitDialog(HWND hwndFocus, LPARAM lParam) 
     38        { 
     39                return DoDataExchange(false); 
     40        }        
     41         
     42    int OnApply() 
     43        { 
     44                return DoDataExchange(true); 
     45        } 
     46}; 
    1047 
    1148class BitTorrentOptions : 
     
    98135        : CPropertySheet(title, uStartPage, hWndParent), m_bCentered(false) 
    99136    { 
     137                AddPage(generalOptions); 
    100138                AddPage(bitTorrentOptions); 
    101139                AddPage(remoteControlOptions); 
     
    126164    } 
    127165         
     166        GeneralOptions generalOptions; 
    128167        BitTorrentOptions bitTorrentOptions; 
    129168        RemoteOptions remoteControlOptions; 
  • src/GlobalIni.cpp

    r97 r107  
    33 
    44#include "GlobalIni.hpp" 
     5#include "ini/General.hpp" 
    56#include "ini/Remote.hpp" 
    67#include "ini/Dialog.hpp" 
     
    1011#include "ini/Splash.hpp" 
    1112 
    12 using boost::filesystem::path; 
    1313using boost::serialization::make_nvp; 
    1414 
     
    2424        haliteDialog_(new DialogConfig()), 
    2525        torrentConfig_(new halite::TorrentConfig()), 
     26        generalConfig_(new GeneralConfig()), 
    2627        remoteConfig_(new RemoteConfig()), 
    2728        splashConfig_(new SplashConfig())        
    2829{ 
    29         boost::array<char, MAX_PATH> pathBuffer; 
    30         GetCurrentDirectoryA(MAX_PATH, pathBuffer.c_array()); 
    31         workingFile_ = path(pathBuffer.data(), boost::filesystem::native)/"Halite.ini.xml"; 
     30        workingFile_ = globalModule().exePath().branch_path()/"Halite.ini.xml"; 
    3231} 
    3332 
     
    5352                        ia >> make_nvp("haliteWindow", *haliteWindow_); 
    5453                        ia >> make_nvp("haliteDialog", *haliteDialog_); 
     54                        ia >> make_nvp("generalConfig", *generalConfig_); 
    5555                        ia >> make_nvp("remoteConfig", *remoteConfig_); 
    5656                        ia >> make_nvp("splashConfig", *splashConfig_); 
     
    6161        catch(std::exception& e) 
    6262        { 
    63                 ::MessageBoxA(0, e.what(), "Load INI data exception.", 0); 
     63                ::MessageBox(0, L"There was an error loading the INI XML file. This is a non-fatal error, \ 
     64most settings will simply revert to defaults. To continue downloading any torrents that \ 
     65were in progress simply manually reload the associated torrent files which can be found \ 
     66in the \'torrents\' sub-directory.\r\n\r\n\ 
     67See the Halite forum for more details.",  
     68                        (wformat(L"Load INI data exception: %1%") % e.what()).str().c_str(), 0); 
    6469                return false; 
    6570        } 
     
    7681                oa << make_nvp("haliteWindow", *haliteWindow_); 
    7782                oa << make_nvp("haliteDialog", *haliteDialog_); 
     83                oa << make_nvp("generalConfig", *generalConfig_);        
    7884                oa << make_nvp("remoteConfig", *remoteConfig_);  
    7985                oa << make_nvp("splashConfig", *splashConfig_); 
  • src/GlobalIni.hpp

    r94 r107  
    77#include <boost/archive/xml_oarchive.hpp> 
    88#include <boost/archive/xml_iarchive.hpp> 
    9 #include <boost/filesystem/path.hpp> 
    10 #include <boost/filesystem/operations.hpp> 
    11 #include <boost/filesystem/fstream.hpp>   
    129 
    1310class BitTConfig; 
    1411class WindowConfig; 
    1512class DialogConfig; 
     13class GeneralConfig; 
    1614class RemoteConfig; 
    1715class SplashConfig; 
     
    2826        bool SaveData(); 
    2927         
     28        GeneralConfig& generalConfig() { return *generalConfig_; } 
    3029        RemoteConfig& remoteConfig() { return *remoteConfig_; } 
    3130        SplashConfig& splashConfig() { return *splashConfig_; } 
     
    4241        ArchivalData(); 
    4342         
     43        boost::scoped_ptr<GeneralConfig> generalConfig_; 
    4444        boost::scoped_ptr<RemoteConfig> remoteConfig_; 
    4545        boost::scoped_ptr<SplashConfig> splashConfig_; 
  • src/Halite.cpp

    r97 r107  
    11 
    22#include "stdAfx.hpp" 
     3#include "WinAPIMutex.hpp" 
    34 
    45#include "GlobalIni.hpp" 
    56#include "ini/Window.hpp" 
     7#include "ini/General.hpp" 
    68 
    79#include "HaliteWindow.hpp" 
    810#include "SplashDialog.hpp" 
    911 
     12static const unsigned WMU_ARE_YOU_ME = ::RegisterWindowMessage(WMU_ARE_YOU_ME_STRING); 
     13 
     14static BOOL CALLBACK hwndSearcher(HWND hWnd, LPARAM lParam) 
     15{ 
     16        ULONG_PTR result; 
     17        LRESULT ok = ::SendMessageTimeout(hWnd, WMU_ARE_YOU_ME, 
     18                0, 0, SMTO_BLOCK | SMTO_ABORTIFHUNG, 200, &result); 
     19         
     20        if (ok == 0) 
     21                return false; 
     22         
     23        if (result == WMU_ARE_YOU_ME) 
     24        { 
     25                HWND* target = (HWND*)lParam; 
     26                *target = hWnd; 
     27                return false; 
     28        } 
     29         
     30        return true; 
     31} 
     32 
    1033int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) 
    1134{ 
    12         boost::filesystem::path::default_name_check(boost::filesystem::native); 
     35        boost::filesystem::path::default_name_check(boost::filesystem::native);  
     36        INI().LoadData(); 
     37 
     38        AtlInitCommonControls(ICC_COOL_CLASSES | ICC_BAR_CLASSES); 
     39    
     40        int nRet;        
     41        HRESULT hRes = _Module.Init(NULL, hInstance); 
     42        assert (SUCCEEDED(hRes));        
     43        {                                
     44        WinAPIMutex oneInstance(HALITE_GUID); 
    1345         
    14         INI().LoadData(); 
    15          
    16         int nRet; 
     46        if (!oneInstance.owner() && INI().generalConfig().oneInst) 
    1747        { 
    18                 AtlInitCommonControls(ICC_COOL_CLASSES | ICC_BAR_CLASSES);       
    19 //              HINSTANCE hInstRich = ::LoadLibrary(CRichEditCtrl::GetLibraryName()); 
    20             
    21                 HRESULT hRes = _Module.Init(NULL, hInstance); 
    22                 assert (SUCCEEDED(hRes));        
     48                WinAPIMutexLock lock(oneInstance, 5000L); 
    2349                 
    24                 {        
    25                         CMessageLoop theLoop; 
    26                         _Module.AddMessageLoop(&theLoop); 
    27                         {        
    28                                 HaliteWindow wndMain; 
    29                                 if (wndMain.CreateEx() == NULL) 
    30                                         return 1; 
     50                HWND hOther = NULL; 
     51                ::EnumWindows(static_cast<WNDENUMPROC>(hwndSearcher), (LPARAM)&hOther); 
     52                 
     53                if (hOther != NULL) 
     54                { 
     55                        ::SetForegroundWindow(hOther); 
     56                         
     57                        if (::IsIconic(hOther)) 
     58                                ::ShowWindow(hOther, SW_RESTORE); 
     59                         
     60                        if (!globalModule().commandArgs().empty()) 
     61                        { 
     62                                COPYDATASTRUCT cmdLine;  
     63                                cmdLine.dwData = HALITE_SENDING_CMD;  
     64                                cmdLine.cbData =  
     65                                        globalModule().commandArgs().front().length()*sizeof(wchar_t);  
     66                                cmdLine.lpData = const_cast<wchar_t*>( 
     67                                        globalModule().commandArgs().front().c_str()); 
    3168                                 
    32                                 wndMain.SetWindowText(L"Halite"); 
    33                                 wndMain.MoveWindow( 
    34                                         INI().windowConfig().rect.left, 
    35                                         INI().windowConfig().rect.top, 
    36                                         INI().windowConfig().rect.right-INI().windowConfig().rect.left, 
    37                                         INI().windowConfig().rect.bottom-INI().windowConfig().rect.top, 
    38                                         false); 
    39                                 wndMain.ShowWindow(nCmdShow); 
    40                                  
    41                                 nRet = theLoop.Run();                            
    42                         }        
    43                 }       _Module.RemoveMessageLoop(); 
     69                                ::SendMessage(hOther, WM_COPYDATA, 0, (LPARAM)(LPVOID)&cmdLine); 
     70                        } 
     71                }                                
     72        } 
     73        else 
     74        { 
     75                CMessageLoop theLoop; 
     76                _Module.AddMessageLoop(&theLoop); 
     77                {                                                
     78                        HaliteWindow wndMain(WMU_ARE_YOU_ME); 
     79                        if (wndMain.CreateEx() == NULL) 
     80                                return 1; 
     81                         
     82                        oneInstance.release(); 
     83                         
     84                        if (!globalModule().commandArgs().empty()) 
     85                                wndMain.ProcessFile(globalModule().commandArgs().front().c_str()); 
     86                         
     87                        wndMain.SetWindowText(L"Halite"); 
     88                        wndMain.MoveWindow( 
     89                                INI().windowConfig().rect.left, 
     90                                INI().windowConfig().rect.top, 
     91                                INI().windowConfig().rect.right-INI().windowConfig().rect.left, 
     92                                INI().windowConfig().rect.bottom-INI().windowConfig().rect.top, 
     93                                false); 
     94                        wndMain.ShowWindow(nCmdShow); 
     95                         
     96                        nRet = theLoop.Run();                            
     97                }        
     98                _Module.RemoveMessageLoop(); 
    4499                 
    45100                if (INI().splashConfig().showMessage) 
     
    53108                        halite::bittorrent().shutDownSession();          
    54109                } 
    55                  
    56                 _Module.Term(); 
    57         }        
     110        } 
     111        } 
     112         
     113        _Module.Term(); 
    58114         
    59115        INI().SaveData(); 
  • src/Halite.hpp

    r70 r107  
    33 
    44#include "halTorrent.hpp" 
    5 #include "halXmlRpc.hpp" 
     5// #include "halXmlRpc.hpp" 
    66 
  • src/HaliteDialog.cpp

    r104 r107  
    1  
     1 
    22#include <algorithm> 
    33#include <boost/format.hpp> 
     
    166166                m_prog.SetPos(static_cast<int>(pTD->completion()*100)); 
    167167                 
    168                 SetDlgItemText(IDC_AVAIL, 
    169                         (wformat(L"%1$.2f%%")  
    170                                 % (pTD->available()*100) 
    171                         ).str().c_str());                
     168                if (!pTD->estimatedTimeLeft().is_special()) 
     169                { 
     170                        SetDlgItemText(IDC_AVAIL, 
     171                                (mbstowcs(boost::posix_time::to_simple_string(pTD->estimatedTimeLeft())).c_str())); 
     172                } 
     173                else 
     174                { 
     175                        SetDlgItemText(IDC_AVAIL,L"∞");          
     176                } 
    172177                 
    173178                SetDlgItemText(IDC_COMPLETE, 
  • src/HaliteListViewCtrl.cpp

    r98 r107  
    1  
     1 
    22#include "HaliteListViewCtrl.hpp" 
    33 
     
    2020        AddColumn(L"Peers", hdr.GetItemCount()); 
    2121        AddColumn(L"Seeds", hdr.GetItemCount()); 
     22        AddColumn(L"ETA", hdr.GetItemCount()); 
     23        AddColumn(L"Copies", hdr.GetItemCount()); 
    2224 
    2325        for (size_t i=0; i<WindowConfig::numMainCols; ++i) 
     
    5456                 
    5557                SetItemText(itemPos, 6, (lexical_cast<wstring>((*i)->seeds())).c_str());         
     58 
     59                if (!(*i)->estimatedTimeLeft().is_special()) 
     60                { 
     61                        SetItemText(itemPos, 7, (mbstowcs( 
     62                                boost::posix_time::to_simple_string((*i)->estimatedTimeLeft())).c_str())); 
     63                } 
     64                else 
     65                { 
     66                        SetItemText(itemPos, 7, L"∞");           
     67                } 
     68                 
     69                SetItemText(itemPos, 8, (wformat(L"%1$.2f")  
     70                                % ((*i)->distributedCopies()) 
     71                        ).str().c_str());        
    5672        }        
    5773} 
  • src/HaliteWindow.cpp

    r104 r107  
    1111#include "HaliteListViewCtrl.hpp" 
    1212#include "HaliteDialog.hpp" 
     13#include "AdvHaliteDialog.hpp" 
    1314 
    1415#include "ConfigOptions.hpp" 
     
    1617#include "ini/Window.hpp" 
    1718 
    18 HaliteWindow::HaliteWindow() : 
     19HaliteWindow::HaliteWindow(unsigned areYouMe = 0) : 
    1920        mp_list(new HaliteListViewCtrl()), 
    20         mp_dlg(new HaliteDialog(this)) 
     21        mp_dlg(new HaliteDialog(this)), 
     22        WM_AreYouMe_(areYouMe) 
    2123{} 
    2224 
     
    5254                INI().bitTConfig().downRate, INI().bitTConfig().upRate); 
    5355         
    54         if (INI().remoteConfig().isEnabled) 
     56/*      if (INI().remoteConfig().isEnabled) 
    5557        { 
    5658                halite::xmlRpc().bindHost(INI().remoteConfig().port); 
    5759        } 
    58  
     60*/ 
    5961        RECT rc; GetClientRect(&rc); 
    6062        SetMenu(0); 
     
    8688         
    8789        mp_dlg->Create(m_Split.m_hWnd); 
    88         mp_dlg->ShowWindow(true); 
    89          
    90         m_Split.SetSplitterPanes(*mp_list, *mp_dlg); 
     90//      mp_dlg->ShowWindow(true); 
     91         
     92        mp_advDlg.reset(new AdvHaliteDialog(this)); 
     93        mp_advDlg->Create(m_Split.m_hWnd); 
     94        mp_advDlg->ShowWindow(true); 
     95         
     96        m_Split.SetSplitterPanes(*mp_list, *mp_advDlg); 
    9197         
    9298        // Create the tray icon. 
     
    150156                boost::array<wchar_t, MAX_PATH> pathBuffer; 
    151157                mp_list->GetItemText(itemPos, 0, pathBuffer.c_array(), pathBuffer.size());       
    152                 selectedTorrent_ = halite::wcstombs(pathBuffer.data()); 
     158                selectedTorrent_ = wcstombs(pathBuffer.data()); 
    153159        } 
    154160         
     
    202208                INI().bitTConfig().downRate, INI().bitTConfig().upRate); 
    203209         
    204         if (INI().remoteConfig().isEnabled) 
    205                 halite::xmlRpc().bindHost(INI().remoteConfig().port); 
    206         else 
    207                 halite::xmlRpc().stopHost(); 
     210//      if (INI().remoteConfig().isEnabled) 
     211//              halite::xmlRpc().bindHost(INI().remoteConfig().port); 
     212//      else 
     213//              halite::xmlRpc().stopHost(); 
    208214} 
    209215 
     
    220226}        
    221227 
     228LRESULT HaliteWindow::OnCopyData(HWND, PCOPYDATASTRUCT pCSD) 
     229{ 
     230        switch (pCSD->dwData) 
     231        { 
     232                case HALITE_SENDING_CMD: 
     233                wstring filename(static_cast<wchar_t*>(pCSD->lpData), pCSD->cbData/sizeof(wchar_t)); 
     234                ProcessFile(filename.c_str()); 
     235        } 
     236 
     237        return 0; 
     238} 
     239 
    222240void HaliteWindow::ProcessFile(LPCTSTR lpszPath) 
    223241{ 
    224     path file(halite::wcstombs(lpszPath), boost::filesystem::native);    
    225         halite::bittorrent().addTorrent(file); 
     242        try 
     243        { 
     244         
     245        // Big changes due here. 
     246         
     247        path file(wcstombs(lpszPath), boost::filesystem::native);        
     248        halite::bittorrent().addTorrent(file, globalModule().exePath().branch_path()/"incoming"); 
    226249 
    227250        updateUI(); 
     
    233256                findInfo.flags = LVFI_STRING; 
    234257                 
    235                 wstring filename = halite::mbstowcs(file.leaf());                
     258                wstring filename = mbstowcs(file.leaf());                
    236259                findInfo.psz = filename.c_str(); 
    237260                 
     
    240263                selectionChanged(); 
    241264        }        
     265         
     266        } 
     267        catch(const boost::filesystem::filesystem_error&) 
     268        { 
     269                // Just ignore filesystem errors for now. 
     270        } 
    242271} 
    243272 
     
    256285        if (type == SIZE_MINIMIZED) 
    257286        { 
    258                 ShowWindow(SW_HIDE); 
    259                 m_trayIcon.Show(); 
     287                if (INI().windowConfig().use_tray) 
     288                { 
     289                        ShowWindow(SW_HIDE); 
     290                        m_trayIcon.Show(); 
     291                } 
    260292        } 
    261293        else 
     
    323355        wstring torrent_filename = dlgSave.m_ofn.lpstrFile; 
    324356         
    325         halite::bittorrent().newTorrent(path(halite::wcstombs(torrent_filename),boost::filesystem::native), 
    326                 path(halite::wcstombs(files),boost::filesystem::native)); 
     357        halite::bittorrent().newTorrent(path(wcstombs(torrent_filename),boost::filesystem::native), 
     358                path(wcstombs(files),boost::filesystem::native)); 
    327359         
    328360        updateUI(); 
  • src/HaliteWindow.hpp

    r104 r107  
    1111class HaliteListViewCtrl; 
    1212class HaliteDialog; 
     13class AdvHaliteDialog; 
    1314 
    1415class HaliteWindow :  
     
    1819        public CMessageFilter, 
    1920        public CIdleHandler 
    20 {        
     21{ 
    2122public:  
    22         HaliteWindow(); 
     23        HaliteWindow(unsigned ARE_YOU_ME); 
    2324        ~HaliteWindow(); 
    2425         
     
    4647                MSG_WM_MOVE(OnMove) 
    4748                MSG_WM_ERASEBKGND(OnEraseBkgnd) 
    48                 MSG_WM_TIMER(OnTimer)            
     49                MSG_WM_TIMER(OnTimer)    
     50                MSG_WM_COPYDATA(OnCopyData); 
     51                MESSAGE_HANDLER(WM_AreYouMe_, OnAreYouMe)        
    4952                MESSAGE_HANDLER_EX(WM_TRAYNOTIFY, OnTrayNotification) 
    5053                COMMAND_ID_HANDLER(ID_FILE_NEW, OnFileNew) 
     
    9295        LRESULT OnEraseBkgnd(HDC hdc); 
    9396         
     97        LRESULT OnCopyData(HWND, PCOPYDATASTRUCT pCSD); 
     98        LRESULT OnAreYouMe(UINT, WPARAM, LPARAM, BOOL&) { return WM_AreYouMe_; } 
     99         
    94100        void attachUIEvent(boost::function<void ()> fn) { updateUI_.connect(fn); } 
    95101        void updateUI() { updateUI_(); } 
     
    114120        boost::scoped_ptr<HaliteListViewCtrl> mp_list; 
    115121        boost::scoped_ptr<HaliteDialog> mp_dlg; 
     122        boost::scoped_ptr<AdvHaliteDialog> mp_advDlg; 
    116123         
    117124        boost::signal<void ()> updateUI_; 
    118125        string selectedTorrent_; 
     126        unsigned WM_AreYouMe_; 
    119127         
    120128        void updateConfigSettings(); 
  • src/halTorrent.cpp

    r104 r107  
    4949        lbt::bencode(std::ostream_iterator<char>(fs), e); 
    5050        return true; 
    51 } 
    52  
    53 wstring mbstowcs(const string &str)  
    54 { 
    55         size_t len=::mbstowcs(NULL, str.c_str(), str.length()); 
    56         boost::scoped_array<wchar_t> buf(new wchar_t[len]); 
    57  
    58         len=::mbstowcs(buf.get(), str.c_str(), str.length()); 
    59         if(len==static_cast<size_t>(-1))  
    60                 throw std::runtime_error("mbstowcs(): invalid multi-byte character"); 
    61  
    62         return wstring(buf.get(), len); 
    63 } 
    64  
    65 string wcstombs(const wstring &str)  
    66 { 
    67         size_t len=::wcstombs(NULL, str.c_str(), 0); 
    68         boost::scoped_array<char> buf(new char[len]); 
    69  
    70         len=::wcstombs(buf.get(), str.c_str(), len); 
    71         if(len==static_cast<size_t>(-1))  
    72                 throw std::runtime_error("wcstombs(): unable to convert character"); 
    73  
    74         return string(buf.get(), len); 
    7551} 
    7652 
     
    163139                        }        
    164140                } 
    165                          
     141                 
     142                boost::posix_time::time_duration td(boost::posix_time::pos_infin); 
     143                 
     144                if (tS.download_payload_rate != 0) 
     145                { 
     146                        td = boost::posix_time::seconds(         
     147                                long( float(tS.total_wanted-tS.total_wanted_done) / tS.download_payload_rate )); 
     148                } 
     149 
    166150                return TorrentDetail_ptr(new TorrentDetail(filename_, state, mbstowcs(tS.current_tracker),  
    167151                        pair<float, float>(tS.download_payload_rate, tS.upload_payload_rate), 
    168152                        tS.progress, tS.distributed_copies, tS.total_wanted_done, tS.total_wanted, 
    169                         tS.num_peers, tS.num_seeds)); 
     153                        tS.num_peers, tS.num_seeds, td)); 
    170154        } 
    171155        else 
     
    198182private: 
    199183        BitTorrent_impl() : 
    200                 theSession(lbt::fingerprint("HL", 0, 3, 0, 0)), 
    201                 torrents(INI().torrentConfig().torrents) 
    202         { 
    203                 boost::array<char, MAX_PATH> pathBuffer; 
    204                 GetCurrentDirectoryA(MAX_PATH, pathBuffer.c_array()); 
    205                 workingDirectory = path(pathBuffer.data(), fs::native); 
    206         } 
    207          
    208         lbt::entry prepTorrent(path filename); 
    209         lbt::torrent_handle addTorrent(lbt::entry metadata, lbt::entry resumedata); 
     184                theSession(lbt::fingerprint("HL", 0, 2, 0, 8)), 
     185                torrents(INI().torrentConfig().torrents), 
     186                workingDirectory(globalModule().exePath().branch_path()) 
     187        {} 
     188         
     189        lbt::entry prepTorrent(path filename, path saveDirectory); 
    210190        void removalThread(lbt::torrent_handle handle); 
    211191         
     
    288268} 
    289269 
    290 lbt::entry BitTorrent_impl::prepTorrent(path filename) 
     270lbt::entry BitTorrent_impl::prepTorrent(path filename, path saveDirectory) 
    291271{ 
    292272        lbt::entry resumeData;   
     
    312292                copy_file(filename, workingDirectory/"torrents"/filename.leaf()); 
    313293 
    314         if (!exists(workingDirectory/"incoming")) 
    315                 create_directory(workingDirectory/"incoming"); 
     294        if (!exists(saveDirectory)) 
     295                create_directory(saveDirectory); 
    316296         
    317297        return resumeData; 
    318298} 
    319299 
    320 lbt::torrent_handle BitTorrent_impl::addTorrent(lbt::entry metadata, lbt::entry resumedata) 
    321 { 
    322         return theSession.add_torrent(metadata, workingDirectory/"incoming", resumedata); 
    323 } 
    324  
    325 void BitTorrent::addTorrent(path file)  
     300void BitTorrent::addTorrent(path file, path saveDirectory)  
    326301{ 
    327302        try  
    328303        {        
    329304        lbt::entry metadata = haldecode(file); 
    330         lbt::entry resumedata = pimpl->prepTorrent(file); 
     305        lbt::entry resumedata = pimpl->prepTorrent(file, saveDirectory); 
    331306         
    332307        TorrentMap::const_iterator existing = pimpl->torrents.find(file.leaf()); 
     
    335310        {                
    336311                lbt::torrent_handle handle = pimpl->theSession.add_torrent(metadata, 
    337                         pimpl->workingDirectory/"incoming", resumedata); 
     312                        saveDirectory, resumedata); 
    338313                 
    339314                pimpl->torrents.insert(TorrentMap::value_type(file.leaf(),  
    340                         TorrentInternal(handle, mbstowcs(file.leaf())))); 
     315                        TorrentInternal(handle, mbstowcs(file.leaf()), saveDirectory))); 
    341316        } 
    342317 
     
    370345void BitTorrent::newTorrent(fs::path filename, fs::path files) 
    371346{ 
    372         try 
     347/*      try 
    373348        { 
    374349         
     
    410385                ::MessageBoxA(0, e.what(), "Create Torrent exception.", 0); 
    411386        } 
     387*/ 
    412388} 
    413389 
     
    445421                        {        
    446422                        lbt::entry metadata = haldecode(file); 
    447                         lbt::entry resumedata = pimpl->prepTorrent(file); 
     423                        lbt::entry resumedata = pimpl->prepTorrent(file, (*iter).second.saveDirectory()); 
    448424                         
    449425                        (*iter).second.setHandle(pimpl->theSession.add_torrent(metadata, 
    450                                 pimpl->workingDirectory/"incoming", resumedata)); 
     426                                path((*iter).second.saveDirectory()), resumedata)); 
    451427                         
    452428                        if ((*iter).second.isPaused()) 
     
    477453        path resumeDir=pimpl->workingDirectory/"resume"; 
    478454         
    479         if(!exists(resumeDir)) 
     455        if (!pimpl->torrents.empty() && !exists(resumeDir)) 
    480456                create_directory(resumeDir); 
    481457         
  • src/halTorrent.hpp

    r104 r107  
    55#include <vector> 
    66 
     7#include <boost/date_time/posix_time/posix_time.hpp> 
     8#include <boost/smart_ptr.hpp> 
    79#include <boost/smart_ptr.hpp> 
    810#include <boost/algorithm/string.hpp> 
     
    3234public: 
    3335        TorrentDetail(std::wstring f, std::wstring s, std::wstring cT, std::pair<float,float> sp=std::pair<float,float>(0,0), 
    34                         float c=0, float a=0, boost::int64_t tWD=0, boost::int64_t tW=0, int p=0, int sd=0) : 
     36                        float c=0, float d=0, boost::int64_t tWD=0, boost::int64_t tW=0, int p=0, int sd=0, boost::posix_time::time_duration eta=boost::posix_time::seconds(0)) : 
    3537                filename_(f), 
    3638                state_(s), 
     
    3840                speed_(sp), 
    3941                completion_(c), 
    40                 available_(a), 
     42                distributed_copies_(d), 
    4143                totalWantedDone_(tWD), 
    4244                totalWanted_(tW), 
    4345                peers_(p), 
    44                 seeds_(sd) 
     46                seeds_(sd), 
     47                estimatedTimeLeft_(eta) 
    4548        {}               
    4649 
     
    5356        std::pair<float,float> speed() const { return speed_; } 
    5457        const float& completion() const { return completion_; } 
    55         const float& available() const { return available_; } 
     58        const float& distributedCopies() const { return distributed_copies_; } 
    5659         
    5760        const boost::int64_t& totalWantedDone() const { return totalWantedDone_; } 
     
    6063        const int& peers() const { return peers_; } 
    6164        const int& seeds() const { return seeds_; } 
     65         
     66        const boost::posix_time::time_duration& estimatedTimeLeft() { return estimatedTimeLeft_; } 
    6267 
    6368public: 
     
    6873        std::pair<float,float> speed_;           
    6974        float completion_;       
    70         float available_; 
     75        float distributed_copies_; 
    7176         
    7277        boost::int64_t totalWantedDone_; 
     
    7580        int peers_; 
    7681        int seeds_; 
     82         
     83        boost::posix_time::time_duration estimatedTimeLeft_; 
    7784}; 
    7885 
     
    122129         
    123130        void newTorrent(boost::filesystem::path filename, boost::filesystem::path files); 
    124         void addTorrent(boost::filesystem::path file); 
     131        void addTorrent(boost::filesystem::path file, path saveDirectory); 
    125132        void getAllTorrentDetails(TorrentDetails& torrentsContainer); 
    126133        TorrentDetail_ptr getTorrentDetails(string filename); 
     
    158165BitTorrent& bittorrent(); 
    159166 
    160 wstring mbstowcs(const string &str); 
    161 string wcstombs(const wstring &str); 
    162  
    163167}; 
  • src/ini/Torrent.hpp

    r95 r107  
    3232        {} 
    3333         
    34         TorrentInternal(libtorrent::torrent_handle h, std::wstring f) :          
     34        TorrentInternal(libtorrent::torrent_handle h, std::wstring f, path saveDirectory) :              
    3535                transferLimit_(std::pair<float, float>(-1, -1)), 
    3636                connections_(-1), 
     
    3838                paused_(false), 
    3939                filename_(f), 
     40                saveDirectory_(saveDirectory.string()), 
    4041                inSession_(true), 
    4142                handle_(h) 
     
    6162         
    6263        bool inSession() const { return inSession_; } 
     64        const string& saveDirectory() { return saveDirectory_; } 
    6365         
    6466    friend class boost::serialization::access; 
     
    7173        ar & BOOST_SERIALIZATION_NVP(paused_); 
    7274        ar & BOOST_SERIALIZATION_NVP(filename_); 
     75        ar & BOOST_SERIALIZATION_NVP(saveDirectory_); 
    7376    } 
    7477         
     
    8285         
    8386        std::wstring filename_; 
     87        string saveDirectory_; 
    8488        libtorrent::torrent_handle handle_;      
    8589}; 
  • src/ini/Window.hpp

    r99 r107  
    99public: 
    1010        WindowConfig() : 
    11                 splitterPos(100) 
     11                splitterPos(100), 
     12                use_tray(true) 
    1213        { 
    1314                rect.top = 10; 
    1415                rect.left = 10; 
    1516                rect.bottom = 400; 
    16                 rect.right = 520; 
     17                rect.right = 620; 
    1718                 
    1819                mainListColWidth[0] = 100; 
     
    3233                ar & BOOST_SERIALIZATION_NVP(splitterPos); 
    3334                ar & BOOST_SERIALIZATION_NVP(mainListColWidth); 
     35                ar & BOOST_SERIALIZATION_NVP(use_tray); 
    3436        } 
    3537         
     38        friend class GeneralOptions; 
    3639        friend class HaliteWindow; 
    3740        friend class HaliteListViewCtrl; 
     
    4346        unsigned int splitterPos; 
    4447        unsigned int mainListColWidth[numMainCols]; 
     48        bool use_tray; 
    4549}; 
  • src/stdAfx.hpp

    r97 r107  
    77#define _RICHEDIT_VER 0x0200 
    88#define VC_EXTRALEAN 
     9 
     10#define HALITE_GUID L"HALITE-{E3A8BF7D-962F-476E-886B-FECEDD2F0FC7}" 
     11#define WMU_ARE_YOU_ME_STRING  L"WMU_ARE_YOU_ME_HALITE-{E3A8BF7D-962F-476E-886B-FECEDD2F0FC7}" 
     12#define HALITE_SENDING_CMD 68816889 
    913 
    1014#include <atlbase.h> 
     
    3034 
    3135#include <string> 
     36#include <vector> 
    3237#include <boost/format.hpp> 
    3338#include <boost/lexical_cast.hpp> 
     
    3540#include <boost/thread/thread.hpp> 
    3641#include <boost/smart_ptr.hpp> 
     42#include <boost/filesystem/path.hpp> 
     43#include <boost/filesystem/operations.hpp> 
    3744 
    3845using std::string; 
     
    4855using boost::shared_ptr; 
    4956using boost::scoped_ptr; 
     57using boost::filesystem::path; 
     58 
     59wstring mbstowcs(const string &str); 
     60string wcstombs(const wstring &str); 
     61 
     62class GlobalModule 
     63{ 
     64public: 
     65        GlobalModule() 
     66        { 
     67                LPWSTR *szArglist; int nArgs;            
     68                szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs); 
     69                 
     70                if( NULL == szArglist ) 
     71                { 
     72                } 
     73                else 
     74                { 
     75                        exe_string_  = szArglist[0]; 
     76                        exe_path_ = path(wcstombs(exe_string_)); 
     77                         
     78                        for(int i=1; i<nArgs; ++i)  
     79                                command_args_.push_back(szArglist[i]); 
     80                }                
     81                LocalFree(szArglist);    
     82        } 
     83         
     84        const wstring& exeString() const { return exe_string_; } 
     85        const path& exePath() const { return exe_path_; } 
     86        const std::vector<wstring>& commandArgs() const { return command_args_; } 
     87         
     88private: 
     89        wstring exe_string_; 
     90        path exe_path_; 
     91        std::vector<wstring> command_args_; 
     92}; 
     93 
     94GlobalModule& globalModule(); 
     95 
     96 
Note: See TracChangeset for help on using the changeset viewer.