Skip to content

Commit e8c1984

Browse files
authored
Merge pull request #11 from olangness/crawl
Crawl
2 parents 802db24 + 35ef08d commit e8c1984

26 files changed

+201
-237
lines changed

WebCrawler/App.config

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
55
</startup>
66
<appSettings>
7-
<add key="url" value="https://www.ndsu.edu/" />
7+
<add key="url" value="" />
88
<!-- What site do you want to crawl? -->
99
<add key="logTextFileName" value="C:\Users\awick\OneDrive\Documents\GitHub\WebCrawler\WebCrawler\log.txt" />
1010
<!-- Point this to some location that exists on your machine -->

WebCrawler/MainWindow.xaml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,5 @@
1313
<TabItem Header="Website Tree" >
1414
<uc1:WebsiteTreeTabView></uc1:WebsiteTreeTabView>
1515
</TabItem>
16-
<TabItem Header="Topics" >
17-
<topicstree:TopicTreeTabView></topicstree:TopicTreeTabView>
18-
</TabItem>
1916
</TabControl>
2017
</Window>

WebCrawler/MainWindow.xaml.cs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,8 @@ public partial class MainWindow : Window
88
{
99
public MainWindow()
1010
{
11-
Crawler crawl = new Crawler(new ExternalUrlRepository(), new OtherUrlRepository(), new FailedUrlRepository(), new CurrentPageUrlRepository());
12-
crawl.InitializeCrawl();
13-
//InitializeComponent();
11+
12+
InitializeComponent();
1413
}
1514

1615
private void CrawlingTabView_Loaded(object sender, RoutedEventArgs e)

WebCrawler/Model/Crawler.cs

Lines changed: 50 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,12 @@
1010
using WebCrawler.Interfaces;
1111
using System.Text.RegularExpressions;
1212
using WebCrawler.Repositories;
13+
using System.Collections.ObjectModel;
14+
using WebCrawler.Model.Data_Storage;
1315

1416
namespace WebCrawler.Model
1517
{
16-
class Crawler
18+
public class Crawler
1719
{
1820
private IRepos _externalUrlRepository;
1921
private IRepos _otherUrlRepository;
@@ -24,7 +26,41 @@ class Crawler
2426
private bool isCurrentPage = true;
2527
private static List<string> urlsWithTopics = new List<string>();
2628
private static List<Link> links = new List<Link>();
27-
private static List<Log> log = new List<Log>();
29+
private static ObservableCollection<Log> log = new ObservableCollection<Log>();
30+
31+
private static Crawler instance = null;
32+
private static readonly object padlock = new object();
33+
34+
Crawler()
35+
{
36+
}
37+
38+
public static Crawler Instance
39+
{
40+
get
41+
{
42+
lock (padlock)
43+
{
44+
if (instance == null)
45+
{
46+
instance = new Crawler(new ExternalUrlRepository(), new OtherUrlRepository(), new FailedUrlRepository(), new CurrentPageUrlRepository());
47+
}
48+
return instance;
49+
}
50+
}
51+
}
52+
53+
public ObservableCollection<Log> Log
54+
{
55+
get { return log; }
56+
set { log = value; }
57+
}
58+
59+
public List<Link> Links
60+
{
61+
get { return links; }
62+
set { links = value; }
63+
}
2864

2965
//Constructor
3066
public Crawler(IRepos externalUrlRepository, IRepos otherUrlRepository, IRepos failedUrlRepository, IRepos currentPageUrlRepository)
@@ -39,12 +75,18 @@ public Crawler(IRepos externalUrlRepository, IRepos otherUrlRepository, IRepos f
3975
}
4076

4177
//Initializing the crawling process.
42-
public void InitializeCrawl()
78+
public void InitializeCrawl(string key, string url)
4379
{
44-
CrawlPage(ConfigurationManager.AppSettings["url"]);
80+
//var crawlUrl = ConfigurationManager.AppSettings["url"];
81+
Configuration configuration = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
82+
configuration.AppSettings.Settings[key].Value = url;
83+
configuration.Save();
84+
85+
ConfigurationManager.RefreshSection("appSettings");
86+
//CrawlPage(ConfigurationManager.AppSettings["url"]);
4587
}
4688

47-
//Initialisting the reporting
89+
/*//Initialisting the reporting
4890
public void InitilizeCreateReport()
4991
{
5092
//var stringBuilder = Reporting.CreateReport(_externalUrlRepository, _otherUrlRepository, _failedUrlRepository, _currentPageUrlRepository, _pages, _exceptions);
@@ -54,7 +96,7 @@ public void InitilizeCreateReport()
5496
//System.Diagnostics.Process.Start(ConfigurationManager.AppSettings["logTextFileName"].ToString());
5597
5698
//Environment.Exit(0);
57-
}
99+
}*/
58100

59101
private void CrawlPage(string url)
60102
{
@@ -69,11 +111,8 @@ private void CrawlPage(string url)
69111
page.Url = url;
70112

71113
_pages.Add(page);
72-
links.Add(url);
73-
log.Add("New Log Entry: "+url);
74-
75-
76-
//AddUrlToList(topic);
114+
//links.Add(url);
115+
log.Add(new Log($"New Entry: {url}", DateTime.Now));
77116

78117
linkParser.ParseLinks(page, url);
79118

WebCrawler/Model/Data Storage/ILog.cs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using System.Text;
5+
using System.Threading.Tasks;
6+
7+
namespace WebCrawler.Model.Data_Storage
8+
{
9+
public interface ILog
10+
{
11+
string MessageText { get; set; }
12+
DateTime MessageTime { get; set; }
13+
}
14+
}

WebCrawler/Model/Data Storage/Link.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
namespace WebCrawler.Model
88
{
9-
class Link
9+
public class Link
1010
{
1111
string name;
1212
string url;

WebCrawler/Model/Data Storage/Log.cs

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,59 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.ComponentModel;
34
using System.Linq;
45
using System.Text;
56
using System.Threading.Tasks;
7+
using WebCrawler.Model.Data_Storage;
68

79
namespace WebCrawler.Model
810
{
9-
class Log
11+
public class Log : ILog
1012
{
1113
string messageText;
1214
DateTime messageTime;
1315

1416

1517
public Log() { }
1618

17-
public Log(string message, DateTime time)
19+
private DateTime _messageTime;
20+
public DateTime MessageTime
1821
{
19-
MessageText = message;
20-
21-
MessageTime = time;
22+
get { return _messageTime; }
23+
set
24+
{
25+
_messageTime = value;
26+
NotifyPropertyChanged("ProjectID");
27+
}
2228
}
2329

30+
private string _messageText;
2431
public string MessageText
2532
{
26-
get { return messageText; }
27-
28-
set { messageText = value; }
33+
get { return _messageText; }
34+
set
35+
{
36+
_messageText = value;
37+
NotifyPropertyChanged("ProjectID");
38+
}
2939
}
3040

31-
public DateTime MessageTime
41+
public Log(string message, DateTime time)
3242
{
33-
get { return messageTime; }
43+
MessageTime = time;
44+
MessageText = message;
45+
}
3446

35-
set { messageTime = value; }
47+
48+
[field: NonSerialized]
49+
public event PropertyChangedEventHandler PropertyChanged;
50+
51+
private void NotifyPropertyChanged(String info)
52+
{
53+
if (PropertyChanged != null)
54+
{
55+
PropertyChanged(this, new PropertyChangedEventArgs(info));
56+
}
3657
}
3758
}
3859
}

WebCrawler/Model/Page.cs

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,25 @@ public Page() { }
1111
private string _url;
1212
private int _viewstateSize;
1313

14-
public int Size { get; }
15-
16-
public string Text { get; set; }
14+
public int Size
15+
{
16+
get { return _size; }
17+
}
1718

18-
public string Url { get; set; }
19+
public string Text
20+
{
21+
get { return _text; }
22+
set
23+
{
24+
_text = value;
25+
_size = value.Length;
26+
}
27+
}
1928

20-
public override bool Equals(object obj)
29+
public string Url
2130
{
22-
if (!(obj is Page))
23-
return false;
24-
Page other = (Page)obj;
25-
return other.Url == Url;
31+
get { return _url; }
32+
set { _url = value; }
2633
}
2734
}
2835
}
29-
30-

WebCrawler/View/Crawling/CrawlingTabView.xaml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,15 @@
1212
<ColumnDefinition></ColumnDefinition>
1313
</Grid.ColumnDefinitions>
1414
<local:WebsiteCrawlerView Grid.Column="0" HorizontalAlignment="Left" VerticalAlignment="Top"/>
15-
<local:LogView Grid.Column="1"/>
15+
<ListView Grid.Column="1" Name="ListViewProjects" Grid.RowSpan="3" SelectionChanged="ListViewLogsSelectionChanged" ItemsSource="{Binding Logs}" IsSynchronizedWithCurrentItem="True" MinWidth="100">
16+
<ListView.ItemTemplate>
17+
<DataTemplate>
18+
<WrapPanel>
19+
<TextBlock Text="{Binding Path=MessageTime, StringFormat='yyyy-MM-dd HH:mm:ss' }"/>
20+
<TextBlock Text="{Binding Path=MessageText}"/>
21+
</WrapPanel>
22+
</DataTemplate>
23+
</ListView.ItemTemplate>
24+
</ListView>
1625
</Grid>
1726
</UserControl>

WebCrawler/View/Crawling/CrawlingTabView.xaml.cs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,5 +30,9 @@ public CrawlingTabView()
3030
// The DataContext serves as the starting point of Binding Paths
3131
DataContext = _viewModel;
3232
}
33+
34+
public void ListViewLogsSelectionChanged(object sender, SelectionChangedEventArgs e)
35+
{
36+
}
3337
}
3438
}

0 commit comments

Comments
 (0)