home.ts 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import { Component } from "@angular/core";
  2. import {
  3. IonicPage,
  4. NavController,
  5. MenuController,
  6. InfiniteScroll
  7. } from "ionic-angular";
  8. import { Storage } from "@ionic/storage";
  9. import { TwitterApiProvider } from "../../providers/twitter-api/twitter-api";
  10. import { WriteTweetPage } from "../write-tweet/write-tweet";
  11. import { P2pDatabaseGunProvider } from "../../providers/p2p-database-gun/p2p-database-gun";
  12. import { P2pStorageIpfsProvider } from "../../providers/p2p-storage-ipfs/p2p-storage-ipfs";
  13. @IonicPage()
  14. @Component({
  15. selector: "page-home",
  16. templateUrl: "home.html"
  17. })
  18. export class HomePage {
  19. menuController: MenuController;
  20. data: any[] = [];
  21. constructor(
  22. public navCtrl: NavController,
  23. private twitter: TwitterApiProvider,
  24. private menuCtrl: MenuController,
  25. private gun: P2pDatabaseGunProvider,
  26. private ipfs: P2pStorageIpfsProvider,
  27. private storage: Storage
  28. ) {}
  29. ionViewDidLoad() {
  30. this.menuCtrl.enable(true, "sideNav");
  31. }
  32. async ionViewDidEnter() {
  33. this.twitter
  34. .fetchHomeFeed()
  35. .then(
  36. res =>
  37. (this.data = this.data
  38. .concat(res.data)
  39. .sort((a, b) => this.sortByDateAsc(a, b)))
  40. );
  41. // this.gun
  42. // .getLastTweetFromUser("username")
  43. // .then(hash => this.ipfs.fetchTweet(hash))
  44. // .then(tweet => this.addUserObject(tweet))
  45. // .then(
  46. // res =>
  47. // (this.data = this.data
  48. // .concat(res)
  49. // .sort((a, b) => this.sortByDateAsc(a, b)))
  50. // );
  51. this.twitter
  52. .fetchFriends(await this.storage.get("userId"))
  53. .then(res => console.log(res));
  54. }
  55. doRefresh(refresher) {
  56. this.twitter.fetchHomeFeed().then(res => {
  57. this.data = res.data;
  58. console.log(res);
  59. refresher.complete();
  60. });
  61. }
  62. loadMore(infiniteScroll: InfiniteScroll) {
  63. this.twitter
  64. .fetchHomeFeedSince(this.data[this.data.length - 1].id)
  65. .then(res => {
  66. this.data = this.data
  67. .concat(res.data)
  68. .sort((a, b) => this.sortByDateAsc(a, b));
  69. infiniteScroll.complete();
  70. });
  71. }
  72. writeTweet() {
  73. this.navCtrl.push(WriteTweetPage);
  74. }
  75. private async addUserObject(tweet) {
  76. tweet.user = await this.twitter.fetchUser(tweet.user_id);
  77. return tweet;
  78. }
  79. private sortByDateAsc(a, b) {
  80. const dateA = new Date(a.created_at);
  81. const dateB = new Date(b.created_at);
  82. if (dateA > dateB) {
  83. return -1;
  84. } else if (dateA < dateB) {
  85. return 1;
  86. } else {
  87. return 0;
  88. }
  89. }
  90. }