Skip to content

Commit d147764

Browse files
committed
Started implementing the database manager
1 parent c36de4c commit d147764

15 files changed

Lines changed: 426 additions & 120 deletions

CutCode/Controllers/BindableAvalonEditor.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,11 @@ public class BindableAvalonEditor : ICSharpCode.AvalonEdit.TextEditor, INotifyPr
1414
/// A bindable Text property
1515
/// </summary>
1616

17+
protected override void OnTextChanged(EventArgs e)
18+
{
19+
base.OnTextChanged(e);
20+
Text = Document.Text;
21+
}
1722
public new string Text
1823
{
1924
get => (string)GetValue(TextProperty);
@@ -34,7 +39,7 @@ public class BindableAvalonEditor : ICSharpCode.AvalonEdit.TextEditor, INotifyPr
3439
typeof(BindableAvalonEditor),
3540
new FrameworkPropertyMetadata
3641
{
37-
DefaultValue = default(string),
42+
DefaultValue = "",
3843
BindsTwoWayByDefault = true,
3944
PropertyChangedCallback = OnDependencyPropertyChanged
4045
}

CutCode/Controllers/CodeBoxControl.xaml.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public static class LangList
3030

3131
public static List<string> Langs = new List<string>()
3232
{
33-
"All languages", "Python", "C++", "C#", "CSS", "Dart", "Golang", "Html", "Java",
33+
"Any language", "Python", "C++", "C#", "CSS", "Dart", "Golang", "Html", "Java",
3434
"Javascript", "Kotlin", "Php", "C", "Ruby", "Rust","Sql", "Swift"
3535
};
3636
}

CutCode/CutCode.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@
4646

4747
<ItemGroup>
4848
<PackageReference Include="AvalonEdit" Version="6.1.2.30" />
49+
<PackageReference Include="sqlite-net-pcl" Version="1.7.335" />
4950
<PackageReference Include="Stylet" Version="1.3.6" />
5051
</ItemGroup>
5152

CutCode/DataBase/CodeTable.cs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
using SQLite;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Text;
6+
using System.Threading.Tasks;
7+
8+
namespace CutCode
9+
{
10+
[Table("CodeTable")]
11+
public class CodeTable
12+
{
13+
[PrimaryKey, AutoIncrement]
14+
[SQLite.Column("id")]
15+
public int Id { get; set; }
16+
17+
[SQLite.Column("title")]
18+
public string title { get; set; }
19+
20+
[SQLite.Column("description")]
21+
public string desc { get; set; }
22+
23+
[SQLite.Column("code")]
24+
public string code { get; set; }
25+
26+
[SQLite.Column("Favourite")]
27+
public bool isFav { get; set; }
28+
29+
[SQLite.Column("Language")]
30+
public string lang { get; set; }
31+
32+
[SQLite.Column("timestamp")]
33+
public long timestamp { get; set; }
34+
}
35+
}

CutCode/DataBase/DBManager.cs

