Browse Source

Publish new tweets in mockup

rohit.gowda 4 years ago
parent
commit
30025a0443

+ 2 - 0
app/src/app/app.module.ts

@@ -31,6 +31,7 @@ import { QuotedStatusComponent } from "../components/quoted-status/quoted-status
 import { P2pStorageIpfsProvider } from "../providers/p2p-storage-ipfs/p2p-storage-ipfs";
 import { P2pDatabaseGunProvider } from "../providers/p2p-database-gun/p2p-database-gun";
 import { FeedProvider } from "../providers/feed/feed";
+import { MockProvider } from "../providers/mock-provider/mock-provider";
 import { MentionComponent } from "../components/mention/mention";
 import { HashtagComponent } from "../components/hashtag/hashtag";
 import { SearchResultsUsersPage } from "../pages/search-results-users/search-results-users";
@@ -100,6 +101,7 @@ import { CryptoProvider } from "../providers/crypto/crypto";
     P2pStorageIpfsProvider,
     P2pDatabaseGunProvider,
     FeedProvider,
+    MockProvider,
     CryptoProvider,
     Vibration
   ]

+ 1 - 0
app/src/pages/home/home.html

@@ -8,6 +8,7 @@
 </ion-header>
 
 <ion-content>
+  <!-- <feed [data]="tweets" (onRefresh)="doRefresh($event)" (onLoadMore)="loadMore($event)"></feed> -->
   <feed [data]="tweets" (onRefresh)="doRefresh($event)" (onLoadMore)="loadMore($event)"></feed>
 
   <ion-fab bottom right>

+ 65 - 41
app/src/pages/home/home.ts

@@ -1,5 +1,4 @@
 import { Component } from "@angular/core";
