home *** CD-ROM | disk | FTP | other *** search
/ PC World 2003 June / PCWorld_2003-06_cd.bin / KOMUNIK / MIRRORIT / SRC / MIRRORITDOC.CPP < prev    next >
C/C++ Source or Header  |  1998-02-27  |  11KB  |  455 lines

  1. // MirrorItDoc.cpp : implementation of the CMirrorItDoc class
  2. //
  3.  
  4. #include "stdafx.h"
  5. #include "MirrorIt.h"
  6.  
  7. #include "MirrorItDoc.h"
  8. #include "MirrorItView.h"
  9. #include "Session.h"
  10. #include "SessionPropertiesFileNamePage.h"
  11. #include "SessionPropertiesMirrorPage.h"
  12. #include "SessionPropertiesMainPage.h"
  13. #include "SessionPropertiesFileTypesPage.h"
  14. #include "SessionPropertiesLimitPage.h"
  15. #include "SessionPropertiesProxyPage.h"
  16. #include "SessionPropertiesPasswordPage.h"
  17. #include "SessionPropertiesAdvancedPage.h"
  18. #include "SessionPropertiesSheet.h"
  19. #include "HTTPSocket.h"
  20. #include "DownloadDlg.h"
  21.  
  22. #ifdef _DEBUG
  23. #define new DEBUG_NEW
  24. #undef THIS_FILE
  25. static char THIS_FILE[] = __FILE__;
  26. #endif
  27.  
  28. /////////////////////////////////////////////////////////////////////////////
  29. // CMirrorItDoc
  30.  
  31. IMPLEMENT_DYNCREATE(CMirrorItDoc, CDocument)
  32.  
  33. BEGIN_MESSAGE_MAP(CMirrorItDoc, CDocument)
  34.     //{{AFX_MSG_MAP(CMirrorItDoc)
  35.     //}}AFX_MSG_MAP
  36. END_MESSAGE_MAP()
  37.  
  38. /////////////////////////////////////////////////////////////////////////////
  39. // CMirrorItDoc construction/destruction
  40.  
  41. CMirrorItDoc::CMirrorItDoc()
  42. {
  43.     // TODO: add one-time construction code here
  44.     m_ClipboardOperation = FALSE;
  45. }
  46.  
  47. CMirrorItDoc::~CMirrorItDoc()
  48. {
  49. }
  50.  
  51. BOOL CMirrorItDoc::OnNewDocument()
  52. {
  53.     if (!CDocument::OnNewDocument())
  54.         return FALSE;
  55.  
  56.     return TRUE;
  57. }
  58.  
  59.  
  60.  
  61. /////////////////////////////////////////////////////////////////////////////
  62. // CMirrorItDoc serialization
  63.  
  64. void CMirrorItDoc::Serialize(CArchive& ar)
  65. {
  66.     if (ar.IsStoring())
  67.     {
  68.         // TODO: add storing code here
  69.         ar << 0x10006L;
  70.  
  71.         int count;
  72.  
  73.         POSITION pos = GetFirstViewPosition();
  74.         CListView* pFirstView = (CListView *) GetNextView( pos );
  75.         CListCtrl & list = pFirstView -> GetListCtrl();
  76.         
  77.         count = sessions.GetSize();
  78.         if (m_ClipboardOperation)
  79.         {
  80.             ar << list.GetSelectedCount();
  81.         }
  82.             else
  83.         {
  84.             ar << count;
  85.         }
  86.  
  87.         for (int i = 0; i < count; i++)
  88.         {
  89.             if (m_ClipboardOperation && 
  90.                 list.GetItemState(i, LVIS_SELECTED) == 0) continue;
  91.  
  92.             CSession *session = (CSession *) sessions.GetAt(i);
  93.             ar << session -> m_SessionName;
  94.             ar << session -> m_BaseURL;
  95.             ar << session -> m_Comment;
  96.             ar << session -> m_Directory;
  97.             ar << session -> m_LocalURLs;
  98.             ar << session -> m_LongFileName;
  99.             ar << session -> m_Mirror;
  100.             ar << session -> m_BNumberOfLevels;
  101.             ar << session -> m_NumberOfLevels;
  102.             ar << session -> m_BNumberOfFiles;
  103.             ar << session -> m_NumberOfFiles;
  104.             ar << session -> m_BNumberOfKBytes;
  105.             ar << session -> m_NumberOfBytes;
  106.             ar << session -> m_FullName;
  107.  
  108.             ar << session -> m_MimeTypes.GetCount();
  109.             POSITION item = session -> m_MimeTypes.GetHeadPosition(); 
  110.             while (item != NULL)
  111.             {
  112.                 ar << session -> m_MimeTypes.GetNext(item);
  113.             }
  114.             ar << session -> m_ModifiedSince;
  115.             ar << session -> m_TModifiedSince;
  116.             ar << session -> m_UserName;
  117.             ar << session -> m_Password;
  118.             ar << session -> m_BProxy;
  119.             ar << session -> m_ProxyServer;
  120.             ar << session -> m_ProxyPort;
  121.             ar << session -> m_NoProxy;
  122.             ar << session -> m_Exclude;
  123.             ar << session -> m_Multiple;
  124.             ar << session -> m_Permanent;
  125.             ar << session -> m_Temporary;
  126.  
  127.         }
  128.     }
  129.     else
  130.     {
  131.         // TODO: add loading code here
  132.         int count, ver;
  133.         ar >> ver;
  134.         if (ver == 0x10005L)
  135.         {
  136.             ar >> count;
  137.             
  138.             for (int i = 0; i < count; i++)
  139.             {
  140.                 CString SessionName;
  141.                 CString BaseURL;
  142.                 CString Comment;
  143.                 CString Directory;
  144.                 int LongFileName, Mirror;
  145.                 BOOL LocalURLs, FullName, BNumberOfLevels, BNumberOfFiles, BNumberOfKBytes;
  146.                 UINT NumberOfLevels, NumberOfFiles, NumberOfBytes;
  147.                 
  148.                 ar >> SessionName;
  149.                 ar >> BaseURL;
  150.                 ar >> Comment;
  151.                 ar >> Directory;
  152.                 ar >> LocalURLs;
  153.                 ar >> LongFileName;
  154.                 ar >> Mirror;
  155.  
  156.                 ar >> BNumberOfLevels;
  157.                 ar >> NumberOfLevels;
  158.                 ar >> BNumberOfFiles;
  159.                 ar >> NumberOfFiles;
  160.                 ar >> BNumberOfKBytes;
  161.                 ar >> NumberOfBytes;
  162.                 ar >> FullName;
  163.  
  164.                 int mimetypes;
  165.                 CStringList templist;
  166.  
  167.                 ar >> mimetypes;
  168.  
  169.                 for (int j = 0; j < mimetypes; j++)
  170.                 {
  171.                     CString temp;
  172.                     ar >> temp;
  173.                     templist.AddTail(temp);
  174.                 }
  175.  
  176.                 BOOL IfModifiedSince, BProxy;
  177.                 CTime TIfModifiedSince;
  178.                 CString UserName, Password, ProxyServer;
  179.                 UINT ProxyPort;
  180.  
  181.                 ar >> IfModifiedSince;
  182.                 ar >> TIfModifiedSince;
  183.  
  184.                 ar >> UserName;
  185.                 ar >> Password;
  186.                 ar >> BProxy;
  187.                 ar >> ProxyServer;
  188.                 ar >> ProxyPort;
  189.  
  190.                 sessions.Add(new CSession(SessionName, BaseURL, Comment, Directory, Mirror, LongFileName, LocalURLs, BNumberOfFiles, NumberOfFiles, BNumberOfLevels, NumberOfLevels, BNumberOfKBytes, NumberOfBytes, FullName, &templist, IfModifiedSince, &TIfModifiedSince, BProxy, ProxyServer, ProxyPort, UserName, Password));
  191.             }
  192.         }
  193.         else
  194.         if (ver == 0x10006L)
  195.         {
  196.             ar >> count;
  197.             
  198.             for (int i = 0; i < count; i++)
  199.             {
  200.                 CString SessionName;
  201.                 CString BaseURL;
  202.                 CString Comment;
  203.                 CString Directory;
  204.                 int LongFileName, Mirror;
  205.                 BOOL LocalURLs, FullName, BNumberOfLevels, BNumberOfFiles, BNumberOfKBytes;
  206.                 UINT NumberOfLevels, NumberOfFiles, NumberOfBytes;
  207.                 
  208.                 ar >> SessionName;
  209.                 ar >> BaseURL;
  210.                 ar >> Comment;
  211.                 ar >> Directory;
  212.                 ar >> LocalURLs;
  213.                 ar >> LongFileName;
  214.                 ar >> Mirror;
  215.  
  216.                 ar >> BNumberOfLevels;
  217.                 ar >> NumberOfLevels;
  218.                 ar >> BNumberOfFiles;
  219.                 ar >> NumberOfFiles;
  220.                 ar >> BNumberOfKBytes;
  221.                 ar >> NumberOfBytes;
  222.                 ar >> FullName;
  223.  
  224.                 int mimetypes;
  225.                 CStringList templist;
  226.  
  227.                 ar >> mimetypes;
  228.  
  229.                 for (int j = 0; j < mimetypes; j++)
  230.                 {
  231.                     CString temp;
  232.                     ar >> temp;
  233.                     templist.AddTail(temp);
  234.                 }
  235.  
  236.                 BOOL IfModifiedSince, BProxy, Multiple, Permanent, Temporary;
  237.                 CTime TIfModifiedSince;
  238.                 CString UserName, Password, ProxyServer, NoProxy, Exclude;
  239.                 UINT ProxyPort;
  240.  
  241.                 ar >> IfModifiedSince;
  242.                 ar >> TIfModifiedSince;
  243.  
  244.                 ar >> UserName;
  245.                 ar >> Password;
  246.                 ar >> BProxy;
  247.                 ar >> ProxyServer;
  248.                 ar >> ProxyPort;
  249.  
  250.                 ar >> NoProxy;
  251.                 ar >> Exclude;
  252.                 ar >> Multiple;
  253.                 ar >> Permanent;
  254.                 ar >> Temporary;
  255.  
  256.                 sessions.Add(new CSession(SessionName, BaseURL, Comment, Directory, Mirror, LongFileName, LocalURLs, BNumberOfFiles, NumberOfFiles, BNumberOfLevels, NumberOfLevels, BNumberOfKBytes, NumberOfBytes, FullName, &templist, IfModifiedSince, &TIfModifiedSince, BProxy, ProxyServer, ProxyPort, UserName, Password, NoProxy, Exclude, Multiple, Permanent, Temporary));
  257.             }
  258.         }
  259.     }
  260. }
  261.  
  262. /////////////////////////////////////////////////////////////////////////////
  263. // CMirrorItDoc diagnostics
  264.  
  265. #ifdef _DEBUG
  266. void CMirrorItDoc::AssertValid() const
  267. {
  268.     CDocument::AssertValid();
  269. }
  270.  
  271. void CMirrorItDoc::Dump(CDumpContext& dc) const
  272. {
  273.     CDocument::Dump(dc);
  274. }
  275. #endif //_DEBUG
  276.  
  277. /////////////////////////////////////////////////////////////////////////////
  278. // CMirrorItDoc commands
  279.  
  280. void CMirrorItDoc::AddSession()
  281. {
  282.     CSessionPropertiesSheet dlg(TRUE);
  283.     CSession *session = new CSession;
  284.     
  285. //    session -> m_BaseURL = "doc-baseurl";
  286. //    session -> m_SessionName = "doc-sessionname";
  287. //    session -> m_Comment = "doc-comment";
  288.  
  289.     dlg.SetData(*session);
  290.  
  291.     if (dlg.DoModal() == IDOK)
  292.     {
  293.         dlg.GetData(*session);
  294.  
  295.         sessions.Add(session);
  296.         SetModifiedFlag();
  297.         UpdateAllViews(NULL, UPDATE_ADD, session);
  298.     }
  299.     else
  300.         delete session;
  301. }
  302.  
  303. void CMirrorItDoc::RemoveSession(CListCtrl & list)
  304. {
  305.     int selcount = list.GetSelectedCount(); 
  306.     if (!m_ClipboardOperation && AfxMessageBox(selcount == 1 ? IDM_SESSIONREMOVE : IDM_SESSIONSREMOVE, MB_YESNO) != IDYES) return;
  307.     
  308.     int count = list.GetItemCount();
  309.  
  310.     CPtrArray *items = new CPtrArray;
  311.  
  312.     items -> SetSize(selcount);
  313.  
  314.     int j = 0;
  315.  
  316.     for (int i = count - 1; i >= 0; i--)
  317.         if (list.GetItemState(i, LVIS_SELECTED))
  318.         {
  319.             items -> SetAt(j++, sessions.GetAt(i));
  320.             sessions.RemoveAt(i);
  321.         }
  322.     SetModifiedFlag();
  323.     UpdateAllViews(NULL, UPDATE_REMOVE, items);
  324. }
  325.  
  326. void CMirrorItDoc::PropertiesSession(CListCtrl & list)
  327. {
  328.     int count = list.GetItemCount();
  329.     int selected = -1;
  330.  
  331.     for (int i = 0; i < count; i++)
  332.         if (list.GetItemState(i, LVIS_SELECTED))
  333.         {
  334.             selected = i;
  335.             break;
  336.         }
  337.  
  338.     if (selected < 0) return;
  339.  
  340.     PropertiesSession(selected);
  341. }
  342.  
  343. void CMirrorItDoc::DeleteContents() 
  344. {
  345.     if (m_ClipboardOperation)
  346.     {
  347.         POSITION pos = GetFirstViewPosition();
  348.         CListView* pFirstView = (CListView *) GetNextView( pos );
  349.         CListCtrl & list = pFirstView -> GetListCtrl();
  350.         RemoveSession(list);
  351.         return;
  352.     }
  353.  
  354.     for (int i = sessions.GetSize() - 1; i >= 0; i--)
  355.     {
  356.         CSession *session = (CSession *) sessions.GetAt(i);
  357.         if (session) delete session;
  358.     }
  359.     sessions.RemoveAll();
  360.     
  361.     CDocument::DeleteContents();
  362. }
  363.  
  364. void CMirrorItDoc::PropertiesSession(int selected)
  365. {
  366.     if (selected < 0) return;
  367.  
  368.     CSessionPropertiesSheet dlg;
  369.     
  370.     CSession *session = (CSession *)sessions.GetAt(selected);
  371.  
  372.     dlg.SetData(*session);
  373.  
  374.     if (dlg.DoModal() == IDOK)
  375.     {
  376.         if (dlg.GetData(*session))
  377.         {
  378.             session -> url.parse(session -> m_BaseURL);
  379.              SetModifiedFlag();
  380.             UpdateAllViews(NULL, UPDATE_MODIFY, session);
  381.         }
  382.     }
  383. }
  384.  
  385. void CMirrorItDoc::AddSession(CString SessionName, CString BaseURL)
  386. {
  387.     CSession *session = new CSession(SessionName, BaseURL);
  388.  
  389.     sessions.Add(session);
  390.     SetModifiedFlag();
  391.     UpdateAllViews(NULL, UPDATE_ADD, session);
  392. }
  393.  
  394. void CMirrorItDoc::MoveupSession(CListCtrl & list)
  395. {
  396.     int count = list.GetItemCount();
  397.     int selected = -1;
  398.  
  399.     for (int i = 0; i < count; i++)
  400.         if (list.GetItemState(i, LVIS_SELECTED))
  401.         {
  402.             selected = i;
  403.             break;
  404.         }
  405.  
  406.     if (selected < 1) return;    //not found and topmost item
  407.  
  408.     CDWordArray *items = new CDWordArray;
  409.  
  410.     items -> SetSize(2);
  411.     items -> SetAt(0, selected);
  412.     items -> SetAt(1, selected - 1);
  413.  
  414.     CSession *session = (CSession *)sessions.GetAt(selected - 1);
  415.     sessions.SetAt(selected - 1, sessions.GetAt(selected));
  416.     sessions.SetAt(selected, session);
  417.     
  418.     UpdateAllViews(NULL, UPDATE_MOVE, items);
  419. }
  420.  
  421. void CMirrorItDoc::MovedownSession(CListCtrl & list)
  422. {
  423.     int count = list.GetItemCount();
  424.     int selected = -1;
  425.  
  426.     for (int i = 0; i < count; i++)
  427.         if (list.GetItemState(i, LVIS_SELECTED))
  428.         {
  429.             selected = i;
  430.             break;
  431.         }
  432.  
  433.     if (selected < 0 || selected >= count - 1) return;
  434.  
  435.     CDWordArray *items = new CDWordArray;
  436.  
  437.     items -> SetSize(2);
  438.     items -> SetAt(0, selected);
  439.     items -> SetAt(1, selected + 1);
  440.     CSession *session = (CSession *)sessions.GetAt(selected);
  441.     sessions.SetAt(selected, sessions.GetAt(selected + 1));
  442.     sessions.SetAt(selected + 1, session);
  443.  
  444.     UpdateAllViews(NULL, UPDATE_MOVE, items);
  445. }
  446.  
  447. void CMirrorItDoc::StartSession()
  448. {
  449.     AfxGetMainWnd() -> ShowWindow(SW_HIDE);
  450.     CDownLoadDlg dlg;
  451.     
  452.     dlg.LoadSessions(sessions);
  453.     AfxGetMainWnd() -> ShowWindow(SW_SHOW);
  454. }
  455.