/*
Based up Neutrino-GUI - Tuxbox-Project
Copyright (C) 2001 by Steffen Hehn 'McClean'
License: GPL
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
***********************************************************
Module Name: mb_functions.h
Description: Implementation of the CMovieBrowser class
This class provides a filebrowser window to view, select and start a movies from HD.
This class does replace the Filebrowser
Date: Nov 2005
Author: Guenther@tuxbox.berlios.org
based on code of Steffen Hehn 'McClean'
(C) 2009-2014 Stefan Seyfried
(C) 2016 Sven Hoefer
outsourced:
(C) 2016, Thilo Graf 'dbt'
*/
#ifndef __MB_FUNCTIONS__
#define __MB_FUNCTIONS__
#include "mb_types.h"
#include
static std::string rateFormat(int i)
{
return to_string(i/10) + "," + to_string(i%10);
}
bool sortDirection = 0;
bool compare_to_lower(const char a, const char b)
{
return tolower(a) < tolower(b);
}
// sort operators
bool sortByTitle(const MI_MOVIE_INFO* a, const MI_MOVIE_INFO* b)
{
if (std::lexicographical_compare(a->epgTitle.begin(), a->epgTitle.end(), b->epgTitle.begin(), b->epgTitle.end(), compare_to_lower))
return true;
if (std::lexicographical_compare(b->epgTitle.begin(), b->epgTitle.end(), a->epgTitle.begin(), a->epgTitle.end(), compare_to_lower))
return false;
return a->file.Time < b->file.Time;
}
bool sortByGenre(const MI_MOVIE_INFO* a, const MI_MOVIE_INFO* b)
{
if (std::lexicographical_compare(a->epgInfo1.begin(), a->epgInfo1.end(), b->epgInfo1.begin(), b->epgInfo1.end(), compare_to_lower))
return true;
if (std::lexicographical_compare(b->epgInfo1.begin(), b->epgInfo1.end(), a->epgInfo1.begin(), a->epgInfo1.end(), compare_to_lower))
return false;
return sortByTitle(a,b);
}
bool sortByChannel(const MI_MOVIE_INFO* a, const MI_MOVIE_INFO* b)
{
if (std::lexicographical_compare(a->channelName.begin(), a->channelName.end(), b->channelName.begin(), b->channelName.end(), compare_to_lower))
return true;
if (std::lexicographical_compare(b->channelName.begin(), b->channelName.end(), a->channelName.begin(), a->channelName.end(), compare_to_lower))
return false;
return sortByTitle(a,b);
}
bool sortByFileName(const MI_MOVIE_INFO* a, const MI_MOVIE_INFO* b)
{
if (std::lexicographical_compare(a->file.getFileName().begin(), a->file.getFileName().end(), b->file.getFileName().begin(), b->file.getFileName().end(), compare_to_lower))
return true;
if (std::lexicographical_compare(b->file.getFileName().begin(), b->file.getFileName().end(), a->file.getFileName().begin(), a->file.getFileName().end(), compare_to_lower))
return false;
return a->file.Time < b->file.Time;
}
bool sortByRecordDate(const MI_MOVIE_INFO* a, const MI_MOVIE_INFO* b)
{
if (sortDirection)
return a->file.Time > b->file.Time ;
else
return a->file.Time < b->file.Time ;
}
bool sortBySize(const MI_MOVIE_INFO* a, const MI_MOVIE_INFO* b)
{
if (sortDirection)
return a->file.Size > b->file.Size;
else
return a->file.Size < b->file.Size;
}
bool sortByAge(const MI_MOVIE_INFO* a, const MI_MOVIE_INFO* b)
{
if (sortDirection)
return a->parentalLockAge > b->parentalLockAge;
else
return a->parentalLockAge < b->parentalLockAge;
}
bool sortByRating(const MI_MOVIE_INFO* a, const MI_MOVIE_INFO* b)
{
if (sortDirection)
return a->rating > b->rating;
else
return a->rating < b->rating;
}
bool sortByQuality(const MI_MOVIE_INFO* a, const MI_MOVIE_INFO* b)
{
if (sortDirection)
return a->quality > b->quality;
else
return a->quality < b->quality;
}
bool sortByDir(const MI_MOVIE_INFO* a, const MI_MOVIE_INFO* b)
{
if (sortDirection)
return a->dirItNr > b->dirItNr;
else
return a->dirItNr < b->dirItNr;
}
bool sortByLastPlay(const MI_MOVIE_INFO* a, const MI_MOVIE_INFO* b)
{
if (sortDirection)
return a->dateOfLastPlay > b->dateOfLastPlay;
else
return a->dateOfLastPlay < b->dateOfLastPlay;
}
bool (* const sortBy[MB_INFO_MAX_NUMBER+1])(const MI_MOVIE_INFO* a, const MI_MOVIE_INFO* b) =
{
&sortByFileName, //MB_INFO_FILENAME = 0,
&sortByDir, //MB_INFO_FILEPATH = 1,
&sortByTitle, //MB_INFO_TITLE = 2,
NULL, //MB_INFO_SERIE = 3,
&sortByGenre, //MB_INFO_INFO1 = 4,
NULL, //MB_INFO_MAJOR_GENRE = 5,
NULL, //MB_INFO_MINOR_GENRE = 6,
NULL, //MB_INFO_INFO2 = 7,
&sortByAge, //MB_INFO_PARENTAL_LOCKAGE = 8,
&sortByChannel, //MB_INFO_CHANNEL = 9,
NULL, //MB_INFO_BOOKMARK = 10,
&sortByQuality, //MB_INFO_QUALITY = 11,
&sortByLastPlay, //MB_INFO_PREVPLAYDATE = 12,
&sortByRecordDate, //MB_INFO_RECORDDATE = 13,
NULL, //MB_INFO_PRODDATE = 14,
NULL, //MB_INFO_COUNTRY = 15,
NULL, //MB_INFO_GEOMETRIE = 16,
NULL, //MB_INFO_AUDIO = 17,
NULL, //MB_INFO_LENGTH = 18,
&sortBySize, //MB_INFO_SIZE = 19,
&sortByRating, //MB_INFO_RATING = 20,
NULL, //MB_INFO_SPACER = 21,
NULL //MB_INFO_MAX_NUMBER = 22
};
#endif /*__MB_FUNCTIONS__*/