Skip to content

Commit f25c6c7

Browse files
committed
Logging is now binded
1 parent c771780 commit f25c6c7

File tree

13 files changed

+111
-69
lines changed

13 files changed

+111
-69
lines changed

WebCrawler/Model/Crawler.cs

Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
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
{
@@ -24,9 +26,31 @@ public 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<string> log = new List<string>();
29+
private static ObservableCollection<Log> log = new ObservableCollection<Log>();
2830

29-
public List<string> Log
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
3054
{
3155
get { return log; }
3256
set { log = value; }
@@ -82,7 +106,7 @@ private void CrawlPage(string url)
82106

83107
_pages.Add(page);
84108
//links.Add(url);
85-
log.Add("New Log Entry: "+url);
109+
log.Add(new Log($"New Entry: {url}", DateTime.Now));
86110

87111

88112
//AddUrlToList(topic);

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/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-
public 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/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: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,14 @@ public partial class CrawlingTabView : UserControl
2525

2626
public CrawlingTabView()
2727
{
28-
_viewModel = new CrawlingTabViewModel();
2928
InitializeComponent();
30-
29+
_viewModel = new CrawlingTabViewModel();
3130
// The DataContext serves as the starting point of Binding Paths
3231
DataContext = _viewModel;
3332
}
33+
34+
public void ListViewLogsSelectionChanged(object sender, SelectionChangedEventArgs e)
35+
{
36+
}
3437
}
3538
}

WebCrawler/View/Crawling/ListToTextConverter.cs

Lines changed: 0 additions & 25 deletions
This file was deleted.

WebCrawler/View/Crawling/LogView.xaml

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,7 @@
66
xmlns:local="clr-namespace:WebCrawler.View.Crawling"
77
mc:Ignorable="d"
88
d:DesignHeight="450" d:DesignWidth="800">
9-
<UserControl.Resources>
10-
<local:ListToTextConverter x:Key="converter1" />
11-
</UserControl.Resources>
129
<Grid>
13-
<TextBox Name="tb_files"
14-
Text="{Binding Path=LogModel, Converter={StaticResource converter1} }"
15-
/>
10+
1611
</Grid>
1712
</UserControl>

WebCrawler/View/Crawling/LogView.xaml.cs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,12 @@ public partial class LogView : UserControl
2424
{
2525
private readonly LogViewModel _viewModel;
2626

27-
public LogView(Crawler model)
27+
public LogView()
2828
{
29-
InitializeComponent();
30-
_viewModel = new LogViewModel(model);
31-
// The DataContext serves as the starting point of Binding Paths
32-
DataContext = _viewModel;
29+
//InitializeComponent();
30+
//_viewModel = new LogViewModel();
31+
//// The DataContext serves as the starting point of Binding Paths
32+
//DataContext = _viewModel;
3333
}
3434
}
3535
}

WebCrawler/View/Crawling/WebsiteCrawlerView.xaml.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@ public partial class WebsiteCrawlerView : UserControl
2424
{
2525
private readonly WebsiteCrawlerViewModel _viewModel;
2626

27-
public WebsiteCrawlerView(Crawler model)
27+
public WebsiteCrawlerView()
2828
{
2929
InitializeComponent();
30-
_viewModel = new WebsiteCrawlerViewModel(model);
30+
_viewModel = new WebsiteCrawlerViewModel();
3131
// The DataContext serves as the starting point of Binding Paths
3232
DataContext = _viewModel;
3333
}
Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,27 @@
11
using System;
22
using System.Collections.Generic;
3+
using System.Collections.ObjectModel;
34
using System.ComponentModel;
45
using System.Linq;
56
using System.Text;
67
using System.Threading.Tasks;
8+
using System.Windows.Controls;
79
using WebCrawler.Model;
10+
using WebCrawler.Model.Data_Storage;
811
using WebCrawler.Repositories;
912
using WebCrawler.View.Crawling;
1013

1114
namespace WebCrawler.ViewModel.Crawling
1215
{
1316
class CrawlingTabViewModel : INotifyPropertyChanged
1417
{
15-
public WebsiteCrawlerView WebsiteCrawlerView { get; set; }
18+
public WebsiteCrawlerViewModel WebsiteCrawlerViewModel { get; set; }
1619

17-
public LogView LogView { get; set; }
20+
public ObservableCollection<Log> Logs { get; set; } = new ObservableCollection<Log>();
1821

1922
public CrawlingTabViewModel()
2023
{
21-
Crawler model = new Crawler(new ExternalUrlRepository(), new OtherUrlRepository(), new FailedUrlRepository(), new CurrentPageUrlRepository());
22-
WebsiteCrawlerView = new WebsiteCrawlerView(model);
23-
LogView = new LogView(model);
24+
Logs = Crawler.Instance.Log;
2425
}
2526

2627

@@ -33,5 +34,7 @@ protected void OnPropertyChange(string propertyName)
3334
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
3435
}
3536
}
37+
38+
3639
}
3740
}

0 commit comments

Comments
 (0)