Skip to content

Commit a877db6

Browse files
committed
Add sync-device GET endpoint and fix old references
- Modify old references to legacy implementation of sync
1 parent d541c1d commit a877db6

2 files changed

Lines changed: 58 additions & 6 deletions

File tree

pkg/apis/handlers.go

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -545,8 +545,43 @@ func (e *EpisodeAPI) HandleUploadEpisodeAction(w http.ResponseWriter, r *http.Re
545545
// GET /api/2/sync-devices/{username}.json
546546
func (s *SyncAPI) HandleGetSync(w http.ResponseWriter, r *http.Request) {
547547

548-
// username := chi.URLParam(r, "username")
549-
w.Write([]byte(`{}`))
548+
username := chi.URLParam(r, "username")
549+
550+
syncStatus := &SyncDeviceStatus{}
551+
552+
db := s.Data
553+
554+
syncIds, err := db.GetDeviceSyncGroupIds(username)
555+
if err != nil {
556+
log.Printf("error getting sync devices for username (%s): %s", username, err)
557+
w.WriteHeader(500)
558+
return
559+
}
560+
notsyncDevices, err := db.GetNotSyncedDevices(username)
561+
if err != nil {
562+
log.Printf("error getting not_synced devices for username (%s): %s", username, err)
563+
w.WriteHeader(500)
564+
return
565+
}
566+
567+
syncStatus.NotSynchronize = notsyncDevices
568+
569+
for _, id := range syncIds {
570+
sync, err := db.GetDeviceNameFromDeviceSyncGroupId(id)
571+
if err != nil {
572+
log.Printf("error retrieving devices from sync group_id: (%d): %s", id, err)
573+
}
574+
575+
syncStatus.Synchronized = append(syncStatus.Synchronized, sync)
576+
}
577+
578+
jsonBytes, err := json.Marshal(syncStatus)
579+
if err != nil {
580+
log.Printf("error marshalling sync status: %#v", err)
581+
w.WriteHeader(500)
582+
}
583+
584+
w.Write(jsonBytes)
550585
}
551586

552587
// POST /api/2/sync-devices/{username}.json

pkg/data/sqlite.go

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import (
66
"fmt"
77
"log"
88
"strconv"
9+
"strings"
910
"sync"
1011
"time"
1112

@@ -589,7 +590,7 @@ func (s *SQLite) GetDeviceSyncGroupIds(username string) ([]int, error) {
589590

590591
db := s.db
591592

592-
rows, err := db.Query("select distinct device_sync_group_id from devices WHERE user_id = (select id from users WHERE username = ?);", username)
593+
rows, err := db.Query("select device_sync_group_id from device_sync_group_devices WHERE device_id = (SELECT id from devices WHERE user_id = (select id from users WHERE username = ?));", username)
593594
if err != nil {
594595
return ids, err
595596
}
@@ -614,7 +615,7 @@ func (s *SQLite) GetDeviceNameFromDeviceSyncGroupId(id int) ([]string, error) {
614615
var names []string
615616
db := s.db
616617

617-
rows, err := db.Query("select name from devices where device_sync_group_id = ?;", id)
618+
rows, err := db.Query("select name from devices where id IN (select device_id FROM device_sync_group_devices WHERE device_sync_group_id = ?);", id)
618619
if err != nil {
619620
return names, err
620621
}
@@ -639,15 +640,31 @@ func (s *SQLite) GetNotSyncedDevices(username string) ([]string, error) {
639640
var devices []string
640641

641642
db := s.db
642-
rows, err := db.Query("select name from devices where device_sync_group_id = null;")
643+
644+
userId, err := s.GetUserIdFromName(username)
645+
if err != nil {
646+
return nil, err
647+
}
648+
deviceGroupIds, err := s.GetDeviceSyncGroupIds(username)
649+
if err != nil {
650+
return nil, err
651+
}
652+
stringValues := []string{}
653+
for _, v := range deviceGroupIds {
654+
stringValues = append(stringValues, strconv.Itoa(v))
655+
}
656+
values := strings.Join(stringValues, ",")
657+
658+
rows, err := db.Query("select name from devices where user_id = $1 AND id NOT IN (select device_id FROM device_sync_group_devices WHERE device_sync_group_id IN ($2));", userId, values)
643659
if err != nil {
644660
return devices, err
645661
}
646662

647663
for rows.Next() {
648664

649665
var name string
650-
if err := rows.Scan(name); err != nil {
666+
if err := rows.Scan(&name); err != nil {
667+
fmt.Printf("error scanning rows: %#v", err)
651668
return devices, err
652669
}
653670

0 commit comments

Comments
 (0)