remember a shuffle seed to remain page reload
This commit is contained in:
		@@ -2,6 +2,7 @@ package api
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
 | 
						"math/rand"
 | 
				
			||||||
	"net/url"
 | 
						"net/url"
 | 
				
			||||||
	"openmediacenter/apiGo/api/api"
 | 
						"openmediacenter/apiGo/api/api"
 | 
				
			||||||
	"openmediacenter/apiGo/api/types"
 | 
						"openmediacenter/apiGo/api/types"
 | 
				
			||||||
@@ -163,18 +164,25 @@ func getVideoHandlers() {
 | 
				
			|||||||
	api.AddHandler("getRandomMovies", api.VideoNode, api.PermUser, func(context api.Context) {
 | 
						api.AddHandler("getRandomMovies", api.VideoNode, api.PermUser, func(context api.Context) {
 | 
				
			||||||
		var args struct {
 | 
							var args struct {
 | 
				
			||||||
			Number int
 | 
								Number int
 | 
				
			||||||
 | 
								Seed   *int
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		if api.DecodeRequest(context.GetRequest(), &args) != nil {
 | 
							if api.DecodeRequest(context.GetRequest(), &args) != nil {
 | 
				
			||||||
			context.Text("unable to decode request")
 | 
								context.Text("unable to decode request")
 | 
				
			||||||
			return
 | 
								return
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// if Seed argument not passed generate random seed
 | 
				
			||||||
 | 
							if args.Seed == nil {
 | 
				
			||||||
 | 
								r := rand.Int()
 | 
				
			||||||
 | 
								args.Seed = &r
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		var result struct {
 | 
							var result struct {
 | 
				
			||||||
			Tags   []types.Tag
 | 
								Tags   []types.Tag
 | 
				
			||||||
			Videos []types.VideoUnloadedType
 | 
								Videos []types.VideoUnloadedType
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		query := fmt.Sprintf("SELECT movie_id,movie_name FROM videos ORDER BY RAND() LIMIT %d", args.Number)
 | 
							query := fmt.Sprintf("SELECT movie_id,movie_name FROM videos ORDER BY RAND(%d) LIMIT %d", *args.Seed, args.Number)
 | 
				
			||||||
		result.Videos = readVideosFromResultset(database.Query(query))
 | 
							result.Videos = readVideosFromResultset(database.Query(query))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		var ids string
 | 
							var ids string
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -90,14 +90,12 @@ describe('<HomePage/>', function () {
 | 
				
			|||||||
        const wrapper = shallow(<HomePage/>);
 | 
					        const wrapper = shallow(<HomePage/>);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // expect those default values
 | 
					        // expect those default values
 | 
				
			||||||
        expect(wrapper.state().sortby).toBe('Date Added');
 | 
					        expect(wrapper.state().sortby).toBe(0);
 | 
				
			||||||
        expect(wrapper.instance().sortState).toBe(SortBy.date);
 | 
					 | 
				
			||||||
        expect(wrapper.instance().tagState).toBe(DefaultTags.all);
 | 
					        expect(wrapper.instance().tagState).toBe(DefaultTags.all);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        wrapper.instance().onDropDownItemClick(SortBy.name, 'namesort');
 | 
					        wrapper.instance().onDropDownItemClick(SortBy.name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        expect(wrapper.state().sortby).toBe('namesort');
 | 
					        expect(wrapper.state().sortby).toBe(SortBy.name);
 | 
				
			||||||
        expect(wrapper.instance().sortState).toBe(SortBy.name);
 | 
					 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,9 +25,18 @@ interface GetRandomMoviesType {
 | 
				
			|||||||
class RandomPage extends React.Component<{}, state> {
 | 
					class RandomPage extends React.Component<{}, state> {
 | 
				
			||||||
    readonly LoadNR = 3;
 | 
					    readonly LoadNR = 3;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // random seed to load videos, remains page reload.
 | 
				
			||||||
 | 
					    seed = this.genRandInt();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    constructor(props: {}) {
 | 
					    constructor(props: {}) {
 | 
				
			||||||
        super(props);
 | 
					        super(props);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // get previously stored location from localstorage
 | 
				
			||||||
 | 
					        const storedseed = global.localStorage.getItem('randpageseed');
 | 
				
			||||||
 | 
					        if (storedseed != null) {
 | 
				
			||||||
 | 
					            this.seed = parseInt(storedseed, 10);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        this.state = {
 | 
					        this.state = {
 | 
				
			||||||
            videos: [],
 | 
					            videos: [],
 | 
				
			||||||
            tags: []
 | 
					            tags: []
 | 
				
			||||||
@@ -36,6 +45,10 @@ class RandomPage extends React.Component<{}, state> {
 | 
				
			|||||||
        this.keypress = this.keypress.bind(this);
 | 
					        this.keypress = this.keypress.bind(this);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    genRandInt(): number {
 | 
				
			||||||
 | 
					        return Math.floor(Math.random() * 2147483647) + 1;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    componentDidMount(): void {
 | 
					    componentDidMount(): void {
 | 
				
			||||||
        addKeyHandler(this.keypress);
 | 
					        addKeyHandler(this.keypress);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -77,15 +90,21 @@ class RandomPage extends React.Component<{}, state> {
 | 
				
			|||||||
     * click handler for shuffle btn
 | 
					     * click handler for shuffle btn
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    shuffleclick(): void {
 | 
					    shuffleclick(): void {
 | 
				
			||||||
 | 
					        this.genSeed();
 | 
				
			||||||
        this.loadShuffledvideos(this.LoadNR);
 | 
					        this.loadShuffledvideos(this.LoadNR);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    genSeed(): void {
 | 
				
			||||||
 | 
					        this.seed = this.genRandInt();
 | 
				
			||||||
 | 
					        global.localStorage.setItem('randpageseed', this.seed.toString());
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    /**
 | 
					    /**
 | 
				
			||||||
     * load random videos from backend
 | 
					     * load random videos from backend
 | 
				
			||||||
     * @param nr number of videos to load
 | 
					     * @param nr number of videos to load
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
    loadShuffledvideos(nr: number): void {
 | 
					    loadShuffledvideos(nr: number): void {
 | 
				
			||||||
        callAPI<GetRandomMoviesType>(APINode.Video, {action: 'getRandomMovies', Number: nr}, (result) => {
 | 
					        callAPI<GetRandomMoviesType>(APINode.Video, {action: 'getRandomMovies', Number: nr, Seed: this.seed}, (result) => {
 | 
				
			||||||
            this.setState({videos: []}); // needed to trigger rerender of main videoview
 | 
					            this.setState({videos: []}); // needed to trigger rerender of main videoview
 | 
				
			||||||
            this.setState({
 | 
					            this.setState({
 | 
				
			||||||
                videos: result.Videos,
 | 
					                videos: result.Videos,
 | 
				
			||||||
@@ -101,7 +120,8 @@ class RandomPage extends React.Component<{}, state> {
 | 
				
			|||||||
    private keypress(event: KeyboardEvent): void {
 | 
					    private keypress(event: KeyboardEvent): void {
 | 
				
			||||||
        // bind s to shuffle
 | 
					        // bind s to shuffle
 | 
				
			||||||
        if (event.key === 's') {
 | 
					        if (event.key === 's') {
 | 
				
			||||||
            this.loadShuffledvideos(4);
 | 
					            this.genSeed();
 | 
				
			||||||
 | 
					            this.loadShuffledvideos(this.LoadNR);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user