Skip to content

Commit 6948119

Browse files
authored
Merge pull request #11 from tasnimzotder/dev
update client
2 parents 54b2366 + 67b85aa commit 6948119

27 files changed

+606
-180
lines changed

.DS_Store

0 Bytes
Binary file not shown.

.github/workflows/release.yml

Lines changed: 9 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: Client Release
22

33
on:
44
push:
5-
branches: [ 'main' ]
5+
branches: ['main']
66
tags:
77
- 'v*'
88

@@ -11,8 +11,8 @@ jobs:
1111
runs-on: ${{ matrix.os }}
1212
strategy:
1313
matrix:
14-
os: [macos-14, ubuntu-latest]
15-
arch: [amd64, arm64]
14+
os: [macos-14, ubuntu-latest]
15+
arch: [amd64, arm64]
1616
exclude:
1717
- os: macos-14
1818
arch: amd64
@@ -21,7 +21,7 @@ jobs:
2121

2222
defaults:
2323
run:
24-
working-directory: ./client
24+
working-directory: ./client
2525

2626
steps:
2727
- name: Checkout repository
@@ -41,7 +41,7 @@ jobs:
4141
- name: Set GOOS for macOS
4242
if: matrix.os == 'macos-14'
4343
run: echo "GOOS=darwin" >> $GITHUB_ENV
44-
44+
4545
- name: Set GOOS for Ubuntu
4646
if: matrix.os == 'ubuntu-latest'
4747
run: echo "GOOS=linux" >> $GITHUB_ENV
@@ -51,49 +51,11 @@ jobs:
5151
CGO_ENABLED: 1
5252
GOOS: ${{ env.GOOS }}
5353
GOARCH: ${{ matrix.arch }}
54-
run: go build -o client
54+
run: go build -o /tmp/tchat.${{ env.GOOS }}.${{ matrix.arch }} -v
5555

5656
- name: Upload client artifact
5757
uses: actions/upload-artifact@v3
5858
with:
59-
name: tchat-${{ env.GOOS }}-${{ matrix.arch }}
60-
path: ./client
61-
62-
# release:
63-
# # if: startsWith(github.ref, 'refs/tags/v')
64-
# needs: build
65-
# runs-on: ubuntu-latest
66-
67-
# steps:
68-
# - name: Checkout code
69-
# uses: actions/checkout@v2
70-
71-
# - name: Download client artifact
72-
# uses: actions/download-artifact@v3
73-
# with:
74-
# path: .
75-
76-
# - name: Create Release
77-
# id: create_release
78-
# uses: actions/create-release@v1
79-
# env:
80-
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
81-
# with:
82-
# tag_name: ${{ github.ref }}
83-
# release_name: Release ${{ github.ref }}
84-
# body: |
85-
# Changes in this Release
86-
# - First Change
87-
# - Second Change
88-
# draft: true
89-
# prerelease: false
90-
91-
# - name: Upload release assets
92-
# uses: actions/upload-release-asset@v1
93-
# env:
94-
# GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
95-
# with:
96-
# upload_url: ${{ steps.create_release.outputs.upload_url }}
97-
# asset_path: ./tchat-*-*
98-
# asset_name: tchat-*-*
99-
# asset_content_type: application/octet-stream
59+
name: tchat.${{ env.GOOS }}.${{ matrix.arch }}
60+
path: /tmp/tchat.${{ env.GOOS }}.${{ matrix.arch }}
61+

Makefile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,6 @@ act-ci:
88
act-cd:
99
act --container-architecture linux/amd64 \
1010
--secret-file .env.local -W ./.github/workflows/cd.yml
11+
12+
copy_server:
13+
rsync -avz . root@tchat-api:/app/tchat --exclude client/bin --exclude webhook/venv

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
# tChat
22

3+
![logo](./assets/logo.png)
4+
35
Terminal chat application for developers. Share texts and files between users (or servers) using end-to-end encryption.
46

57
## Features

WORK_DIR/client

Lines changed: 0 additions & 1 deletion
This file was deleted.

assets/logo.png

3.93 KB
Loading

client/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ build_dev:
44
build:
55
CGO_ENABLED=1 go build -o bin/tchat main.go
66

7-
bin:
7+
install:
88
sudo cp bin/tchat /usr/local/bin/tchat
99

1010
test:

client/cmd/message_cmd.go

Lines changed: 86 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,14 @@ package cmd
22

33
import (
44
"fmt"
5+
"os"
56
"strconv"
67

8+
"github.com/manifoldco/promptui"
79
"github.com/spf13/cobra"
810
"github.com/tasnimzotder/tchat/_client/internal/display"
911
"github.com/tasnimzotder/tchat/_client/internal/storage"
12+
"github.com/tasnimzotder/tchat/_client/pkg/file"
1013
)
1114

