Skip to content

Commit

Permalink
version 0.8.0
Browse files Browse the repository at this point in the history
Much work has been done to improve usability, overall perception of the product, usability and speed

* optimized UI code
* new color scheme based on [Nord Theme](https://www.nordtheme.com/)
* support control via an icon in the taskbar on Mac OS
* many other changes, big and small :)
  • Loading branch information
NightMan-1 committed Jun 23, 2019
1 parent ede83f7 commit 249286d
Show file tree
Hide file tree
Showing 41 changed files with 4,814 additions and 3,944 deletions.
14 changes: 8 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,19 @@ All data stored in Quiver like format (http://happenapps.com/)

GoLang server + VueJS frontend

More info here - https://qvnote.fsky.info/

![Screenshot eng](screenshot_eng.png)

## Project request

GoLang >1.10
GoLang >1.10
NodeJS >10.x

## Project setup

Download
Unzip archive
Download
Unzip archive
_(you also need install git command line program for download the source)_

```
Expand Down Expand Up @@ -70,12 +72,12 @@ now you can run QVNote binary and open http://localhost:8000 in your browser

## GUI development

run server (QVNote.exe)
npm run serve
run server (QVNote.exe)
npm run serve
open http://localhost:8080

## Command line parameters:
--help
--help
usage info
--port=8000
listen port
Expand Down
3 changes: 3 additions & 0 deletions global.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"fmt"
"math/rand"
"os"
"os/exec"
"path/filepath"
"runtime"
"time"
Expand Down Expand Up @@ -144,6 +145,8 @@ type FilesForIndexType struct {

var FilesForIndex = []FilesForIndexType{}

var systrayProcess *exec.Cmd

func BytesToString(data []byte) string {
return string(data[:])
}
Expand Down
29 changes: 15 additions & 14 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,20 +1,19 @@
{
"name": "qvnote",
"version": "0.7.0",
"version": "0.8.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build",
"lint": "vue-cli-service lint"
},
"dependencies": {
"@coreui/coreui": "^2.1.9",
"css-loader": "^2.1.1",
"bootstrap": "^4.3.1",
"css-loader": "^3.0.0",
"cxlt-vue2-toastr": "^1.1.0",
"echarts": "^4.2.1",
"glob-all": "^3.1.0",
"js-beautify": "^1.10.0",
"lodash": "^4.17.11",
"postcss-import": "^12.0.1",
"postcss-loader": "^3.0.0",
"postcss-url": "^8.0.0",
Expand All @@ -23,33 +22,31 @@
"quill-image-drop-module": "^1.0.3",
"quill-image-resize-module": "^3.0.0",
"quill-magic-url": "^1.0.2",
"simplebar-vue": "^0.1.6",
"tingle.js": "^0.13.2",
"tingle.js": "0.13.2",
"v-charts": "^1.19.0",
"vue": "^2.6.10",
"vue-calendar-heatmap": "^0.8.4",
"vue-headful": "^2.0.1",
"vue-i18n": "^8.11.2",
"vue-ls": "^3.2.1",
"vue-multiselect": "^2.1.6",
"vue-prism-editor": "^0.1.2",
"vue-prism-editor": "^0.2.1",
"vue-quill-editor": "^3.0.6",
"vue-resource": "^1.5.1",
"vue-router": "^3.0.6",
"vuex": "^3.1.1"
},
"devDependencies": {
"@fortawesome/fontawesome-free": "^5.8.2",
"@vue/cli-plugin-babel": "^3.7.0",
"@vue/cli-plugin-eslint": "^3.7.0",
"@vue/cli-service": "^3.7.0",
"@fortawesome/fontawesome-free": "^5.9.0",
"@vue/cli-plugin-babel": "^3.8.0",
"@vue/cli-plugin-eslint": "^3.8.0",
"@vue/cli-service": "^3.8.4",
"@vue/eslint-config-standard": "^4.0.0",
"babel-eslint": "^10.0.1",
"babel-eslint": "^10.0.2",
"eslint": "^5.16.0",
"eslint-plugin-vue": "^5.2.2",
"node-sass": "^4.12.0",
"sass-loader": "^7.0.1",
"terser-webpack-plugin": "^1.2.3",
"terser-webpack-plugin": "^1.3.0",
"vue-template-compiler": "^2.6.10"
},
"eslintConfig": {
Expand All @@ -62,6 +59,10 @@
"@vue/standard"
],
"rules": {
"indent": [
"error",
4
],
"no-tabs": 0,
"no-mixed-spaces-and-tabs": 0,
"new-cap": 0,
Expand Down
69 changes: 63 additions & 6 deletions platform_darwin.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,20 +3,21 @@
package main

import (
"bytes"
"fmt"
"net/http"
"os"
"os/exec"

"github.com/gen2brain/beeep"
"github.com/gen2brain/dlgs"
"github.com/getlantern/systray"
)

var osWithGUI = true

func openBrowser(url string) error {
var cmd string
var args []string
cmd = "open"
args = append(args, url)
return exec.Command(cmd, args...).Start()
return exec.Command("open", url).Start()
}

func showNotification(message_text string, message_type string) {
Expand All @@ -32,6 +33,62 @@ func showNotification(message_text string, message_type string) {
}
}

func initPlatformSpecific() {
func onReadySysTray() {
iconData, _ := Asset("icon.ico")

systray.SetIcon(iconData)
//systray.SetTitle("QVNote")

mBrowser := systray.AddMenuItem("Open browser", "open default browser with this app page")
mRelod := systray.AddMenuItem("Reload notes", "may be slow")
mQuit := systray.AddMenuItem("Quit", "Quit the whole app")

for {
select {
case <-mBrowser.ClickedCh:
openBrowser("http://localhost:8000/")
case <-mRelod.ClickedCh:
url := "http://localhost:8000/api/refresh_data.json"
var jsonStr = []byte(`{"action":"reload"}`)
req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonStr))
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
panic(err)
}
resp.Body.Close()
case <-mQuit.ClickedCh:
systray.Quit()
beeep.Notify("QVNote", "Good buy!", "")
fmt.Println("Good buy!")
}
}
}

func runSystray() {
systray.Run(onReadySysTray, onExitSysTray)
}

func onExitSysTray() {
// clean up here
client := http.Client{}
client.Get("http://localhost:8000/api/exit")
os.Exit(0)
}

func initPlatformSpecific() error {
cwd, err := os.Getwd()
if err != nil {
return err
}
systrayProcess = exec.Command(os.Args[0], "--systray")
systrayProcess.Dir = cwd
err = systrayProcess.Start()
if err != nil {
return err
}
//systrayProcess.Process.Kill()
//systrayProcess.Process.Release()
return nil
}
2 changes: 2 additions & 0 deletions platform_linux.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ func openBrowser(url string) error {
func showNotification(message_text string, message_type string) {
//do nothing
}
func runSystray() {
}

func initPlatformSpecific() {
configGlobal.atStartOpenBrowser = false
Expand Down
75 changes: 43 additions & 32 deletions platform_windows.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,10 @@ package main

import (
"fmt"
"io/ioutil"
"os"
"os/exec"
"runtime"

"github.com/gen2brain/beeep"
"github.com/gen2brain/dlgs"
Expand Down Expand Up @@ -37,7 +39,17 @@ func showNotification(message_text string, message_type string) {
case "dialog_warning":
dlgs.Warning("QVNote error!", message_text)
case "notify":
beeep.Notify("QVNote", message_text, "")
if runtime.GOOS == string("windows") {
var tmpIcon *os.File
iconData, _ := Asset("icon.ico")
tmpIcon, _ = ioutil.TempFile("", "icon.*.ico")
tmpIcon.Write(iconData)
tmpIcon.Close()
beeep.Notify("QVNote", message_text, tmpIcon.Name())
os.Remove(tmpIcon.Name())
} else {
beeep.Notify("QVNote", message_text, "") // icon not work on MacOS
}

}
}
Expand Down Expand Up @@ -70,55 +82,54 @@ func onReadySysTray() {
systray.SetTitle("QVNote")

mBrowser := systray.AddMenuItem("Open browser", "open default browser with this app page")
go func() {
<-mBrowser.ClickedCh
go openBrowser("http://localhost:8000/")
}()
mRelod := systray.AddMenuItem("Reload notes", "may be slow")
mShowConsoleHide := systray.AddMenuItem("Hide console", "debug")
mShowConsoleShow := systray.AddMenuItem("Show console", "debug")
mQuit := systray.AddMenuItem("Quit", "Quit the whole app")

if consolePresent {
mShowConsoleHide := systray.AddMenuItem("Hide console", "debug")
mShowConsoleShow := systray.AddMenuItem("Show console", "debug")
go func() {
<-mShowConsoleHide.ClickedCh
if consoleWindowsVisible {
mShowConsoleShow.Hide()
} else {
mShowConsoleHide.Hide()
}
} else {
mShowConsoleShow.Hide()
mShowConsoleHide.Hide()
}

for {
select {
case <-mShowConsoleHide.ClickedCh:
consoleHide()
mShowConsoleHide.Hide()
mShowConsoleShow.Show()
}()
go func() {
<-mShowConsoleShow.ClickedCh
case <-mShowConsoleShow.ClickedCh:
consoleShow()
mShowConsoleShow.Hide()
mShowConsoleHide.Show()
}()
if consoleWindowsVisible {
mShowConsoleShow.Hide()
} else {
mShowConsoleHide.Hide()
case <-mBrowser.ClickedCh:
openBrowser("http://localhost:" + configGlobal.cmdPort + "/")
case <-mRelod.ClickedCh:
FindAllNotes()
beeep.Notify("QVNote", "All data reloaded", "")
case <-mQuit.ClickedCh:
systray.Quit()
beeep.Notify("QVNote", "Good buy!", "")
fmt.Println("Good buy!")
}
}

mRelod := systray.AddMenuItem("Reload notes", "may be slow")
go func() {
<-mRelod.ClickedCh
FindAllNotes()
beeep.Notify("QVNote", "All data reloaded", "")
}()

mQuit := systray.AddMenuItem("Quit", "Quit the whole app")
go func() {
<-mQuit.ClickedCh
systray.Quit()
beeep.Notify("QVNote", "Good buy!", "")
fmt.Println("Good buy!")
}()

}

func onExitSysTray() {
// clean up here
os.Exit(0)
}

func runSystray() {
}

func initPlatformSpecific() {
if configGlobal.cmdServerMode {
return
Expand Down
6 changes: 3 additions & 3 deletions public/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
<html>
<head>
<meta charset="utf-8">
<link href="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGRhdGEtbmFtZT0iTGF5ZXIgMSIgdmlld0JveD0iMCAwIDY0IDY0Ij4gIDxyZWN0IHdpZHRoPSIzOSIgaGVpZ2h0PSI0OCIgeD0iMTQiIHk9IjUiIGZpbGw9IiNmYWVmZGUiIHJ4PSIyIiByeT0iMiIvPiAgPHBhdGggZmlsbD0iI2NkYTFhNyIgZD0iTTEyIDVoN3Y0OEg5VjhhMyAzIDAgMCAxIDMtM3oiLz4gIDxyZWN0IHdpZHRoPSI0MiIgaGVpZ2h0PSI2IiB4PSI5IiB5PSI1MyIgZmlsbD0iI2VmZDhiZSIgcng9IjIiIHJ5PSIyIi8+ICA8cGF0aCBmaWxsPSIjOGQ2YzlmIiBkPSJNMzggMjVhMSAxIDAgMCAwLTEtMUgyN2ExIDEgMCAwIDAgMCAyaDEwYTEgMSAwIDAgMCAxLTF6TTQ1IDI0aC00YTEgMSAwIDAgMCAwIDJoNGExIDEgMCAwIDAgMC0yek00MSAyOEgzMWExIDEgMCAwIDAgMCAyaDEwYTEgMSAwIDAgMCAwLTJ6TTE5IDhhMSAxIDAgMCAwLTEgMXY0YTEgMSAwIDAgMCAyIDBWOWExIDEgMCAwIDAtMS0xeiIvPiAgPHBhdGggZmlsbD0iIzhkNmM5ZiIgZD0iTTUxIDRIMTJhNCA0IDAgMCAwLTQgNHY0OGE0IDQgMCAwIDAgNCA0aDM3YTMgMyAwIDAgMCAzLTN2LTMuMThBMyAzIDAgMCAwIDU0IDUxVjdhMyAzIDAgMCAwLTMtM3ptLTIgNTRIMTJhMiAyIDAgMCAxLTItMiAyLjI2IDIuMjYgMCAwIDEgMi0yaDM4djNhMSAxIDAgMCAxLTEgMXptMy03YTEgMSAwIDAgMS0xIDFIMjBWMTdhMSAxIDAgMCAwLTIgMHYzNWgtNmEzLjk0IDMuOTQgMCAwIDAtMiAuNjNWOGEyIDIgMCAwIDEgMi0yaDM5YTEgMSAwIDAgMSAxIDF6Ii8+ICA8cGF0aCBmaWxsPSIjOGQ2YzlmIiBkPSJNMTUgOGgtMmExIDEgMCAwIDAgMCAyaDJhMSAxIDAgMCAwIDAtMnpNMTUgMTNoLTJhMSAxIDAgMCAwIDAgMmgyYTEgMSAwIDAgMCAwLTJ6TTE1IDE4aC0yYTEgMSAwIDAgMCAwIDJoMmExIDEgMCAwIDAgMC0yek0xNSAyM2gtMmExIDEgMCAwIDAgMCAyaDJhMSAxIDAgMCAwIDAtMnpNMTUgMjhoLTJhMSAxIDAgMCAwIDAgMmgyYTEgMSAwIDAgMCAwLTJ6TTE1IDMzaC0yYTEgMSAwIDAgMCAwIDJoMmExIDEgMCAwIDAgMC0yek0xNSAzOGgtMmExIDEgMCAwIDAgMCAyaDJhMSAxIDAgMCAwIDAtMnpNMTUgNDNoLTJhMSAxIDAgMCAwIDAgMmgyYTEgMSAwIDAgMCAwLTJ6TTE1IDQ4aC0yYTEgMSAwIDAgMCAwIDJoMmExIDEgMCAwIDAgMC0yeiIvPjwvc3ZnPg=="
rel="shortcut icon" type="image/svg"/>
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<link href="data:image/png;base64,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"
rel="shortcut icon" type="image/png"/>
<meta name="viewport" content="width=device-width,initial-scale=1.0,shrink-to-fit=no">
<title>QVNote</title>
<meta name="description"/>
<meta name="keywords"/>
Expand Down
Loading

0 comments on commit 249286d

Please sign in to comment.