write-tweet.ts 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  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 { Storage } from "@ionic/storage";
  11. import { P2pStorageIpfsProvider } from "../../providers/p2p-storage-ipfs/p2p-storage-ipfs";
  12. import { P2pDatabaseGunProvider } from "../../providers/p2p-database-gun/p2p-database-gun";
  13. @IonicPage()
  14. @Component({
  15. selector: "page-write-tweet",
  16. templateUrl: "write-tweet.html"
  17. })
  18. export class WriteTweetPage {
  19. tweet: FormGroup;
  20. retweetId: string;
  21. retweet;
  22. constructor(
  23. public navCtrl: NavController,
  24. public navParams: NavParams,
  25. private formBuilder: FormBuilder,
  26. private twitter: TwitterApiProvider,
  27. private loadingCtrl: LoadingController,
  28. private storage: Storage,
  29. private ipfs: P2pStorageIpfsProvider,
  30. private gun: P2pDatabaseGunProvider
  31. ) {
  32. this.retweetId = this.navParams.get("tweetId");
  33. this.tweet = this.formBuilder.group({
  34. text: ["", Validators.maxLength(140)],
  35. p2p: [false]
  36. });
  37. }
  38. async ionViewDidLoad() {
  39. if (this.retweetId) {
  40. this.retweet = await this.twitter.fetchTweet(this.retweetId);
  41. }
  42. }
  43. get tweetCharProgress() {
  44. let progress = 1 - this.tweet.value["text"].length / 140;
  45. let radius = 8;
  46. let circumference = Math.PI * radius * 2;
  47. return progress * circumference;
  48. }
  49. async submitTweet() {
  50. const loading = this.loadingCtrl.create();
  51. loading.present();
  52. if (this.tweet.value.p2p) {
  53. const tweet = await this.buildPrivateTweet();
  54. const res = await this.ipfs.storeTweet(tweet);
  55. this.gun.storeLastTweetHashForUser(
  56. tweet.user_id,
  57. res["Hash"],
  58. tweet.created_at
  59. );
  60. } else {
  61. await this.twitter.tweet(this.tweet.value["text"], this.retweet);
  62. }
  63. loading.dismiss();
  64. this.navCtrl.pop();
  65. }
  66. private async buildPrivateTweet() {
  67. return {
  68. full_text: this.tweet.value["text"].trim(),
  69. user_id: await this.storage.get("userId"),
  70. created_at: Date.now(),
  71. private_tweet: true,
  72. entities: {}
  73. };
  74. }
  75. }