Browse Source

Impliment favorites, private likes and login

rohit.gowda 4 years ago
parent
commit
b77e35f9f6

+ 1 - 1
app/package.json

@@ -17,7 +17,7 @@
     "@angular/compiler": "5.2.11",
     "@angular/compiler-cli": "5.2.11",
     "@angular/core": "5.2.11",
-    "@angular/forms": "5.2.11",
+    "@angular/forms": "^5.2.11",
     "@angular/http": "5.2.11",
     "@angular/platform-browser": "5.2.11",
     "@angular/platform-browser-dynamic": "5.2.11",

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

@@ -18,6 +18,7 @@ import { SettingsPage } from "../pages/settings/settings";
 import { LoginPage } from "../pages/login/login";
 import { TwitterApiProvider } from "../providers/twitter-api/twitter-api";
 import { MockPage } from "../pages/mock/mock";
+import { MockLoginPage } from "../pages/mock-login/mock-login";
 import { FeedComponent } from "../components/feed/feed";
 import { TweetComponent } from "../components/tweet/tweet";
 import { TweetHeaderComponent } from "../components/tweet-header/tweet-header";
@@ -49,6 +50,7 @@ import { CryptoProvider } from "../providers/crypto/crypto";
     SettingsPage,
     LoginPage,
     MockPage,
+    MockLoginPage,
     ProfilePage,
     WriteTweetPage,
     SearchResultsTweetsTabsPage,
@@ -81,6 +83,7 @@ import { CryptoProvider } from "../providers/crypto/crypto";
     SettingsPage,
     LoginPage,
     MockPage,
+    MockLoginPage,
     ProfilePage,
     WriteTweetPage,
     SearchResultsTweetsTabsPage,

+ 34 - 5
app/src/components/tweet-actions/tweet-actions.ts

@@ -4,6 +4,9 @@ import { NavController } from "ionic-angular";
 import { WriteTweetPage } from "../../pages/write-tweet/write-tweet";
 import { P2pDatabaseGunProvider } from "../../providers/p2p-database-gun/p2p-database-gun";
 import { Vibration } from "@ionic-native/vibration";
