Skip to content
Snippets Groups Projects
Select Git revision
  • c339616717e9d0d587cd3eec838afc8fe09d37f6
  • main default protected
  • blm_dev_chan
  • release/1.4.0 protected
  • widgets_draw
  • return_of_melodic_demo
  • task_cleanup
  • mixer2
  • dx/fb-save-restore
  • dx/dldldld
  • fpletz/flake
  • dx/jacksense-headset-mic-only
  • release/1.3.0 protected
  • fil3s-limit-filesize
  • allow-reloading-sunmenu
  • wifi-json-error-handling
  • app_text_viewer
  • shoegaze-fps
  • media_has_video_has_audio
  • fil3s-media
  • more-accurate-battery
  • v1.4.0
  • v1.3.0
  • v1.2.0
  • v1.2.0+rc1
  • v1.1.1
  • v1.1.0
  • v1.1.0+rc1
  • v1.0.0
  • v1.0.0+rc6
  • v1.0.0+rc5
  • v1.0.0+rc4
  • v1.0.0+rc3
  • v1.0.0+rc2
  • v1.0.0+rc1
35 results

sys_buttons.rst

Blame
  • server.go 1.57 KiB
    package main
    
    import (
    	"context"
    	"log"
    	"sync"
    	"time"
    
    	"github.com/go-git/go-git/v5"
    )
    
    type server struct {
    	reqC chan *req
    
    	cacheMu sync.RWMutex
    	cache   map[string]map[string][]byte
    
    	gitMu     sync.Mutex
    	appRepo   *git.Repository
    	lastFetch time.Time
    }
    
    type req struct {
    	getReleases    chan []GLRelease
    	getAppRegistry chan []*appDescriptor
    }
    
    func (s *server) run(ctx context.Context) {
    	releases, err := getReleases(ctx)
    	if err != nil {
    		log.Fatalf("Initial release fetch failed: %v", err)
    	}
    	appRegistry, err := s.getAppRegistry(ctx)
    	if err != nil {
    		log.Fatalf("Initial app fetch failed: %v", err)
    	}
    
    	t := time.NewTicker(5 * 60 * time.Second)
    	for {
    		select {
    		case r := <-s.reqC:
    			if r.getReleases != nil {
    				r.getReleases <- releases
    			}
    			if r.getAppRegistry != nil {
    				r.getAppRegistry <- appRegistry
    			}
    		case <-t.C:
    			releases, err = getReleases(ctx)
    			if err != nil {
    				log.Printf("Failed to fetch releases: %v", err)
    			}
    			appRegistry, err = s.getAppRegistry(ctx)
    			if err != nil {
    				log.Printf("Failed to fetch app registry: %v", err)
    			}
    		}
    	}
    }
    
    func (s *server) getReleases(ctx context.Context) ([]GLRelease, error) {
    	sresC := make(chan []GLRelease)
    	select {
    	case s.reqC <- &req{getReleases: sresC}:
    		releases := <-sresC
    		return releases, nil
    	case <-ctx.Done():
    		return nil, ctx.Err()
    	}
    }