Lines changed: 0 additions & 56 deletions
This file was deleted.
Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
using SQLite;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Collections.ObjectModel;
5+
using System.Collections.Specialized;
6+
using System.Diagnostics;
7+
using System.Linq;
8+
using System.Text;
9+
using System.Threading.Tasks;
10+
11+
namespace CutCode
12+
{
13+
public class DataBaseManager : IDataBase
14+
{
15+
public ObservableCollection<CodeBoxModel> AllCodes { get; set; }
16+
private SQLiteConnection _db;
17+
private readonly IThemeService themeService;
18+
public DataBaseManager(IThemeService _themeService)
19+
{
20+
var path = "DataBase.db";
21+
_db = new SQLiteConnection(path);
22+
_db.CreateTable<CodeTable>();
23+
24+
themeService = _themeService;
25+
26+
AllCodes = new ObservableCollection<CodeBoxModel>();
27+
28+
var codes = _db.Query<CodeTable>("SELECT * From CodeTable");
29+
foreach (var c in codes)
30+
{
31+
AllCodes.Add(new CodeBoxModel(c.Id, c.title, c.desc, c.isFav, c.lang, c.code, c.timestamp, themeService));
32+
}
33+
}
34+
35+
private int GetIndex(CodeBoxModel code)
36+
{
37+
int ind = 0;
38+
foreach(var c in AllCodes)
39+
{
40+
if (c.id == code.id) break;
41+
ind++;
42+
}
43+
return ind;
44+
}
45+
46+
public event EventHandler PropertyChanged;
47+
public void AllCodesPropertyChanged() => PropertyChanged?.Invoke(this, EventArgs.Empty);
48+
49+
50+
public CodeBoxModel AddCode(string title, string desc, string code, string langType)
51+
{
52+
var time = new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds();
53+
54+
var dbCode = new CodeTable
55+
{
56+
title = title,
57+
desc = desc,
58+
code = code,
59+
lang = langType,
60+
isFav = false,
61+
timestamp = time
62+
};
63+
_db.Insert(dbCode);
64+
65+
int id = (int)SQLite3.LastInsertRowid(_db.Handle);
66+
var codeModel = new CodeBoxModel(id, title, desc, false, langType, code, time, themeService);
67+
AllCodes.Add(codeModel);
68+
AllCodesPropertyChanged();
69+
70+
return codeModel;
71+
}
72+
73+
public bool EditCode(CodeBoxModel code)
74+
{
75+
try
76+
{
77+
var dbCode = _db.Query<CodeTable>("select * from CodeTable where Id = ?", code.id).FirstOrDefault();
78+
if(dbCode is not null)
79+
{
80+
dbCode.title = code.title;
81+
dbCode.desc = code.desc;
82+
dbCode.code = code.code;
83+
_db.RunInTransaction(() =>
84+
{
85+
_db.Update(dbCode);
86+
});
87+
AllCodes[GetIndex(code)] = code;
88+
AllCodesPropertyChanged();
89+
}
90+
}
91+
catch
92+
{
93+
return false;
94+
}
95+
return true;
96+
}
97+
98+
public bool DelCode(CodeBoxModel code)
99+
{
100+
try
101+
{
102+
_db.Delete<CodeTable>(code.id);
103+
AllCodes.Remove(code);
104+
AllCodesPropertyChanged();
105+
}
106+
catch
107+
{
108+
return false;
109+
}
110+
return true;
111+
}
112+
113+
private List<string> AllOrderKind = new List<string>()
114+
{
115+
"Alphabet", "Date", "All languages", "Python", "C++", "C#", "CSS", "Dart", "Golang",
116+
"Html", "Java", "Javascript", "Kotlin", "Php", "C", "Ruby", "Rust","Sql", "Swift"
117+
};
118+
public void OrderCode(string order)
119+
{
120+
int ind = AllOrderKind.IndexOf(order);
121+
ObservableCollection<CodeBoxModel> lst;
122+
123+
if (ind > 2)
124+
{
125+
lst = new ObservableCollection<CodeBoxModel>();
126+
foreach (var code in AllCodes) if (code.langType == order) lst.Add(code);
127+
}
128+
else
129+
{
130+
if (ind == 0) lst = new ObservableCollection<CodeBoxModel>(AllCodes.OrderBy(x => x.title).ToList());
131+
else if(ind == 1) lst = new ObservableCollection<CodeBoxModel>(AllCodes.OrderBy(x => x.timestamp).ToList());
132+
else
133+
{
134+
var codes = _db.Query<CodeTable>("SELECT * From CodeTable");
135+
lst = new ObservableCollection<CodeBoxModel>();
136+
foreach(var c in codes)
137+
{
138+
lst.Add(new CodeBoxModel(c.Id, c.title, c.desc, c.isFav, c.lang, c.code, c.timestamp, themeService));
139+
}
140+
}
141+
}
142+
AllCodes = lst;
143+
AllCodesPropertyChanged();
144+
}
145+
146+
public bool FavModify(CodeBoxModel code)
147+
{
148+
try
149+
{
150+
var dbCode = _db.Query<CodeTable>("select * from CodeTable where Id = ?", code.id).FirstOrDefault();
151+
if (dbCode is not null)
152+
{
153+
dbCode.isFav = code.isFav;
154+
_db.RunInTransaction(() =>
155+
{
156+
_db.Update(dbCode);
157+
});
158+
AllCodes[GetIndex(code)] = code;
159+
AllCodesPropertyChanged();
160+
}
161+
}
162+
catch
163+
{
164+
return false;
165+
}
166+
return true;
167+
}
168+
169+
public void SearchCode(string text)
170+
{
171+
172+
}
173+
}
174+
}

CutCode/Helpers/Bootstrapper.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ protected override void ConfigureIoC(IStyletIoCBuilder builder)
99
{
1010
builder.Bind<IThemeService>().To<ThemeService>();
1111
builder.Bind<IPageService>().To<PageService>();
12+
builder.Bind<IDataBase>().To<DataBaseManager>();
1213
}
1314
}
1415
}

CutCode/Interfaces/IDataBase.cs

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Collections.ObjectModel;
4+
using System.Linq;
5+
using System.Text;
6+
using System.Threading.Tasks;
7+
8+
namespace CutCode
9+
{
10+
public interface IDataBase
11+
{
12+
ObservableCollection<CodeBoxModel> AllCodes { get; set; }
13+
event EventHandler PropertyChanged;
14+
CodeBoxModel AddCode(string title, string desc, string code, string langType);
15+
bool EditCode(CodeBoxModel code);
16+
bool DelCode(CodeBoxModel code);
17+
void OrderCode(string order);
18+
bool FavModify(CodeBoxModel code);
19+
void SearchCode(string text);
20+
}
21+
}

0 commit comments

Comments
 (0)