niobures's picture
VideoSearch
e26fba6 verified
using System;
using System.Collections.Generic;
using System.Text;
using Client.Scraper;
using System.Data.SQLite;
using System.IO;
namespace BlueTube.Viewer.Data
{
public class DataService
{
private static SQLiteConnection connection;
static DataService()
{
connection = new SQLiteConnection("Data Source=mt.db;Version=3;");
connection.Open();
}
private DataService() { }
public static DataService Create()
{
return new DataService();
}
public void AddToFavourite(ScrapedVideo video)
{
using (var cmd = new SQLiteCommand(connection))
{
cmd.CommandText = String.Format("INSERT INTO VIDEO(Url,Title,ImageUrl,Duration,PlayUrl,Quality,IsFavourite) " +
"VALUES('{0}','{1}','{2}',{3},'{4}',{5},{6})", Sanitize(video.Url),
Sanitize(video.Title), Sanitize(video.ImageUrl),
video.Duration.TotalSeconds, Sanitize(video.PlayUrl), 99, 1);
cmd.ExecuteNonQuery();
}
}
public void AddSearchWord(string text)
{
if (String.IsNullOrEmpty(text))
return;
using (var cmd = new SQLiteCommand(connection))
{
cmd.CommandText = String.Format("SELECT COUNT(*) FROM SEARCHWORD WHERE Text = '%{0}%'", Sanitize(text));
var count = Convert.ToInt32(cmd.ExecuteScalar());
if (count > 0)
return;
cmd.CommandText = String.Format("INSERT INTO SEARCHWORD(Text) " +
"VALUES('{0}')", Sanitize(text));
cmd.ExecuteNonQuery();
}
}
public List<string> GetAllSearchWords()
{
var words = new List<string>();
using (var cmd = new SQLiteCommand(connection))
{
cmd.CommandText = "SELECT * FROM SEARCHWORD";
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
words.Add(reader[0].ToString());
}
}
}
return words;
}
private string Sanitize(string text)
{
if (text == null)
return text;
return text.Replace("'", "");
}
public List<ScrapedVideo> SearchVideos(string query)
{
var videos = new List<ScrapedVideo>();
using (var cmd = new SQLiteCommand(connection))
{
cmd.CommandText = String.Format("SELECT * FROM VIDEO WHERE IsFavourite = 1 AND Title LIKE '%{0}%'", Sanitize(query));
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
videos.Add(new ScrapedVideo
{
Url = reader["Url"].ToString(),
Duration = TimeSpan.FromSeconds(Convert.ToInt32(reader["Duration"])),
ImageUrl = reader["ImageUrl"] != DBNull.Value ? reader["ImageUrl"].ToString() : null,
PlayUrl = reader["PlayUrl"] != DBNull.Value ? reader["PlayUrl"].ToString() : null,
Title = reader["Title"] != DBNull.Value ? reader["Title"].ToString() : null,
Quality = reader["Quality"] != DBNull.Value ? Convert.ToInt32(reader["Quality"]) : 100
});
}
}
}
return videos;
}
public void DeleteFromFavourite(ScrapedVideo video)
{
using (var cmd = new SQLiteCommand(connection))
{
cmd.CommandText = String.Format("DELETE FROM VIDEO WHERE Url = '{0}'", Sanitize(video.Url));
cmd.ExecuteNonQuery();
}
}
public List<ScrapedVideo> GetAllFavourites()
{
var videos = new List<ScrapedVideo>();
using (var cmd = new SQLiteCommand(connection))
{
cmd.CommandText = "SELECT * FROM VIDEO WHERE IsFavourite = 1";
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
{
videos.Add(new ScrapedVideo
{
Url = reader["Url"].ToString(),
Duration = TimeSpan.FromSeconds(Convert.ToInt32(reader["Duration"])),
ImageUrl = reader["ImageUrl"] != DBNull.Value ? reader["ImageUrl"].ToString() : null,
PlayUrl = reader["PlayUrl"] != DBNull.Value ? reader["PlayUrl"].ToString() : null,
Title = reader["Title"] != DBNull.Value ? reader["Title"].ToString() : null,
Quality = reader["Quality"] != DBNull.Value ? Convert.ToInt32(reader["Quality"]): 100
});
}
}
}
return videos;
}
public bool IsFavourite(ScrapedVideo video)
{
using (var cmd = new SQLiteCommand(connection))
{
cmd.CommandText = String.Format("SELECT COUNT(*) FROM VIDEO WHERE Url = '{0}'", Sanitize(video.Url));
var count = Convert.ToInt32(cmd.ExecuteScalar());
return count > 0;
}
}
}
}