1215
func messageCmd(storageClient *storage.Storage) *cobra.Command {
@@ -28,64 +31,53 @@ func messageCmd(storageClient *storage.Storage) *cobra.Command {
2831
return _messageCmd
2932
}
3033

31-
func messageCmdHandler(storageClient *storage.Storage, cmd *cobra.Command, args []string) error {
34+
func messageCmdHandler(storageClient *storage.Storage, cmd *cobra.Command, args []string) {
3235
clearFlag, err := cmd.Flags().GetBool("clear")
3336
if err != nil {
34-
return err
37+
return
3538
}
3639

3740
displayFlag, err := cmd.Flags().GetBool("display")
3841
if err != nil {
39-
return err
42+
return
4043
}
4144

4245
saveFlag, err := cmd.Flags().GetBool("save")
4346
if err != nil {
44-
return err
47+
return
4548
}
4649

47-
if saveFlag {
48-
// todo: implement
49-
fmt.Println("Saving last message")
50-
}
51-
52-
//sqlite, err := storage.NewSQLiteStorage()
53-
//if err != nil {
54-
// return err
55-
//}
56-
//
57-
//defer sqlite.Close()
58-
5950
userID, err := storageClient.GetUserID()
6051
if err != nil {
61-
return err
52+
return
6253
}
6354

6455
messages, err := storageClient.API.GetMessages(userID)
6556
if err != nil {
66-
return err
57+
return
6758
}
6859

6960
if clearFlag {
7061
err = storageClient.DeleteMessages()
7162

7263
if err != nil {
73-
return err
64+
return
7465
}
7566

76-
return nil
67+
return
7768
}
7869

7970
// save messages
8071
err = storageClient.SaveMessages(messages)
8172
if err != nil {
82-
return err
73+
return
8374
}
8475

8576
// get messages
8677
messages, err = storageClient.GetMessages()
8778
if err != nil {
88-
return err
79+
display.Error("Failed to get messages")
80+
return
8981
}
9082

9183
// reverse messages
@@ -103,26 +95,92 @@ func messageCmdHandler(storageClient *storage.Storage, cmd *cobra.Command, args
10395
// convert string to int
10496
idx, err = strconv.Atoi(_idx)
10597
if err != nil {
106-
return err
98+
display.Error("Invalid index")
99+
return
107100
}
108101

109102
if idx < 1 {
110-
return fmt.Errorf("index cannot be less than 1")
103+
display.Error("Index must be greater than 0")
104+
return
111105
}
112106

113107
}
114108

115109
if idx > len(messages) {
116-
display.PrintMessage("error", "Index out of range")
110+
// display.PrintMessage("error", "Index out of range")
111+
display.Error("Index out of range")
117112

118-
return fmt.Errorf("index out of range")
113+
// return fmt.Errorf("index out of range")
119114
}
120115

121-
message := messages[len(messages)-idx]
116+
message := messages[idx-1]
117+
// fmt.Println(message.FileSize)
122118
display.DisplaySingleMessage(storageClient, message)
123119
} else {
124120
display.DisplayMessages(storageClient, messages)
125121
}
126122

127-
return nil
123+
if saveFlag {
124+
// todo: implement
125+
fmt.Println("Saving last message")
126+
127+
idx := 1
128+
129+
if len(args) > 0 {
130+
_idx := args[0]
131+
132+
// convert string to int
133+
idx, err = strconv.Atoi(_idx)
134+
if err != nil {
135+
display.Error("Invalid index")
136+
return
137+
}
138+
139+
if idx < 1 {
140+
display.Error("Index must be greater than 0")
141+
return
142+
}
143+
}
144+
145+
if idx > len(messages) {
146+
display.Error("Index out of range")
147+
}
148+
149+
message := messages[idx-1]
150+
151+
if message.FileName == "" {
152+
filenamePrompt := promptui.Prompt{
153+
Label: "Enter filename",
154+
Validate: func(input string) error {
155+
if len(input) < 1 {
156+
return fmt.Errorf("filename must be at least 1 character")
157+
}
158+
return nil
159+
160+
},
161+
}
162+
163+
filename, err := filenamePrompt.Run()
164+
if err != nil {
165+
display.Error("Failed to get filename")
166+
return
167+
}
168+
169+
message.FileName = filename
170+
}
171+
172+
// save file
173+
currDir, err := os.Getwd()
174+
if err != nil {
175+
display.Error("Failed to get current directory")
176+
}
177+
178+
filePath := currDir + "/" + message.FileName
179+
err = file.SaveFile(filePath, []byte(message.Payload))
180+
if err != nil {
181+
display.Error("Failed to save file")
182+
}
183+
184+
return
185+
}
128186
}

client/cmd/root_cmd.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ package cmd
22

33
import (
44
"fmt"
5+
56
"github.com/spf13/cobra"
7+
"github.com/tasnimzotder/tchat/_client/internal/display"
68
"github.com/tasnimzotder/tchat/_client/internal/storage"
79
)
810

@@ -42,6 +44,8 @@ func Execute(storageClient *storage.Storage, versionStr string) error {
4244
rootCmd.AddCommand(setupCmd(storageClient))
4345
rootCmd.AddCommand(connectionCmd(storageClient))
4446
rootCmd.AddCommand(messageCmd(storageClient))
47+
rootCmd.AddCommand(sendMessageCmd(storageClient))
48+
rootCmd.AddCommand(pingCmd(storageClient))
4549

4650
// flag for version
4751
rootCmd.PersistentFlags().BoolP("version", "v", false, "Print version")
@@ -50,6 +54,21 @@ func Execute(storageClient *storage.Storage, versionStr string) error {
5054
return rootCmd.Execute()
5155
}
5256

57+
func pingCmd(storageClient *storage.Storage) *cobra.Command {
58+
return &cobra.Command{
59+
Use: "ping",
60+
Short: "Ping server",
61+
Run: func(cmd *cobra.Command, args []string) {
62+
err := storageClient.API.Ping()
63+
if err != nil {
64+
display.Error("Server is down")
65+
} else {
66+
display.Info("Server is up")
67+
}
68+
},
69+
}
70+
}
71+
5372
func printVersion(version string) error {
5473
fmt.Println(version)
5574
return nil

0 commit comments

Comments
 (0)