Browse Source

Refactor: put gun in own provider

Carsten Porth 5 years ago
parent
commit
ed6bbb60c2

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

@@ -25,6 +25,7 @@ import { PipesModule } from '../pipes/pipes.module';
 import { WriteTweetPage } from '../pages/write-tweet/write-tweet';
 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';
 
 @NgModule({
   declarations: [
@@ -67,7 +68,8 @@ import { P2pStorageIpfsProvider } from '../providers/p2p-storage-ipfs/p2p-storag
     { provide: ErrorHandler, useClass: IonicErrorHandler },
     AuthProvider,
     TwitterApiProvider,
-    P2pStorageIpfsProvider
+    P2pStorageIpfsProvider,
+    P2pDatabaseGunProvider
   ]
 })
 export class AppModule { }

+ 6 - 14
app/src/pages/profile/profile.ts

@@ -7,7 +7,7 @@ import {
 } from "ionic-angular";
 import { TwitterApiProvider } from "../../providers/twitter-api/twitter-api";
 import { P2pStorageIpfsProvider } from "../../providers/p2p-storage-ipfs/p2p-storage-ipfs";
-import Gun from "gun";
+import { P2pDatabaseGunProvider } from "../../providers/p2p-database-gun/p2p-database-gun";
 
 /**
  * Generated class for the ProfilePage page.
@@ -24,18 +24,15 @@ import Gun from "gun";
 export class ProfilePage {
   userId: string;
   user: any = [];
-  gun;
-
   tweets: any[];
 
   constructor(
     public navCtrl: NavController,
     public navParams: NavParams,
     private twitter: TwitterApiProvider,
-    private ipfs: P2pStorageIpfsProvider
-  ) {
-    this.gun = Gun();
-  }
+    private ipfs: P2pStorageIpfsProvider,
+    private gun: P2pDatabaseGunProvider
+  ) {}
 
   ionViewDidLoad() {
     this.userId = this.navParams.get("userId");
@@ -46,7 +43,7 @@ export class ProfilePage {
       .fetchUserTimeline(this.userId)
       .then(res => (this.tweets = res));
 
-    this.checkP2pTweets(this.userId);
+    this.checkP2pTweets("username");
   }
 
   doRefresh(refresher) {
@@ -69,12 +66,7 @@ export class ProfilePage {
   }
 
   private async checkP2pTweets(userId) {
-    let lastTweetHash;
-    this.gun
-      .get("username")
-      .get("lastTweet")
-      .once(lastTweet => (lastTweetHash = lastTweet));
+    const lastTweetHash = this.gun.getLastTweetFromUser(userId);
     const res = await this.ipfs.fetchTweet(lastTweetHash);
-    console.log(res);
   }
 }

+ 4 - 6
app/src/pages/write-tweet/write-tweet.ts

@@ -7,10 +7,10 @@ import {
 } from "ionic-angular";
 import { FormBuilder, Validators, FormGroup } from "@angular/forms";
 import { TwitterApiProvider } from "../../providers/twitter-api/twitter-api";
-import { HttpClient } from "@angular/common/http";
 import { Storage } from "@ionic/storage";
 import Gun from "gun";
 import { P2pStorageIpfsProvider } from "../../providers/p2p-storage-ipfs/p2p-storage-ipfs";
+import { P2pDatabaseGunProvider } from "../../providers/p2p-database-gun/p2p-database-gun";
 
 /**
  * Generated class for the WriteTweetPage page.
@@ -26,7 +26,6 @@ import { P2pStorageIpfsProvider } from "../../providers/p2p-storage-ipfs/p2p-sto
 })
 export class WriteTweetPage {
   tweet: FormGroup;
-  gun;
 
   constructor(
     public navCtrl: NavController,
@@ -34,11 +33,10 @@ export class WriteTweetPage {
     private formBuilder: FormBuilder,
     private twitter: TwitterApiProvider,
     private loadingCtrl: LoadingController,
-    private http: HttpClient,
     private storage: Storage,
-    private ipfs: P2pStorageIpfsProvider
+    private ipfs: P2pStorageIpfsProvider,
+    private gun: P2pDatabaseGunProvider
   ) {
-    this.gun = Gun();
     this.tweet = this.formBuilder.group({
       text: ["", Validators.maxLength(140)],
       p2p: [false]
@@ -61,7 +59,7 @@ export class WriteTweetPage {
     if (this.tweet.value.p2p) {
       const tweet = await this.buildPrivateTweet();
       const res = await this.ipfs.storeTweet(tweet);
-      this.gun.get("username").put({ lastTweet: res["Hash"] });
+      this.gun.storeLastTweetHashForUser("username", res["Hash"]);
     } else {
       await this.twitter.tweet(this.tweet.value["text"]);
     }

+ 31 - 0
app/src/providers/p2p-database-gun/p2p-database-gun.ts

@@ -0,0 +1,31 @@
+import { Injectable } from "@angular/core";
+import Gun from "gun";
+
+/*
+  Generated class for the P2pDatabaseGunProvider provider.
+
+  See https://angular.io/guide/dependency-injection for more info on providers
+  and Angular DI.
+*/
+@Injectable()
+export class P2pDatabaseGunProvider {
+  private gun;
+
+  constructor() {
+    this.gun = Gun();
+  }
+
+  public storeLastTweetHashForUser(userid, hash): void {
+    this.gun.get(userid).put({ lastTweet: hash });
+  }
+
+  public getLastTweetFromUser(userid): string {
+    let hash;
+    this.gun
+      .get(userid)
+      .get("lastTweet")
+      .once(lastTweet => (hash = lastTweet));
+
+    return hash;
+  }
+}