public: can control up to 9 separate displays
This commit is contained in:
parent
baf992bccb
commit
bc9d27aa94
@ -2,6 +2,7 @@ package api
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"os"
|
||||
"path"
|
||||
|
||||
@ -11,9 +12,9 @@ import (
|
||||
var TeamsDir string
|
||||
|
||||
func init() {
|
||||
router.GET("/api/public.json", apiHandler(getPublic))
|
||||
router.DELETE("/api/public.json", apiHandler(deletePublic))
|
||||
router.PUT("/api/public.json", apiHandler(savePublic))
|
||||
router.GET("/api/public/:sid", apiHandler(getPublic))
|
||||
router.DELETE("/api/public/:sid", apiHandler(deletePublic))
|
||||
router.PUT("/api/public/:sid", apiHandler(savePublic))
|
||||
}
|
||||
|
||||
type FICPublicScene struct {
|
||||
@ -52,23 +53,23 @@ func savePublicTo(path string, s []FICPublicScene) error {
|
||||
}
|
||||
}
|
||||
|
||||
func getPublic(_ httprouter.Params, body []byte) (interface{}, error) {
|
||||
if _, err := os.Stat(path.Join(TeamsDir, "_public", "public.json")); !os.IsNotExist(err) {
|
||||
return readPublic(path.Join(TeamsDir, "_public", "public.json"))
|
||||
func getPublic(ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
if _, err := os.Stat(path.Join(TeamsDir, "_public", fmt.Sprintf("public%s.json", ps.ByName("sid")))); !os.IsNotExist(err) {
|
||||
return readPublic(path.Join(TeamsDir, "_public", fmt.Sprintf("public%s.json", ps.ByName("sid"))))
|
||||
} else {
|
||||
return []FICPublicScene{}, nil
|
||||
}
|
||||
}
|
||||
|
||||
func deletePublic(_ httprouter.Params, body []byte) (interface{}, error) {
|
||||
if err := savePublicTo(path.Join(TeamsDir, "_public", "public.json"), []FICPublicScene{}); err != nil {
|
||||
func deletePublic(ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
if err := savePublicTo(path.Join(TeamsDir, "_public", fmt.Sprintf("public%s.json", ps.ByName("sid"))), []FICPublicScene{}); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return []FICPublicScene{}, err
|
||||
}
|
||||
}
|
||||
|
||||
func savePublic(_ httprouter.Params, body []byte) (interface{}, error) {
|
||||
func savePublic(ps httprouter.Params, body []byte) (interface{}, error) {
|
||||
var scenes []FICPublicScene
|
||||
if err := json.Unmarshal(body, &scenes); err != nil {
|
||||
return nil, err
|
||||
@ -80,7 +81,7 @@ func savePublic(_ httprouter.Params, body []byte) (interface{}, error) {
|
||||
}
|
||||
}
|
||||
|
||||
if err := savePublicTo(path.Join(TeamsDir, "_public", "public.json"), scenes); err != nil {
|
||||
if err := savePublicTo(path.Join(TeamsDir, "_public", fmt.Sprintf("public%s.json", ps.ByName("sid"))), scenes); err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
return scenes, err
|
||||
|
@ -33,7 +33,7 @@ const indextpl = `<!DOCTYPE html>
|
||||
<li class="nav-item"><a class="nav-link" href="{{.urlbase}}teams">Équipes</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="{{.urlbase}}themes">Thèmes</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="{{.urlbase}}exercices">Exercices</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="{{.urlbase}}public">Public</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="{{.urlbase}}public/0">Public</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="{{.urlbase}}events">Événements</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="{{.urlbase}}settings">Paramètres</a></li>
|
||||
</ul>
|
||||
|
@ -19,7 +19,7 @@ func init() {
|
||||
api.Router().GET("/events/*_", func(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
|
||||
http.ServeFile(w, r, path.Join(StaticDir, "index.html"))
|
||||
})
|
||||
api.Router().GET("/public", func(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
|
||||
api.Router().GET("/public/*_", func(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
|
||||
http.ServeFile(w, r, path.Join(StaticDir, "index.html"))
|
||||
})
|
||||
api.Router().GET("/settings/*_", func(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
|
||||
|
@ -31,7 +31,7 @@
|
||||
<li class="nav-item"><a class="nav-link" href="/teams">Équipes</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="/themes">Thèmes</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="/exercices">Exercices</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="/public">Public</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="/public/0">Public</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="/events">Événements</a></li>
|
||||
<li class="nav-item"><a class="nav-link" href="/settings">Paramètres</a></li>
|
||||
</ul>
|
||||
|
@ -41,7 +41,7 @@ angular.module("FICApp", ["ngRoute", "ngResource", "ngSanitize"])
|
||||
controller: "TeamController",
|
||||
templateUrl: "views/team-stats.html"
|
||||
})
|
||||
.when("/public", {
|
||||
.when("/public/:screenId", {
|
||||
controller: "PublicController",
|
||||
templateUrl: "views/public.html"
|
||||
})
|
||||
@ -77,7 +77,7 @@ angular.module("FICApp")
|
||||
})
|
||||
})
|
||||
.factory("Scene", function($resource) {
|
||||
return $resource("/api/public.json", null, {
|
||||
return $resource("/api/public/:screenId", { screenId: '@id' }, {
|
||||
'update': {method: 'PUT', isArray: true},
|
||||
})
|
||||
})
|
||||
@ -377,11 +377,20 @@ angular.module("FICApp")
|
||||
};
|
||||
})
|
||||
|
||||
.controller("PublicController", function($scope, $rootScope, Scene, Theme, Teams, Exercice) {
|
||||
$scope.scenes = Scene.query();
|
||||
.controller("PublicController", function($scope, $rootScope, $routeParams, $location, Scene, Theme, Teams, Exercice) {
|
||||
$scope.screens = [0,1,2,3,4,5,6,7,8,9];
|
||||
$scope.screenid = $routeParams.screenId;
|
||||
$scope.scenes = Scene.query({ screenId: $routeParams.screenId });
|
||||
$scope.themes = Theme.query();
|
||||
$scope.teams = Teams.get();
|
||||
|
||||
$scope.chScreen = function(sid) {
|
||||
if ($scope.screenid)
|
||||
$location.url("/public/" + $scope.screenid);
|
||||
else
|
||||
$location.url("/public/");
|
||||
}
|
||||
|
||||
$scope.types = {
|
||||
"welcome": "Messages de bienvenue",
|
||||
"countdown": "Compte à rebours",
|
||||
@ -462,9 +471,10 @@ angular.module("FICApp")
|
||||
];
|
||||
}
|
||||
};
|
||||
|
||||
$scope.saveScenes = function() {
|
||||
$scope.someUpdt = false;
|
||||
var prms = Scene.update($scope.scenes);
|
||||
var prms = Scene.update({ screenId: $scope.screenid }, $scope.scenes);
|
||||
prms.$promise.then(function() {
|
||||
$rootScope.newBox('success', 'Scene successfully published!');
|
||||
}, function(response) {
|
||||
|
@ -1,6 +1,7 @@
|
||||
<form ng-submit="saveScenes()" class="form-horizontal">
|
||||
<h2>
|
||||
Interface publique
|
||||
<select class="custom-select" id="screenid" ng-model="screenid" ng-options="k as 'Écran ' + v for (k, v) in screens" ng-change="chScreen()"></select>
|
||||
<div class="float-right dropdown">
|
||||
<button class="btn btn-secondary dropdown-toggle mr-sm-2" type="button" data-toggle="dropdown">
|
||||
Charger scène
|
||||
|
@ -131,7 +131,7 @@ angular.module("FICApp")
|
||||
})
|
||||
.controller("DataController", function($scope, $http, $rootScope, $interval) {
|
||||
var refreshScene = function() {
|
||||
$http.get("/public.json").then(function(response) {
|
||||
$http.get(window.location.pathname.replace(".html", ".json")).then(function(response) {
|
||||
if ($scope.lastpublicetag == response.headers().etag)
|
||||
return;
|
||||
$scope.lastpublicetag = response.headers().etag;
|
||||
|
Loading…
Reference in New Issue
Block a user