msaltnet / T.Viewer

Cross Platform Tizen Log Viewer
https://blog.msalt.net/313
MIT License
15 stars 7 forks source link

[PoC] ace editor 적용 #4

Closed msaltnet closed 4 years ago

msaltnet commented 4 years ago

ace editor 적용해보기

msaltnet commented 4 years ago

App.vue

<template>
  <v-app>
    <v-app-bar app>

      <v-toolbar-title class="headline">
        <span class="font-weight-light">T.Viewer</span>
      </v-toolbar-title>

      <v-spacer></v-spacer>

      <v-btn icon class="mx-1">
        <v-icon>mdi-filter</v-icon>
      </v-btn>

      <v-btn icon class="mx-1">
        <v-icon>mdi-settings</v-icon>
      </v-btn>

      <v-switch
        dense
        hide-details
        v-model="switchListen"
        class="mx-1"
        :label="`Listen: ${switchListen?'On':'Off'}`"
      ></v-switch>

      <template v-slot:extension>
        <v-tabs
          align-with-title
          v-model="currentItem"
          background-color="transparent"
        >
          <v-tab
            :href="'#tab-main'"
          >main</v-tab>
          <v-tab
            :href="'#tab-1'"
          >ft.1</v-tab>
          <v-tab
            :href="'#tab-2'"
          >ft.2</v-tab>
          <v-tab
            :href="'#tab-3'"
          >ft.3</v-tab>
          <v-tab
            :href="'#tab-4'"
          >ft.4</v-tab>
          <v-tab
            :href="'#tab-5'"
          >ft.5</v-tab>
          <v-tab
            :href="'#tab-6'"
          >ft.6</v-tab>
          <v-tab
            :href="'#tab-7'"
          >ft.7</v-tab>
          <v-tab
            :href="'#tab-8'"
          >ft.8</v-tab>
        </v-tabs>
      </template>
    </v-app-bar>

    <v-content>

      <v-tabs-items v-model="currentItem">
        <v-tab-item
          :value="'tab-main'"
        >
          MAIN TAB
          <LogMonitor
            v-bind:listenSwitch="switchListen"
            listenerId="listener-0"
            filter=""
          />
        </v-tab-item>
        <v-tab-item
          :value="'tab-1'"
        >
          TAB-1 filter="W_HOME"
          <LogMonitor
            v-bind:listenSwitch="switchListen"
            listener-id="listener-1"
            filter="W_HOME"
          />
        </v-tab-item>
        <v-tab-item
          :value="'tab-2'"
        >
          TAB-2 filter="CAPI"
          <LogMonitor
            v-bind:listenSwitch="switchListen"
            listener-id="listener-2"
            filter="CAPI"
          />
        </v-tab-item>
        <v-tab-item
          :value="'tab-3'"
        >
          TAB-3 filter="watchface"
          <LogMonitor
            v-bind:listenSwitch="switchListen"
            listener-id="listener-3"
            filter="watchface"
          />
        </v-tab-item>
        <v-tab-item
          :value="'tab-4'"
        >
          TAB-4 filter="watch_app_main"
          <LogMonitor
            v-bind:listenSwitch="switchListen"
            listener-id="listener-4"
            filter="watch_app_main"
          />
        </v-tab-item>
        <v-tab-item
          :value="'tab-5'"
        >
          TAB-5 filter="MANAGER"
          <LogMonitor
            v-bind:listenSwitch="switchListen"
            listener-id="listener-5"
            filter="MANAGER"
          />
        </v-tab-item>
        <v-tab-item
          :value="'tab-6'"
        >
          TAB-6 filter="CORE"
          <LogMonitor
            v-bind:listenSwitch="switchListen"
            listener-id="listener-6"
            filter="CORE"
          />
        </v-tab-item>
        <v-tab-item
          :value="'tab-7'"
        >
          TAB-7 filter="SOUND"
          <LogMonitor
            v-bind:listenSwitch="switchListen"
            listener-id="listener-7"
            filter="SOUND"
          />
        </v-tab-item>
        <v-tab-item
          :value="'tab-8'"
        >
          TAB-8 filter="samsung"
          <LogMonitor
            v-bind:listenSwitch="switchListen"
            listener-id="listener-8"
            filter="samsung"
          />
        </v-tab-item>
      </v-tabs-items>

    </v-content>
  </v-app>
</template>

<script>
import LogMonitor from './components/LogMonitor';

export default {
  name: 'App',
  components: {
    LogMonitor,
  },
  data: () => ({
    currentItem: 'tab-main',
    switchListen: false
  }),
};
</script>

LogMonitor.vue

         v-on:click="onStartButton"
         >
         {{ btnText }}
       </v-btn>
       {{ message }}
     <div ref="viewer" :style="{'height': '400px', 'width': '100%'}"></div>
     </v-row>
...
+import AceEditor from '../aceEditor';
+import GlobalSettings from '../globalSettings';

 export default {
-  props: ['listenSwitch'],
+  props: ['listenSwitch', 'listenerId', 'filter'],
   data: () => ({
       message: 'No Log Bom',
       isListenerOn: true,
-      logListener: new LogListener(ipcRenderer),
+      globalSettings: new GlobalSettings()
   }),
   computed: {
     btnText() {
       return this.isListenerOn ? 'On' : 'Off';
     }
   },
+  created: function() {
+    this.logListener = new LogListener(ipcRenderer, this.listenerId);
+    AceEditor.init(this.globalSettings);
+  },
+  mounted: function() {
+    this.viewer = AceEditor.createViewer(this.$refs.viewer, this.globalSettings);
+  },
   methods: {
     onStartButton: function () {
-      console.log(this.listenSwitch);
-      return;
-      // if (this.isListenerOn) {
-      //   this.isListenerOn = false;
-      //   this.logListener.registerListener((msg) => {
-      //     this.message += msg;
-      //   });
-      // } else {
-      //   this.isListenerOn = true;
-      //   this.logListener.unregisterListener();
-      // }
+      console.log(this.listenerId);
+      if (this.isListenerOn) {
+        this.isListenerOn = false;
+        this.logListener.registerListener((msg) => {
+          let contents = msg.split('\r\n');
+          contents.map(line => {
+            let show = false;
+
+            if (line.indexOf(this.filter) != -1) {
+              show = true;
+            }
+
+            return {
+              show: show,
+              line: line
+            };
+          })
+          .filter(line => line.show)
+          .map(line => {
+            this.viewer.navigateLineEnd();
+            this.viewer.insert(line.line);
+            return line;
+          });
+
+          this.viewer.scrollToLine(this.viewer.session.getLength());
+        });
+      } else {
+        this.isListenerOn = true;
+        this.logListener.unregisterListener();
+      }
     }
   }

PoC debugging

msaltnet commented 4 years ago

https://github.com/msaltnet/T.Viewer/commit/1c6e0d8ed69805cd5647566151f97eb2a27251db