+import { Storage } from "@ionic/storage";
+import { MockProvider } from "../../providers/mock-provider/mock-provider";
+
 
 @Component({
   selector: "tweet-actions",
@@ -16,17 +19,21 @@ export class TweetActionsComponent {
 
   constructor(
     private twitter: TwitterApiProvider,
+    private storage: Storage,
     private ref: ChangeDetectorRef,
     private navCtrl: NavController,
     private gun: P2pDatabaseGunProvider,
-    private vibration: Vibration
+    private vibration: Vibration,
+     private mockProv: MockProvider
   ) {}
 
   ngOnInit() {
+     console.log('ngOnInit calling getPrivateLikes ');
     this.getPrivateLikes(this.id);
   }
 
   get favoriteCount() {
+    console.log('favoriteCount');
     if (this.data["retweeted_status"]) {
       return this.data["retweeted_status"]["favorite_count"];
     } else {
@@ -35,6 +42,7 @@ export class TweetActionsComponent {
   }
 
   get id() {
+    console.log('id');
     if (this.data["retweeted_status"]) {
       return this.data["retweeted_status"]["id_str"];
     } else {
@@ -43,6 +51,7 @@ export class TweetActionsComponent {
   }
 
   private async getPrivateLikes(id: string) {
+    console.log('getPrivateLikes');
     const likeEntry = await this.gun.getLikes(this.id);
     if (likeEntry.likes > 0) {
       this.privateFavoriteCount = likeEntry.likes;
@@ -51,6 +60,7 @@ export class TweetActionsComponent {
   }
 
   addPrivateLike(id: string) {
+    console.log('addPrivateLike',id);
     this.vibration.vibrate([100, 50, 100]);
     this.gun.addLike(id).then(() => {
       this.privateFavoriteCount++;
@@ -59,6 +69,7 @@ export class TweetActionsComponent {
   }
 
   toggleLike(id: string) {
+    console.log('toggleLike');
     this.vibration.vibrate([100, 50, 100]);
     if (this.data["favorited"]) {
       this.removeLike(id);
@@ -68,26 +79,44 @@ export class TweetActionsComponent {
   }
 
   private like(id: string): void {
-    this.twitter.likeTweet(id).then(() => {
+    console.log('like : ', id);
+    if(this.storage.get("mockup")){
+       console.log('like tweet in mock');
+       this.mockProv.likeTweet(id);
+    }
+    else{
+      this.twitter.likeTweet(id).then(() => {
       this.data["favorited"] = true;
       this.data["favorite_count"]++;
       this.ref.detectChanges();
-    });
+      });
+    }
+    
   }
 
   private removeLike(id: string): void {
-    this.twitter.unlikeTweet(id).then(() => {
+    console.log('removeLike:');
+    if(this.storage.get("mockup")){
+       console.log('unlike tweet in mock');
+        this.mockProv.unlikeTweet(id);
+    }
+    else{
+      this.twitter.unlikeTweet(id).then(() => {
       this.data["favorited"] = false;
       this.data["favorite_count"]--;
       this.ref.detectChanges();
-    });
+      });
+    }
+    
   }
 
   retweetStatus(id: string): void {
+    console.log('retweetStatus');
     this.navCtrl.push(WriteTweetPage, { tweetId: id });
   }
 
   replyToStatus(id: string): void {
+    console.log('replyToStatus');
     this.navCtrl.push(WriteTweetPage, { replyToStatus: id });
   }
 }

+ 27 - 22
app/src/pages/home/home.ts

@@ -39,40 +39,45 @@ export class HomePage {
     const loading = this.loadingCtrl.create();
     loading.present();
     this.mock = await this.storage.get("mockup");
-    console.log('mockup?',this.mock);
+    console.log('mockup?', this.mock);
 
-    if(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);
+        .loadHomeTimeline()
+        .then(tweets => {
+          console.log("HOME tweets are: ", tweets);
+          this.tweets = tweets;
+          loading.dismiss();
+        })
+        .catch(err => console.error('error in timeline', err));
+      // console.log('tweets from htl are:',this.tweets);
+
+    } else {
+      console.log('entered ionic view');
+      this.feed
+        .loadHomeTimeline()
+        .then(tweets => {
+          this.tweets = tweets;
+          loading.dismiss();
+        })
+        .catch(err => console.error(err));
 
-    }
-    else{
-       this.feed
-      .loadHomeTimeline()
-      .then(tweets => (this.tweets = tweets))
-      .catch(err => console.error(err))
-      .then(() => loading.dismiss());
     }
     // loading.dismiss();
   }
 
   doRefresh(refresher: Refresher) {
-    if(this.mock){
-      console.log('mock refresher called');
-        this.mockProv.loadHomeTimeline().then(tweets => {
+    if (this.mock) {
+      console.log('mock refresher called',refresher);
+      this.mockProv.loadHomeTimeline().then(tweets => {
         this.tweets = tweets;
         refresher.complete();
       });
-    }
-    else{
+    } else {
       this.feed.loadHomeTimeline().then(tweets => {
-      this.tweets = tweets;
-      refresher.complete();
-     });
+        this.tweets = tweets;
+        refresher.complete();
+      });
     }
   }
 

+ 1 - 1
app/src/pages/login/login.ts

@@ -7,7 +7,7 @@ import {
 } from "ionic-angular";
 import { AuthProvider } from "../../providers/auth/auth";
 import { AboutPage } from "../about/about";
-import { HomePage } from "../home/home";
+// import { HomePage } from "../home/home";
 import { MockPage } from "../mock/mock";
 
 @IonicPage()

+ 22 - 0
app/src/pages/mock-login/mock-login.html

@@ -0,0 +1,22 @@
+<h2>Login</h2>
+<form [formGroup]="loginForm" (ngSubmit)="onSubmit()">
+    <div class="form-group">
+        <label for="username">Username</label>
+        <input type="text" formControlName="username" class="form-control" [ngClass]="{ 'is-invalid': submitted && f.username.errors }" />
+        <div *ngIf="submitted && f.username.errors" class="invalid-feedback">
+            <div *ngIf="f.username.errors.required">Username is required</div>
+        </div>
+    </div>
+    <div class="form-group">
+        <label for="password">Password</label>
+        <input type="password" formControlName="password" class="form-control" [ngClass]="{ 'is-invalid': submitted && f.password.errors }" />
+        <div *ngIf="submitted && f.password.errors" class="invalid-feedback">
+            <div *ngIf="f.password.errors.required">Password is required</div>
+        </div>
+    </div>
+    <div class="form-group">
+        <button [disabled]="loading" class="btn btn-primary">Login</button>
+        <img *ngIf="loading" src="data:image/gif;base64,R0lGODlhEAAQAPIAAP///wAAAMLCwkJCQgAAAGJiYoKCgpKSkiH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCgAAACwAAAAAEAAQAAADMwi63P4wyklrE2MIOggZnAdOmGYJRbExwroUmcG2LmDEwnHQLVsYOd2mBzkYDAdKa+dIAAAh+QQJCgAAACwAAAAAEAAQAAADNAi63P5OjCEgG4QMu7DmikRxQlFUYDEZIGBMRVsaqHwctXXf7WEYB4Ag1xjihkMZsiUkKhIAIfkECQoAAAAsAAAAABAAEAAAAzYIujIjK8pByJDMlFYvBoVjHA70GU7xSUJhmKtwHPAKzLO9HMaoKwJZ7Rf8AYPDDzKpZBqfvwQAIfkECQoAAAAsAAAAABAAEAAAAzMIumIlK8oyhpHsnFZfhYumCYUhDAQxRIdhHBGqRoKw0R8DYlJd8z0fMDgsGo/IpHI5TAAAIfkECQoAAAAsAAAAABAAEAAAAzIIunInK0rnZBTwGPNMgQwmdsNgXGJUlIWEuR5oWUIpz8pAEAMe6TwfwyYsGo/IpFKSAAAh+QQJCgAAACwAAAAAEAAQAAADMwi6IMKQORfjdOe82p4wGccc4CEuQradylesojEMBgsUc2G7sDX3lQGBMLAJibufbSlKAAAh+QQJCgAAACwAAAAAEAAQAAADMgi63P7wCRHZnFVdmgHu2nFwlWCI3WGc3TSWhUFGxTAUkGCbtgENBMJAEJsxgMLWzpEAACH5BAkKAAAALAAAAAAQABAAAAMyCLrc/jDKSatlQtScKdceCAjDII7HcQ4EMTCpyrCuUBjCYRgHVtqlAiB1YhiCnlsRkAAAOwAAAAAAAAAAAA==" />
+        <a  class="btn btn-link">Register</a>
+    </div>
+</form>

+ 43 - 0
app/src/pages/mock-login/mock-login.ts

@@ -0,0 +1,43 @@
+import { Component, OnInit } from '@angular/core';
+import { FormBuilder, FormGroup, Validators } from '@angular/forms';
+import { first } from 'rxjs/operators';
+import {NavController} from "ionic-angular";
+import { HomePage } from "../home/home";
+
+@Component({templateUrl: 'mock-login.html'})
+export class MockLoginPage implements OnInit {
+    loginForm: FormGroup;
+    loading = false;
+    submitted = false;
+    returnUrl: string;
+
+    constructor(
+        private formBuilder: FormBuilder,
+         public navCtrl: NavController
+    ) {
+        
+    }
+
+    ngOnInit() {
+        this.loginForm = this.formBuilder.group({
+            username: ['', Validators.required],
+            password: ['', Validators.required]
+        });
+    }
+
+    // convenience getter for easy access to form fields
+    get f() { return this.loginForm.controls; }
+
+    onSubmit() {
+        this.submitted = true;
+
+        // stop here if form is invalid
+        if (this.loginForm.invalid) {
+            return;
+        }
+
+        else{
+            this.navCtrl.setRoot(HomePage);
+        }
+    }
+}

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

@@ -1,67 +0,0 @@
-import { Component } from "@angular/core";
-import {
-  IonicPage,
-  NavController,
-  AlertController,
-  MenuController,
-  ModalController,
-  NavParams,
-  Events
-} from "ionic-angular";
-import { Storage } from "@ionic/storage";
-
-import { AuthProvider } from "../../providers/auth/auth";
-import { HomePage } from "../home/home";
-import { LoginPage } from "../login/login";
-
-
-@IonicPage()
-@Component({
-  selector: "mock",
-  templateUrl: "mock.html"
-})
-
-export class MockPage {
-
-  mockUp: boolean;
-
-	constructor(
-    public navCtrl: NavController,
-    public navParams: NavParams,
-    private menuCtrl: MenuController,
-    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:
-        "Somthing went wrong while trying to log you in. Please try again.",
-      buttons: ["OK"]
-    };
-
-
-    this.authProvider
-      .login()
-      .then(() => this.events.publish("user:login"))
-      .then(() => this.navCtrl.setRoot(HomePage))
-      .catch(err => this.alertCtrl.create(alertText).present());
-   }
-}
-
-

+ 0 - 5
changes.txt

@@ -1,5 +0,0 @@
-Run npm update
-npm config set python /path/to/executable/python2.7
-npm install again
-open cmd as administrator
-npm install --global --production windows-build-tools

+ 0 - 10
error solution.txt

@@ -1,10 +0,0 @@
- Build failed with an exception.
-
-* What went wrong:
-Execution failed for task ':app:processDebugManifest'.
-> Manifest merger failed : uses-sdk:minSdkVersion 16 cannot be smaller than version 19 declared in library [:CordovaLib] E:\HOSN-app\app\platforms\android\CordovaLib\build\intermediates\manifests\full\debug\AndroidManifest.xml as the library might be using APIs not available in 16
-        Suggestion: use a compatible library with a minSdk of at most 16,
-                or increase this project's minSdk version to at least 19,
-                or use tools:overrideLibrary="org.apache.cordova" to force usage (may lead to runtime failures)
-
-E:\hosn-app1\app\platforms\android\cordova-plugin-browsertab

File diff suppressed because it is too large
+ 0 - 0
home_timeline.json


+ 0 - 1
list.json

@@ -1 +0,0 @@
-{"users":[],"next_cursor":0,"next_cursor_str":"0","previous_cursor":0,"previous_cursor_str":"0","total_count":null}

File diff suppressed because it is too large
+ 0 - 0
show.json


File diff suppressed because it is too large
+ 0 - 0
tweet.json


Some files were not shown because too many files changed in this diff