//Fetches information from 'VNDB.org' private int fetchInformation(bool Update) { //This basically fetches information from vndb using the API //First it establishes a connection and logs in //using the entered LoginName or a random loginname //Then it request basic vn information //and deserializes the jsonresponse //After that it displays the reponse in //the matching textboxes //Now it requets detailed information //deserializes it again.... //and stores information in matching controls //Now it requests tags //deserializes them //and stores them in txtTags-Textbox //mind you: The tags are all in int format(only ID's)! //Now we read our tags-dump //deserialize them //and change our int tags to the matching string tags //That's it. Connection conn = new Connection(); string nice = " "; int id = 0, vns_number = 0; Random rnd = new Random(); int error = 0; int login_id = rnd.Next(1000); conn.Open(); if (txtLoginName.Text != "") error = conn.Login(txtLoginName.Text); else error = conn.Login(Convert.ToString("asd" + login_id)); if (error == 1) { MessageBox.Show("Error while logging in. Response: " + conn.jsonresponse, "Login Error", MessageBoxButtons.OK); return 0; } if (Update == false) error = conn.Query("get vn basic (id = " + txtID.Text + " )"); //request basic information else { foreach (Visual_Novel novel in VNS) { if (novel.englishName == lbVN.SelectedItem.ToString().Trim()) { id = novel.id; error = conn.Query("get vn basic (id = " + id + " )"); break; } vns_number++; } } if (error == 1) { MessageBox.Show("Error while requesting information. Response: " + conn.jsonresponse, "Query Error", MessageBoxButtons.OK); return 0; } BasicRootObject basic_information = Newtonsoft.Json.JsonConvert.DeserializeObject<BasicRootObject>(conn.jsonresponse); //deserialize it List<BasicItem> basic_item = basic_information.items; if (Update == false) { txtName.Text = basic_item[0].title; txtOriginalName.Text = basic_item[0].original; txtVNID.Text = Convert.ToString(basic_item[0].id); txtTags.Text = ""; } else { VNS[vns_number].englishName = basic_item[0].title; VNS[vns_number].originalName = basic_item[0].original; VNS[vns_number].id = basic_item[0].id; } if (Update == false) error = conn.Query("get vn details (id = " + txtID.Text + " )"); else { error = conn.Query("get vn details (id = " + id + " )"); } if (error == 1) { MessageBox.Show("Error while requesting information. Response: " + conn.jsonresponse, "Query Error", MessageBoxButtons.OK); return 0; } DetailsRootObject detailed_information = Newtonsoft.Json.JsonConvert.DeserializeObject<DetailsRootObject>(conn.jsonresponse); //deserialize it List<DetailsItem> details_item = detailed_information.items; if (Update == false) { rtbDescription.Text = details_item[0].description; pcbImages.ImageLocation = details_item[0].image; } else VNS[vns_number].description = details_item[0].description; if (Update == false) error = conn.Query("get character details (vn = " + txtID.Text + " )"); else error = conn.Query("get character details (vn = " + id + " )"); if (error == 1) { MessageBox.Show("Error while requesting information. Response: " + conn.jsonresponse, "Query Error", MessageBoxButtons.OK); return 0; } CharacterRootObject character_information = Newtonsoft.Json.JsonConvert.DeserializeObject<CharacterRootObject>(conn.jsonresponse); List<CharacterItem> character_item = character_information.items; character_images = new List<string>(); character_images.Clear(); foreach (CharacterItem item in character_item) { if (item.image != null) character_images.Add(item.image); } if (Update == false) error = conn.Query("get vn tags (id = " + txtID.Text + " )"); else error = conn.Query("get vn tags (id = " + id + " )"); if (error == 1) { MessageBox.Show("Error while requesting information. Response: " + conn.jsonresponse, "Query Error", MessageBoxButtons.OK); return 0; } TagsRootObject tags_information = Newtonsoft.Json.JsonConvert.DeserializeObject<TagsRootObject>(conn.jsonresponse); //deserialize them List<TagsItem> tags_item = tags_information.items; if (Update == false) { for (int i = 0; i < tags_item[0].tags.Count; i++) //Store them in textbox { if (txtTags.Text == "") nice = ""; else nice = " "; txtTags.Text = txtTags.Text + nice + Convert.ToString(tags_item[0].tags[i][0]); } } else { VNS[vns_number].tags = ""; for (int i = 0; i < tags_item[0].tags.Count; i++) //Store them in textbox { if (VNS[vns_number].tags == "") nice = ""; else nice = " "; VNS[vns_number].tags = VNS[vns_number].tags + nice + Convert.ToString(tags_item[0].tags[i][0]); } } if (plain_tags == null) //Read tag-dump and deserialize it (only once -> needs time!) plain_tags = JsonConvert.DeserializeObject<List<WrittenTagsRootObject>>(File.ReadAllText(@"tags.json")); string[] tags; if (Update == false) tags = txtTags.Text.Split(' '); else tags = VNS[vns_number].tags.Split(' '); if (Update == false) txtTags.Text = ""; else VNS[vns_number].tags = ""; foreach (string tmp in tags) //Change our 'int'-tags into matching 'string'-tags { foreach (WrittenTagsRootObject tmp2 in plain_tags) { if ((((Convert.ToInt32(tmp) == tmp2.id) && (tmp2.cat == "ero") && (chkSexual.Checked == true)) || ((Convert.ToInt32(tmp) == tmp2.id) && (tmp2.cat == "cont") && (chkContent.Checked == true)) || ((Convert.ToInt32(tmp) == tmp2.id) && (tmp2.cat == "tech") && (chkTechnical.Checked == true))) && Update == false) { if (txtTags.Text == "") nice = ""; else nice = ", "; txtTags.Text = txtTags.Text + nice + tmp2.name; } else if ((((Convert.ToInt32(tmp) == tmp2.id) && (tmp2.cat == "ero") && (chkSexual.Checked == true)) || ((Convert.ToInt32(tmp) == tmp2.id) && (tmp2.cat == "cont") && (chkContent.Checked == true)) || ((Convert.ToInt32(tmp) == tmp2.id) && (tmp2.cat == "tech") && (chkTechnical.Checked == true))) && Update == true) { if (VNS[vns_number].tags == "") nice = ""; else nice = ", "; VNS[vns_number].tags = VNS[vns_number].tags + nice + tmp2.name; } } } conn.CloseConnection(); return vns_number; }
public ContinuationAction MessageReceived(ListenerContext e) { // You can inherit from MessageExtendedInformation if you wish, // the likely scenario for this is if you support plugins yourself. var extended = e.ReceivedInformation.Message.GetExtendedInformation<MessageExtendedInformation>(); var replyExtended = extended.Invert(null); string workflowName; if (extended.Message.Title.StartsWith("START: ", StringComparison.OrdinalIgnoreCase)) { workflowName = extended.Message.Title.Substring(7).Trim(); } else { return ContinuationAction.Continue; // Allow other plugins to execute. } // Get the message body. string body; try { using (var bodyStream = e.ReceivedInformation.Message.OpenView(new ContentType("text/plain"))) { if (bodyStream != null) { // Another plugin may have moved the position within the stream. bodyStream.Seek(0, System.IO.SeekOrigin.Begin); using (var sr = new StreamReader(bodyStream)) { body = sr.ReadToEnd().Trim(); } } else { body = string.Empty; } } } catch { // TODO: Logging etc. return ContinuationAction.Continue; // Allow other plugins to execute. } // TODO: Get data from the body somehow. // You can also look into attachments for e.g. InfoPath forms: // e.ReceivedInformation.Message.Attachments try { var con = new Connection(); var cs = new ConnectionSetup(); cs.ParseConnectionString(_k2ServerConnectionString); try { Exception lastException = null; con.Open(cs); // AlternateIdentities are identities with the same email // address, most likely due badly configured claims. for (var i = 0; i < e.AlternateIdentities.Length; i++) { var alt = e.AlternateIdentities[i]; string fqn; // Search for a FQN in the identity. if (alt.TryGetValue("Fqn", out fqn)) { try { con.RevertUser(); con.ImpersonateUser(fqn); var pi = con.CreateProcessInstance(workflowName); // TODO: Set data in the workflow. con.StartProcessInstance(pi); // Tell the user the workflow was started. _destination.ReplyTo(e.ReceivedInformation.Message, new MessageBodyReader("text/plain", "Workflow started"), replyExtended); e.ReceivedInformation.Commit(); // Indicate we were able to handle the message. return ContinuationAction.Halt; // Stop other plugins from executing. } catch (Exception ex) { // TODO: Logging etc. // This isn't nessecarily a complete failure, // one of the other alternate identities may be // able to action this. lastException = ex; } } } string message; if (lastException != null) { // Identities exist, but the user likely doesn't have rights. message = lastException.ToString(); } else { // No identities exist. message = "Could not find a K2 user for your email address."; } message = "The workflow could not be started: " + message; // Respond with the error. _destination.ReplyTo(e.ReceivedInformation.Message, new MessageBodyReader("text/plain", message), replyExtended); e.ReceivedInformation.Commit(); // Indicate we were able to handle the message. return ContinuationAction.Halt; // Stop other plugins from executing. } finally { if (con != null) { con.Close(); con.Dispose(); } } } catch { // TODO: Logging etc. return ContinuationAction.Continue; // Allow other plugins to execute. } }