/// <summary> /// Returns the finished version of the series if it exists. If no series with status=finished could be found, it returns null. /// </summary> /// <param name="SerieName">The name of the series</param> /// <returns></returns> public static CLSerie GetFinishedSerie(string SerieName) { ConfigurationManager manager = new ConfigurationManager(); if (File.Exists(LocalSeriesPath + SerieName + ".json")) { string JsonString = File.ReadAllText(LocalSeriesPath + SerieName + ".json"); CLSerie Serie = manager.GetSeriesFromJson(JObject.Parse(JsonString)); if (Serie.status == "finished") { return(Serie); } } else { string JStrSerie = manager.GetOneSerie(SerieName); CLSerie Serie = manager.GetSeriesFromJson((JObject)JObject.Parse(JStrSerie)["data"][0]); if (Serie.status == "finished") { return(Serie); } } return(null); }
void UpdateTextBoxAutoComplete() { AutoCompleteStringCollection COLSeries = new AutoCompleteStringCollection(); ConfigurationManager manager = new ConfigurationManager(); DirectoryInfo info = new DirectoryInfo(StaticInfo.LocalSeriesPath); foreach (FileInfo file in info.GetFiles()) { JObject JOserie = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(File.ReadAllText(StaticInfo.LocalSeriesPath + file.Name)); CLSerie serie = manager.GetSeriesFromJson(JOserie); COLSeries.Add(serie.name); } //#1 start: Adds autocompletion options to the textbox. They are taken from the GetSerieNames method which gets it from //the database if (StaticInfo.CurrentDatabase != null) { List <string> serieNames = GetSerieNames(); foreach (string name in serieNames) { if (!COLSeries.Contains(name)) { COLSeries.Add(name); } } } //#1 end. txt_Search.AutoCompleteCustomSource = COLSeries; }
private void lstVIew_ItemActivated(object sender, EventArgs e) { //This is needed incase the user tries to select multiple series and press ENTER, you can only upload one serie at a time. if (StaticInfo.CurrentDatabase == null) { MessageBox.Show("There doesent seem to be a functional database configured. Please configure one and try again."); return; } if (string.IsNullOrWhiteSpace(StaticInfo.CurrentDatabase.DatabaseName)) { MessageBox.Show("There doesent seem to be a functional database configured. Please configure one and try again."); return; } if (lstView_SeriesFromAPI.SelectedItems.Count > 1) { MessageBox.Show("Vennligst bare velg en ting du vil laste opp"); return; } if (lstView_SeriesFromAPI.SelectedItems.Count == 0) { MessageBox.Show("Vennligst velg en ting du vil laste opp"); return; } CLSerie serie = currentList.Find(x => x.name == lstView_SeriesFromAPI.SelectedItems[0].Name); AddSeries addSeries = new AddSeries(serie); addSeries.ShowDialog(); }
/// <summary> /// returns all the databases in the Settings /// working or not. GetFunctionalDatabases() only returns functional databases /// </summary> /// <returns>All databases in the Settings.txt file, connectable or not</returns> public List <CLSerie> GetSeries(string SearchQuery) { HttpClient client = new HttpClient(); List <CLSerie> Series = new List <CLSerie>(); client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/vnd.api+json")); using (HttpResponseMessage response = client.GetAsync("https://kitsu.io/api/edge/anime?filter[text]=" + SearchQuery).Result) { if (response.IsSuccessStatusCode) { var x = response.Content.ReadAsStringAsync(); JObject y = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(x.Result); var FirstSerie = y.Children().Children().Children().ToArray(); foreach (JToken child in FirstSerie) { try { JObject child2 = (JObject)child; if (child2.TryGetValue("id", out JToken JSerie)) { //Write child2 to file and use GetSeriesFromJson(JObject JSerie) to read it again. CLSerie add = GetSeriesFromJson(child2); Series.Add(add); if (add.status != "finished") { List <string> SeriesToCheck = new List <string>(); JArray jArray = (JArray)Newtonsoft.Json.JsonConvert.DeserializeObject(File.ReadAllText(StaticInfo.CheckSeriesPath)); if (jArray != null) { foreach (var jToken in jArray) { SeriesToCheck.Add(jToken.ToString()); } } if (!SeriesToCheck.Contains(add.name)) { SeriesToCheck.Add(add.name); } string writeToFile = Newtonsoft.Json.JsonConvert.SerializeObject(SeriesToCheck); File.WriteAllText(StaticInfo.CheckSeriesPath, writeToFile); } File.WriteAllText(StaticInfo.FolderPath + "Series\\" + add.name + ".json", child2.ToString()); } } catch (Exception ex) { //The conversion might fail it there is only one item in child etc. This happends every time so we just try catch the expected error. } } } } return(Series); }
public CLSerie GetSeriesFromJson(JObject JSerie) { JToken attributes = JSerie.GetValue("attributes"); JObject jObject = (JObject)attributes; CLSerie add = Newtonsoft.Json.JsonConvert.DeserializeObject <CLSerie>(jObject.ToString()); add.linkToEpisodes = JSerie.SelectToken("relationships.episodes.links.related").ToString(); add.linkToGenres = JSerie.SelectToken("relationships.genres.links.related").ToString(); return(add); }
//public void UpdateDBEntry(List<CLSerie> Serie) //{ // DatabaseConfiguration dbconf = new DatabaseConfiguration(); // MySqlConnection con = new MySqlConnection(dbconf.GetConnectionstring()); // MySqlCommand cmd = new MySqlCommand(); // string SQL = "UPDATE Series(EpisodeName,EpisodeCount,AgeRating,NSFW,Synopsis,TotalShowLength,EpisodeLength,EpisodeNumber,SeasonNumber,ShowName,TimeStamp,Genres,Status) " + // "VALUES(@Name,@EpisodeCount,@AgeRating,@NSFW,@Synopsis,@TotalShowLength,@Length,@EpisodeNumber,@SeasonNumber,@ShowName,@TimeStamp,@Genres,@Status),("; // MySqlParameter parName = new MySqlParameter() // { // ParameterName = "@Name", // Value = Serie.episodeName // }; // cmd.Parameters.Add(parName); // MySqlParameter parEpisodeCount = new MySqlParameter() // { // ParameterName = "@EpisodeCount", // Value = Serie.episodeCount // }; // cmd.Parameters.Add(parEpisodeCount); // MySqlParameter parAgeRating = new MySqlParameter() // { // ParameterName = "@AgeRating", // Value = Serie.ageRating // }; // cmd.Parameters.Add(parAgeRating); // MySqlParameter parNSFW = new MySqlParameter() // { // ParameterName = "@NSFW", // Value = Serie.NSFW // }; // cmd.Parameters.Add(parNSFW); // MySqlParameter parSynopsis = new MySqlParameter() // { // ParameterName = "@Synopsis", // Value = Serie.synopsis // }; // cmd.Parameters.Add(parSynopsis); // MySqlParameter parTotalShowLength = new MySqlParameter() // { // ParameterName = "@TotalShowLength", // Value = Serie.totalLength // }; // cmd.Parameters.Add(parTotalShowLength); // MySqlParameter parLength = new MySqlParameter() // { // ParameterName = "@Length", // Value = Serie.length // }; // cmd.Parameters.Add(parLength); // MySqlParameter parEpisodeNumber = new MySqlParameter() // { // ParameterName = "@EpisodeNumber", // Value = Serie.EpisodeNumber // }; // cmd.Parameters.Add(parEpisodeNumber); // MySqlParameter parSeasonNumber = new MySqlParameter() // { // ParameterName = "@SeasonNumber", // Value = Serie.seasonNumber // }; // cmd.Parameters.Add(parSeasonNumber); // MySqlParameter parShowName = new MySqlParameter() // { // ParameterName = "@ShowName", // Value = Serie.name // }; // cmd.Parameters.Add(parShowName); // MySqlParameter parGenres = new MySqlParameter() // { // ParameterName = "@Genres", // Value = Serie.genres // }; // cmd.Parameters.Add(parGenres); // MySqlParameter parStatus = new MySqlParameter() // { // ParameterName = "@Status", // Value = Serie.status // }; // SQL += " WHERE ID = '" + Serie.DBID.ToString() + "'"; //} public List <CLEpisode> GetEpisodes(CLSerie serie, int startEpisode, int endEpisode) { HttpClient client = new HttpClient(); client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/vnd.api+json")); List <CLEpisode> CLEpisodes = new List <CLEpisode>(); int Episodes = AmountBetweenNumbers(startEpisode, endEpisode); int RunXTimes = AmountOfTimes(Episodes); int offset; if (startEpisode == 0) { offset = 0; } else { offset = startEpisode - 1; } for (int i = 0; RunXTimes > i; i++) {//There are a bunch of integers going up and down, look into it and figure it out if nessecary. That will be just as hard as me trying to explain wtf is //going on. int Limitint = LowerIntTo20(Episodes); Episodes -= Limitint; string Link = serie.linkToEpisodes + "?&[page]offset=" + offset + "&[page]limit=" + Limitint.ToString(); using (HttpResponseMessage response = client.GetAsync(Link).Result) { offset += Limitint; if (response.IsSuccessStatusCode) { Task <string> jsonString = response.Content.ReadAsStringAsync(); string ree = jsonString.Result; JToken allEpisodesToken = JObject.Parse(ree).SelectToken("data"); JArray AllEpisodesJArray = (JArray)allEpisodesToken; foreach (JObject episode in AllEpisodesJArray) { JToken jTokenEpisode = episode.SelectToken("attributes"); JObject jObjectEpisode = (JObject)jTokenEpisode; CLEpisode add = Newtonsoft.Json.JsonConvert.DeserializeObject <CLEpisode>(jObjectEpisode.ToString()); add.showName = serie.name; add.linkToEpisode = Link; CLEpisodes.Add(add); } } } } return(CLEpisodes); }
private void Startup(CLSerie serie) { lbl_Heading.Text = serie.name + ", which episodes have you watched ?"; currentSerie = serie; ConfigurationManager manager = new ConfigurationManager(); int currentEpisode = manager.LatestEpisode(serie.name) + 1; if (currentEpisode != 0) { txt_EpisodesWatched.Text = currentEpisode.ToString() + "-" + currentEpisode.ToString(); } else { txt_EpisodesWatched.Text = "1-1"; } }
void AddSerie(CLSerie serie) { //Get the datetime from textbox ConfigurationManager manager = new ConfigurationManager(); List <int> integers = GetTwoInts(txt_EpisodesWatched.Text); List <CLEpisode> episodes = manager.GetEpisodes(serie, integers[0], integers[1]); CultureInfo info = new CultureInfo("nb-NO"); if (DateTime.TryParse(txt_TimeStamp.Text, info, DateTimeStyles.None, out DateTime result)) { manager.UploadEpisodes(episodes, serie, result); } else { manager.UploadEpisodes(episodes, serie, DateTime.Now); } }
private void txt_Search_KeyDown(object sender, KeyEventArgs e) { if (e.Shift && e.KeyCode == Keys.Enter && File.Exists(StaticInfo.LocalSeriesPath + txt_Search.Text + ".json")) { ConfigurationManager manager = new ConfigurationManager(); JObject JOserie = (JObject)Newtonsoft.Json.JsonConvert.DeserializeObject(File.ReadAllText(StaticInfo.LocalSeriesPath + txt_Search.Text + ".json")); CLSerie serie = manager.GetSeriesFromJson(JOserie); AddSeries addSeries = new AddSeries(serie); addSeries.ShowDialog(); } else if (e.KeyCode == Keys.Enter) { btn_ConfirmSearch.PerformClick(); } else if (e.Control && e.KeyCode == Keys.L) { LatestWatched watched = new LatestWatched(); watched.ShowDialog(); } }
List <ListViewItem> SetShowHistory() { List <CLSerie> WholeHistory = new List <CLSerie>(); DatabaseConfiguration dbconf = new DatabaseConfiguration(); MySqlConnection con = new MySqlConnection(dbconf.GetConnectionstring()); MySqlCommand cmd = new MySqlCommand("SELECT * FROM Series", con); con.Open(); MySqlDataReader reader = cmd.ExecuteReader(); List <string> boolFromDB = new List <string>(); while (reader.Read()) { CLSerie serie = new CLSerie() { episodeName = reader["Name"].ToString(), ageRating = reader["AgeRating"].ToString(), synopsis = reader["Synopsis"].ToString(), seasonNumber = reader["SeasonNumber"].ToString(), showName = reader["ShowName"].ToString(), genres = reader["Genres"].ToString().Split(',').ToList() }; if (int.TryParse(reader["id"].ToString(), out int DBID)) { serie.DBID = DBID; } if (int.TryParse(reader["EpisodeCount"].ToString(), out int EPCount)) { serie.episodeCount = EPCount; } if (int.TryParse(reader["TotalShowLength"].ToString(), out int TotShowLength)) { serie.totalLength = TotShowLength; } if (int.TryParse(reader["Length"].ToString(), out int EpLength)) { serie.length = EpLength; } if (int.TryParse(reader["EpisodeNumber"].ToString(), out int EpNum)) { serie.EpisodeNumber = EpNum; } if (DateTime.TryParse(reader["TimeStamp"].ToString(), out DateTime TimeStamp)) { serie.TimeStamp = TimeStamp; } WholeHistory.Add(serie); boolFromDB.Add(reader["NSFW"].ToString()); } //Change it so that there is a button to use all episodes, not just current date. This will unlock abillity to sort the items from 1 //spesific date by name and (redundant) date con.Close(); for (int i = 0; WholeHistory.Count > i; i++) { if (boolFromDB[i] == "1") { WholeHistory[i].NSFW = true; } else { WholeHistory[i].NSFW = false; } } List <ListViewItem> items = new List <ListViewItem>(); foreach (CLSerie episode in WholeHistory) { ListViewItem item = new ListViewItem(episode.showName); item.SubItems.Add(episode.EpisodeNumber.ToString()); item.SubItems.Add(episode.seasonNumber); item.SubItems.Add(episode.TimeStamp.ToString()); items.Add(item); } return(items); }
public void UploadEpisodes(List <CLEpisode> episodes, CLSerie serie, DateTime timestamp) { CultureInfo info = CultureInfo.CreateSpecificCulture("nb-NO"); DatabaseConfiguration dbconf = new DatabaseConfiguration(); MySqlConnection con = new MySqlConnection(dbconf.GetConnectionstring()); MySqlCommand cmd = new MySqlCommand(); string SQL = "";//Fix insert or update //if(InstOrUpdate == "insert") SQL = "Insert into Series(Name,EpisodeCount,AgeRating,NSFW,Synopsis,TotalShowLength,Length,EpisodeNumber,SeasonNumber,ShowName,TimeStamp,Genres,Status) VALUES("; int i = 0; int count = 1; foreach (CLEpisode episode in episodes) { i++; //I need closing parentesies if it is the last iteration of the loop if (count == episodes.Count) { SQL += "@Name" + i.ToString() + ",@EpisodeCount" + i.ToString() + ",@AgeRating" + i.ToString() + ",@NSFW" + i.ToString() + ",@Synopsis" + i.ToString() + ",@TotalShowLength" + i.ToString() + ",@Length" + i.ToString() + ",@EpisodeNumber" + i.ToString() + ",@SeasonNumber" + i.ToString() + ",@ShowName" + i.ToString() + ",@TimeStamp" + i.ToString() + ",@Genres" + i.ToString() + ",@Status" + i.ToString() + ")"; } else { SQL += "@Name" + i.ToString() + ",@EpisodeCount" + i.ToString() + ",@AgeRating" + i.ToString() + ",@NSFW" + i.ToString() + ",@Synopsis" + i.ToString() + ",@TotalShowLength" + i.ToString() + ",@Length" + i.ToString() + ",@EpisodeNumber" + i.ToString() + ",@SeasonNumber" + i.ToString() + ",@ShowName" + i.ToString() + ",@TimeStamp" + i.ToString() + ",@Genres" + i.ToString() + ",@Status" + i.ToString() + "),("; } MySqlParameter parName = new MySqlParameter() { ParameterName = "@Name" + i.ToString(), Value = episode.episodeName }; cmd.Parameters.Add(parName); MySqlParameter parEpisodeCount = new MySqlParameter() { ParameterName = "@EpisodeCount" + i.ToString(), Value = serie.episodeCount }; cmd.Parameters.Add(parEpisodeCount); MySqlParameter parAgeRating = new MySqlParameter() { ParameterName = "@AgeRating" + i.ToString(), Value = serie.ageRating }; cmd.Parameters.Add(parAgeRating); MySqlParameter parNSFW = new MySqlParameter() { ParameterName = "@NSFW" + i.ToString(), Value = serie.NSFW }; cmd.Parameters.Add(parNSFW); MySqlParameter parSynopsis = new MySqlParameter() { ParameterName = "@Synopsis" + i.ToString(), Value = episode.synopsis }; cmd.Parameters.Add(parSynopsis); MySqlParameter parTotalShowLength = new MySqlParameter() { ParameterName = "@TotalShowLength" + i.ToString(), Value = serie.totalLength }; cmd.Parameters.Add(parTotalShowLength); MySqlParameter parLength = new MySqlParameter() { ParameterName = "@Length" + i.ToString(), Value = episode.length }; cmd.Parameters.Add(parLength); MySqlParameter parEpisodeNumber = new MySqlParameter() { ParameterName = "@EpisodeNumber" + i.ToString(), Value = episode.EpisodeNumber }; cmd.Parameters.Add(parEpisodeNumber); MySqlParameter parSeasonNumber = new MySqlParameter() { ParameterName = "@SeasonNumber" + i.ToString(), Value = episode.seasonNumber }; cmd.Parameters.Add(parSeasonNumber); MySqlParameter parShowName = new MySqlParameter() { ParameterName = "@ShowName" + i.ToString(), Value = serie.name }; cmd.Parameters.Add(parShowName); MySqlParameter parTimeStamp = new MySqlParameter() { ParameterName = "@TimeStamp" + i.ToString(), Value = timestamp }; cmd.Parameters.Add(parTimeStamp); MySqlParameter parGenres = new MySqlParameter() { ParameterName = "@Genres" + i.ToString(), Value = serie.genres }; cmd.Parameters.Add(parGenres); MySqlParameter parStatus = new MySqlParameter() { ParameterName = "@Status" + i.ToString(), Value = serie.status }; cmd.Parameters.Add(parStatus); count++; } cmd.Connection = con; cmd.CommandText = SQL; con.Open(); cmd.ExecuteNonQuery(); con.Close(); }
public AddSeries(CLSerie Serie) { InitializeComponent(); Startup(Serie); }
/// <summary> /// Pulls episodes that has a status that is not finished from the database and checks if there is an updated version and updates them. /// </summary> private static void UpdateDB(string NOTREADY) { loop2: Thread.Sleep(100); if (CurrentDatabase == null) { goto loop2; } DatabaseConfiguration dbconf = new DatabaseConfiguration(); MySqlConnection con = new MySqlConnection(dbconf.GetConnectionstring()); MySqlCommand cmd = new MySqlCommand("SELECT * From Series where NOT Status = 'finished' OR Status is NULL", con); con.Open(); MySqlDataReader reader = cmd.ExecuteReader(); List <CLSerie> OutdatedEpisodes = new List <CLSerie>(); while (reader.Read()) { CLSerie OutdatedEpisode = new CLSerie() { episodeName = reader["Name"].ToString(), episodeCount = ImprovedIntTryParse(reader["EpisodeCount"].ToString()), ageRating = reader["AgeRating"].ToString(), synopsis = reader["Synopsis"].ToString(), totalLength = ImprovedIntTryParse(reader["TotalShowLength"].ToString()), length = ImprovedIntTryParse(reader["Length"].ToString()), EpisodeNumber = ImprovedIntTryParse(reader["EpisodeNumber"].ToString()), seasonNumber = reader["SeasonNumber"].ToString(), showName = reader["ShowName"].ToString(), genres = reader["Genres"].ToString().Split(',').ToList(), name = reader["ShowName"].ToString(), DBID = (int)reader["ID"],//this is the database ID, it wont ever be null because of how mysql works. }; if (reader["NSFW"].ToString() == "1") { OutdatedEpisode.NSFW = true; } else { OutdatedEpisode.NSFW = false; } OutdatedEpisodes.Add(OutdatedEpisode); } con.Close(); if (OutdatedEpisodes.Count == 0) { return; } List <CLSerie> ToUpdate = new List <CLSerie>(); foreach (CLSerie serie in OutdatedEpisodes) { CLSerie Finished = GetFinishedSerie(serie.showName); if (Finished != null) { ToUpdate.Add(Finished); } } if (ToUpdate.Count != 0) { ConfigurationManager manager = new ConfigurationManager(); //manager.UploadEpisodes(); } }