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