-import * as twt from './tweet.json';
 import {
   IonicPage,
   NavController,
@@ -8,8 +7,10 @@ import {
   Refresher,
   LoadingController
 } from "ionic-angular";
+import { Storage } from "@ionic/storage";
 import { WriteTweetPage } from "../write-tweet/write-tweet";
 import { FeedProvider } from "../../providers/feed/feed";
+import { MockProvider } from "../../providers/mock-provider/mock-provider";
 
 @IonicPage()
 @Component({
@@ -19,11 +20,14 @@ import { FeedProvider } from "../../providers/feed/feed";
 export class HomePage {
   menuController: MenuController;
   tweets;
+  mock;
 
   constructor(
     public navCtrl: NavController,
     private menuCtrl: MenuController,
     private feed: FeedProvider,
+    private mockProv: MockProvider,
+    private storage: Storage,
     private loadingCtrl: LoadingController
   ) {}
 
@@ -31,69 +35,89 @@ export class HomePage {
     this.menuCtrl.enable(true, "sideNav");
   }
 
-  ionViewDidEnter() {
+  async ionViewDidEnter() {
     const loading = this.loadingCtrl.create();
-    // loading.present();
-    loading.dismiss();
-    this.tweets = twt;
-    console.log('tweets are:',this.tweets);
-    // this.feed
-    //   .loadHomeTimeline()
-    //   .then(tweets => (this.tweets = tweets))
-    //   .catch(err => console.error(err))
-    //   .then(() => loading.dismiss());
+    loading.present();
+    this.mock = await this.storage.get("mockup");
+    console.log('mockup?',this.mock);
+
+    if(this.mock){
+      this.mockProv
+      .loadHomeTimeline()
+      .then(tweets => (this.tweets = tweets))
+      .catch(err => console.error(err))
+      .then(() => loading.dismiss());
+      console.log('tweets from htl are:',this.tweets);
+
+    }
+    else{
+       this.feed
+      .loadHomeTimeline()
+      .then(tweets => (this.tweets = tweets))
+      .catch(err => console.error(err))
+      .then(() => loading.dismiss());
+    }
+    // loading.dismiss();
   }
 
   doRefresh(refresher: Refresher) {
-    // this.feed.loadHomeTimeline().then(tweets => {
-    //   this.tweets = tweets;
-    //   refresher.complete();
-    // });
+    if(this.mock){
+      console.log('mock refresher called');
+        this.mockProv.loadHomeTimeline().then(tweets => {
+        this.tweets = tweets;
+        refresher.complete();
+      });
+    }
+    else{
+      this.feed.loadHomeTimeline().then(tweets => {
+      this.tweets = tweets;
+      refresher.complete();
+     });
+    }
   }
 
   loadMore(infiniteScroll: InfiniteScroll) {
-    // this.feed
-    //   .loadHomeTimeline(this.oldestPublicTweet, this.oldestPrivateTweet)
-    //   .then(tweets => {
-    //     this.tweets = this.tweets.concat(tweets);
-    //     infiniteScroll.complete();
-    //   });
+    this.feed
+      .loadHomeTimeline(this.oldestPublicTweet, this.oldestPrivateTweet)
+      .then(tweets => {
+        this.tweets = this.tweets.concat(tweets);
+        infiniteScroll.complete();
+      });
   }
 
   writeTweet() {
+    console.log('Writing the tweet');
     this.navCtrl.push(WriteTweetPage);
   }
 
   get publicTweets() {
-    return null;
-    // return this.tweets.filter(tweet => !tweet.private_tweet);
+    return this.tweets.filter(tweet => !tweet.private_tweet);
   }
 
   get privateTweets() {
-    // return this.tweets.filter(tweet => tweet.private_tweet);
-    return null;
+    return this.tweets.filter(tweet => tweet.private_tweet);
+    // return null;
   }
 
   get oldestPublicTweet() {
-    return null;
+    // return null;
 
-    // if (this.publicTweets.length > 0) {
-    //   return this.publicTweets.reduce((acc, cur) =>
-    //     acc.id < cur.id ? acc : cur
-    //   );
-    // } else {
-    //   return undefined;
-    // }
+    if (this.publicTweets.length > 0) {
+      return this.publicTweets.reduce((acc, cur) =>
+        acc.id < cur.id ? acc : cur
+      );
+    } else {
+      return undefined;
+    }
   }
 
   get oldestPrivateTweet() {
-    // if (this.privateTweets.length > 0) {
-    //   return this.privateTweets.reduce((acc, cur) =>
-    //     new Date(acc.created_at) < new Date(cur.created_at) ? acc : cur
-    //   );
-    // } else {
-    //   return undefined;
-    // }
-    return null;
+    if (this.privateTweets.length > 0) {
+      return this.privateTweets.reduce((acc, cur) =>
+        new Date(acc.created_at) < new Date(cur.created_at) ? acc : cur
+      );
+    } else {
+      return undefined;
+    }
   }
 }

+ 10 - 0
app/src/pages/mock/mock.ts

@@ -8,6 +8,7 @@ import {
   NavParams,
   Events
 } from "ionic-angular";
+import { Storage } from "@ionic/storage";
 
 import { AuthProvider } from "../../providers/auth/auth";
 import { HomePage } from "../home/home";
@@ -22,6 +23,8 @@ import { LoginPage } from "../login/login";
 
 export class MockPage {
 
+  mockUp: boolean;
+
 	constructor(
     public navCtrl: NavController,
     public navParams: NavParams,
@@ -29,15 +32,22 @@ export class MockPage {
     private alertCtrl: AlertController,
     private authProvider: AuthProvider,
     private modalCtrl: ModalController,
+    private storage: Storage,
     private events: Events
   ) {}
 
 
 	loginMock(){
+    this.mockUp = true;
+     this.storage.set("mockup", this.mockUp);
 		this.navCtrl.setRoot(HomePage);
+
 	}
 
 	loginTwitter() {
+    this.mockUp = false;
+    this.storage.set("mockup", this.mockUp);
+    console.log('logging in via twitter');
   	 const alertText = {
       title: "Login failed",
       subTitle:

+ 38 - 27
app/src/pages/write-tweet/write-tweet.ts

@@ -13,6 +13,7 @@ import {
   ValidatorFn,
   AbstractControl
 } from "@angular/forms";
+import { MockProvider } from "../../providers/mock-provider/mock-provider";
 import { TwitterApiProvider } from "../../providers/twitter-api/twitter-api";
 import { Storage } from "@ionic/storage";
 import { P2pStorageIpfsProvider } from "../../providers/p2p-storage-ipfs/p2p-storage-ipfs";
@@ -42,7 +43,8 @@ export class WriteTweetPage {
     private ipfs: P2pStorageIpfsProvider,
     private gun: P2pDatabaseGunProvider,
     private cryptoUtils: CryptoProvider,
-    private alertCtrl: AlertController
+    private alertCtrl: AlertController,
+    private mockProv: MockProvider
   ) {
     this.retweetId = this.navParams.get("tweetId");
     this.replyToStatusId = this.navParams.get("replyToStatus");
@@ -121,36 +123,44 @@ export class WriteTweetPage {
   }
 
   async submitTweet() {
+    console.log('submitting tweet');
     const loading = this.loadingCtrl.create();
     loading.present();
-
-    if (this.tweet.value.p2p) {
-      loading.setContent("Validate keys...");
-      if (
-        (await this.cryptoUtils.isPrivateKeySet()) &&
-        (await this.cryptoUtils.isPublicKeyPublished())
-      ) {
-        loading.setContent("Publish private tweet...");
-        await this.tweetPrivate();
-      } else {
-        loading.dismiss();
-        const alert = this.alertCtrl.create({
-          title: "Oooops...",
-          message:
-            "Please verify that you have set a private and public key in the settings and that your latest public key was published."
-        });
-        alert.present();
-        return;
+    if(await this.storage.get("mockup")){
+      console.log('value of the tweet is:',this.tweet.value);
+    }
+    else{
+      console.log('in else ');
+      if (this.tweet.value.p2p) {
+        loading.setContent("Validate keys...");
+        if (
+          (await this.cryptoUtils.isPrivateKeySet()) &&
+          (await this.cryptoUtils.isPublicKeyPublished())
+        ) {
+          loading.setContent("Publish private tweet...");
+          await this.tweetPrivate();
+        } else {
+          loading.dismiss();
+          const alert = this.alertCtrl.create({
+            title: "Oooops...",
+            message:
+              "Please verify that you have set a private and public key in the settings and that your latest public key was published."
+          });
+          alert.present();
+          return;
+        }
+      } 
+      else {
+        loading.setContent("Publish on Twitter...");
+        await this.twitter.tweet(
+          this.tweet.value["text"],
+          this.retweet,
+          this.replyToStatusId
+        );
       }
-    } else {
-      loading.setContent("Publish on Twitter...");
-      await this.twitter.tweet(
-        this.tweet.value["text"],
-        this.retweet,
-        this.replyToStatusId
-      );
     }
-
+    console.log('publishing tweet for mock',this.tweet.value["text"]);
+    await this.mockProv.writeTweet(this.tweet.value["text"]);
     loading.dismiss();
     this.navCtrl.pop();
   }
@@ -174,6 +184,7 @@ export class WriteTweetPage {
   }
 
   private async buildPrivateTweet() {
+    console.log('building private tweet');
     const status = this.tweet.value["text"].trim();
     const entities = await this.getEntities(status);
 

+ 5 - 1
app/src/providers/feed/feed.ts

@@ -31,6 +31,7 @@ export class FeedProvider {
     oldestPublicTweet?,
     oldestPrivateTweet?
   ) {
+     console.log('loading tweets for loadUserTimeline');
     const maxId = oldestPublicTweet ? oldestPublicTweet["id_str"] : undefined;
     // Fetch tweets from Twitter
     let tweets = await this.twitter.fetchUserTimeline(userId, maxId);
@@ -70,10 +71,11 @@ export class FeedProvider {
    */
   public async loadHomeTimeline(oldestPublicTweet?, oldestPrivateTweet?) {
     // Fetch tweets from Twitter
+    console.log('loading tweets for hometimeline');
     const maxId = oldestPublicTweet ? oldestPublicTweet["id_str"] : undefined;
     let tweets = await this.twitter.fetchHomeFeed(maxId);
     tweets = tweets.filter(tweet => tweet.id_str != maxId);
-
+    console.log('tweets are:',tweets);
     // Determine start and end of time interval to look for private tweets
     const intervalStart: Date = oldestPrivateTweet
       ? new Date(oldestPrivateTweet["created_at"])
@@ -111,12 +113,14 @@ export class FeedProvider {
         .concat(privateTweets)
         .sort((a, b) => this.sortByDateAsc(a, b));
     } else {
+      console.log('in else tweets are: ',tweets);
       return tweets;
     }
   }
 
   private async fetchPrivateTweets(privateTweetsData: object[]) {
     const privateTweets = [];
+    console.log('loading tweets for fetchPrivateTweets');
 
     // Load private tweets from P2P storage
     for (let i = 0; i < privateTweetsData.length; i++) {

+ 82 - 0
app/src/providers/mock-provider/mock-provider.ts

@@ -0,0 +1,82 @@
+import { Injectable } from "@angular/core";
+import { Storage } from "@ionic/storage";
+import * as tweets from './tweet.json';
+@Injectable()
+export class MockProvider {
+  friends;
+  userId: string;
+  mockTweets;
+
+  constructor(
+    private storage: Storage
+  ) {
+    this.storage.get("userId").then(userId => (this.userId = userId));
+  }
+
+  /**
+   * Retrives the public and private tweets for a user
+   * Since it is loaded in batches of 20 public tweets, public and private tweet are used as reference to load next 20 tweets
+   * @param userId user id
+   * @param oldestPublicTweet oldest public tweet
+   * @param oldestPrivateTweet oldest private tweet
+   */
+  public async loadUserTimeline(
+    userId,
+    oldestPublicTweet?,
+    oldestPrivateTweet?
+  ) 
+  {
+
+  }
+
+  /**
+   * Retrieves the home feed for the logged in user
+   * Since it is loaded in batches of 20 public tweets, public and private tweet are used as reference to load next 20 tweets
+   * @param oldestPublicTweet oldest public tweet
+   * @param oldestPrivateTweet oldest private tweet
+   */
+  public async loadHomeTimeline(oldestPublicTweet?, oldestPrivateTweet?) {
+    console.log('hometime line called',tweets);
+    this.mockTweets = tweets;
+    return tweets;
+    // Fetch tweets from Twitter
+   
+
+    // Determine start and end of time interval to look for private tweets
+   
+
+    // Fetch user's friends
+
+    // Extract friends user ids and add own user id
+    
+    // Fetch ipfs hashs for period
+ 
+      // Combine and sort tweets
+    
+  }
+
+  public async replyTweet(){
+
+  }
+
+  public async writeTweet(twt:string){
+    console.log('inside writetweet',this.mockTweets[0]);
+    console.log('inside writetweet obj is:',this.mockTweets[0].full_text);
+    let newTweet = Object.assign({}, this.mockTweets[0]);
+    newTweet.full_text = twt;
+    console.log('new tweet ',newTweet);
+    tweets.push(newTweet);
+    // this.mockTweets.push(newTweet);
+    // var newTweet =JSON.parse(tweet[0]);
+    // newTweet.full_text = tweet;
+    // console.log('writing tweeet',tweets.push(newTweet));
+    // this.loadHomeTimeline();
+
+  }
+
+  private async fetchPrivateTweets(privateTweetsData: object[]) {
+   
+  }
+
+
+}

+ 1 - 1
app/src/pages/home/tweet.json → app/src/providers/mock-provider/tweet.json

@@ -83,7 +83,7 @@
     "created_at": "Wed Sep 25 19:54:41 +0000 2019",
     "id": 1176948153297362947,
     "id_str": "1176948153297362947",
-    "full_text": "Fgttgf",
+    "full_text": "Providing mock tweets",
     "truncated": false,
     "display_text_range": [
       0,

+ 1 - 0
app/src/providers/twitter-api/twitter-api.ts

@@ -142,6 +142,7 @@ export class TwitterApiProvider {
    * @param replyToStatusId tweet id to reply to
    */
   public async tweet(status, retweet?, replyToStatusId?) {
+    console.log('params are:',status, retweet, replyToStatusId);
     if (status.length === 0 && retweet) {
       // Simple retweet
       return await this.client.post("statuses/retweet", {