write-tweet.ts 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. import { Component } from "@angular/core";
  2. import {
  3. IonicPage,
  4. NavController,
  5. NavParams,
  6. LoadingController
  7. } from "ionic-angular";
  8. import { FormBuilder, Validators, FormGroup } from "@angular/forms";
  9. import { TwitterApiProvider } from "../../providers/twitter-api/twitter-api";
  10. import { HttpClient } from "@angular/common/http";
  11. import { Storage } from "@ionic/storage";
  12. /**
  13. * Generated class for the WriteTweetPage page.
  14. *
  15. * See https://ionicframework.com/docs/components/#navigation for more info on
  16. * Ionic pages and navigation.
  17. */
  18. @IonicPage()
  19. @Component({
  20. selector: "page-write-tweet",
  21. templateUrl: "write-tweet.html"
  22. })
  23. export class WriteTweetPage {
  24. tweet: FormGroup;
  25. constructor(
  26. public navCtrl: NavController,
  27. public navParams: NavParams,
  28. private formBuilder: FormBuilder,
  29. private twitter: TwitterApiProvider,
  30. private loadingCtrl: LoadingController,
  31. private http: HttpClient,
  32. private storage: Storage
  33. ) {
  34. this.tweet = this.formBuilder.group({
  35. text: ["", Validators.maxLength(140)],
  36. p2p: [false]
  37. });
  38. }
  39. ionViewDidLoad() {}
  40. get tweetCharProgress() {
  41. let progress = 1 - this.tweet.value["text"].length / 140;
  42. let radius = 8;
  43. let circumference = Math.PI * radius * 2;
  44. return progress * circumference;
  45. }
  46. async submitTweet() {
  47. let loading = this.loadingCtrl.create();
  48. loading.present();
  49. if (this.tweet.value.p2p) {
  50. await this.postToIpfs(this.tweet.value["text"]);
  51. } else {
  52. await this.twitter.tweet(this.tweet.value["text"]);
  53. }
  54. loading.dismiss();
  55. this.navCtrl.pop();
  56. }
  57. private async postToIpfs(text) {
  58. let url = "https://ipfs.infura.io:5001/api/v0/add";
  59. let data = {
  60. text: this.tweet.value["text"].trim(),
  61. userId: await this.storage.get("userId"),
  62. timestamp: Date.now()
  63. };
  64. let formData = new FormData();
  65. formData.append("data", JSON.stringify(data));
  66. let res = await this.http.post(url, formData).toPromise();
  67. console.log(res["Hash"]);
  68. }
  69. }