mirror of
https://github.com/tuxbox-fork-migrations/recycled-ni-neutrino.git
synced 2025-08-30 08:51:04 +02:00
CIntInput objects has been positioned unfavorable within scope
and caused possible crashes. This was not noticeable while compiling.
To avoid crashes and possible memleaks some parameters were added for CIntInput objects.
Origin commit data
------------------
Branch: ni/coolstream
Commit: 4bab95ba64
Author: Thilo Graf <dbt@novatux.de>
Date: 2019-06-16 (Sun, 16 Jun 2019)
------------------
This commit was generated by Migit
459 lines
14 KiB
C++
459 lines
14 KiB
C++
/*
|
|
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 <http://www.gnu.org/licenses/>.
|
|
|
|
***********************************************************
|
|
|
|
Module Name: mb.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
|
|
|
|
outsourced:
|
|
(C) 2016, Thilo Graf 'dbt'
|
|
*/
|
|
|
|
#ifndef MOVIEBROWSER_H_
|
|
#define MOVIEBROWSER_H_
|
|
|
|
#ifdef HAVE_CONFIG_H
|
|
#include <config.h>
|
|
#endif
|
|
|
|
#include "mb_types.h"
|
|
|
|
#include <configfile.h>
|
|
|
|
//#include <string>
|
|
#include <vector>
|
|
#include <list>
|
|
|
|
#include <gui/widget/textbox.h>
|
|
#include <gui/widget/listframe.h>
|
|
#include <driver/movieinfo.h>
|
|
#include <driver/file.h>
|
|
#include <driver/fb_window.h>
|
|
#include <system/ytparser.h>
|
|
#include <gui/widget/progresswindow.h>
|
|
#include <gui/widget/stringinput_ext.h>
|
|
#include <gui/imdb.h>
|
|
|
|
#define MAX_NUMBER_OF_BOOKMARK_ITEMS MI_MOVIE_BOOK_USER_MAX // we just use the same size as used in Movie info (MAX_NUMBER_OF_BOOKMARK_ITEMS is used for the number of menu items)
|
|
#define MOVIEBROWSER_SETTINGS_FILE CONFIGDIR "/moviebrowser.conf"
|
|
|
|
/* percent */
|
|
#define MIN_BROWSER_FRAME_HEIGHT 10
|
|
#define MAX_BROWSER_FRAME_HEIGHT 80
|
|
|
|
#define MB_MAX_ROWS LF_MAX_ROWS
|
|
#define MB_MAX_DIRS NETWORK_NFS_NR_OF_ENTRIES
|
|
|
|
/* MB_SETTINGS to be stored in g_settings anytime ....*/
|
|
struct MBStorageSettings
|
|
{
|
|
std::string storageDir[MB_MAX_DIRS];
|
|
int storageDirUsed[MB_MAX_DIRS];
|
|
int storageDirRecUsed;
|
|
int storageDirMovieUsed;
|
|
};
|
|
|
|
typedef struct
|
|
{
|
|
// moviebrowser
|
|
MB_GUI gui; //MB_GUI
|
|
MB_SORTING sorting; //MB_SORTING
|
|
MB_FILTER filter;//MB_FILTER
|
|
MI_PARENTAL_LOCKAGE parentalLockAge ;//MI_PARENTAL_LOCKAGE
|
|
MB_PARENTAL_LOCK parentalLock;//MB_PARENTAL_LOCK
|
|
|
|
MBStorageSettings store;
|
|
|
|
int reload;
|
|
int remount;
|
|
int ts_only;
|
|
|
|
int browser_serie_mode;
|
|
int serie_auto_create;
|
|
|
|
/* these variables are used for the listframes */
|
|
int browserFrameHeight;
|
|
int browserFrameHeightGeneral;
|
|
int browserFrameHeightAdditional;
|
|
int browserRowNr;
|
|
MB_INFO_ITEM browserRowItem[MB_MAX_ROWS];
|
|
int browserRowWidth[MB_MAX_ROWS];
|
|
int browserAdditional;
|
|
int browserCutLongRowText;
|
|
|
|
// to be added to config later
|
|
int lastPlayMaxItems;
|
|
int lastPlayRowNr;
|
|
MB_INFO_ITEM lastPlayRow[3];
|
|
int lastPlayRowWidth[3];
|
|
|
|
int lastRecordMaxItems;
|
|
int lastRecordRowNr;
|
|
MB_INFO_ITEM lastRecordRow[3];
|
|
int lastRecordRowWidth[3];
|
|
|
|
int ytmode;
|
|
int ytorderby;
|
|
int ytresults;
|
|
int ytquality;
|
|
int ytconcconn;
|
|
int ytsearch_history_size;
|
|
int ytsearch_history_max;
|
|
std::string ytregion;
|
|
std::string ytvid;
|
|
std::string ytsearch;
|
|
std::string ytthumbnaildir;
|
|
std::list<std::string> ytsearch_history;
|
|
} MB_SETTINGS;
|
|
|
|
|
|
class CMovieBrowser;
|
|
|
|
class CYTCacheSelectorTarget : public CMenuTarget
|
|
{
|
|
private:
|
|
class CMovieBrowser *movieBrowser;
|
|
public:
|
|
CYTCacheSelectorTarget(CMovieBrowser *mb) { movieBrowser = mb; };
|
|
int exec(CMenuTarget* parent, const std::string & actionKey);
|
|
};
|
|
|
|
// Priorities for Developmemt: P1: critical feature, P2: important feature, P3: for next release, P4: looks nice, lets see
|
|
class CMovieBrowser : public CMenuTarget, public CProgressSignals
|
|
{
|
|
friend class CYTCacheSelectorTarget;
|
|
|
|
public: // Variables /////////////////////////////////////////////////
|
|
int Multi_Select; // for FileBrowser compatibility, not used in MovieBrowser
|
|
int Dirs_Selectable; // for FileBrowser compatibility, not used in MovieBrowser
|
|
|
|
private: // Variables
|
|
CFrameBuffer * framebuffer;
|
|
|
|
CListFrame* m_pcBrowser;
|
|
CListFrame* m_pcLastPlay;
|
|
CListFrame* m_pcLastRecord;
|
|
CTextBox* m_pcInfo1; // bottom box
|
|
CTextBox* m_pcInfo2; // right box
|
|
CListFrame* m_pcFilter;
|
|
|
|
CBox m_cBoxFrame;
|
|
CBox m_cBoxFrameLastPlayList;
|
|
CBox m_cBoxFrameLastRecordList;
|
|
CBox m_cBoxFrameBrowserList;
|
|
CBox m_cBoxFrameInfo1;
|
|
CBox m_cBoxFrameInfo2;
|
|
CBox m_cBoxFrameBookmarkList;
|
|
CBox m_cBoxFrameFilter;
|
|
CBox m_cBoxFrameFootRel;
|
|
CBox m_cBoxFrameTitleRel;
|
|
|
|
CComponentsHeader *m_header;
|
|
CComponentsDetailsLine *m_detailsLine;
|
|
CComponentsChannelLogo *m_channelLogo;
|
|
CComponentsPicture *m_movieCover;
|
|
|
|
lf_line_types_t m_browserListLines;
|
|
lf_line_types_t m_recordListLines;
|
|
lf_line_types_t m_playListLines;
|
|
lf_line_types_t m_FilterLines;
|
|
|
|
std::vector<MI_MOVIE_INFO> m_vMovieInfo;
|
|
std::vector<MI_MOVIE_INFO*> m_vHandleBrowserList;
|
|
std::vector<MI_MOVIE_INFO*> m_vHandleRecordList;
|
|
std::vector<MI_MOVIE_INFO*> m_vHandlePlayList;
|
|
std::vector<std::string> m_dirNames;
|
|
std::vector<MI_MOVIE_INFO*> m_vHandleSerienames;
|
|
|
|
unsigned int m_currentBrowserSelection;
|
|
unsigned int m_currentRecordSelection;
|
|
unsigned int m_currentPlaySelection;
|
|
unsigned int m_currentFilterSelection;
|
|
unsigned int m_prevBrowserSelection;
|
|
unsigned int m_prevRecordSelection;
|
|
unsigned int m_prevPlaySelection;
|
|
|
|
bool m_showBrowserFiles;
|
|
bool m_showLastRecordFiles;
|
|
bool m_showLastPlayFiles;
|
|
bool m_showMovieInfo;
|
|
bool m_showFilter;
|
|
bool newHeader;
|
|
bool m_doRefresh;
|
|
bool m_doLoadMovies;
|
|
|
|
MI_MOVIE_INFO* m_movieSelectionHandler;
|
|
int m_currentStartPos;
|
|
std::string m_selectedDir;
|
|
MB_FOCUS m_windowFocus;
|
|
|
|
bool m_file_info_stale; // if this bit is set, MovieBrowser shall reload all movie infos from HD
|
|
bool m_seriename_stale;
|
|
|
|
Font* m_pcFontFoot;
|
|
Font* m_pcFontTitle;
|
|
std::string m_textTitle;
|
|
|
|
MB_PARENTAL_LOCK m_parentalLock;
|
|
MB_STORAGE_TYPE m_storageType;
|
|
|
|
CConfigFile configfile;
|
|
CMovieInfo m_movieInfo;
|
|
MB_SETTINGS m_settings;
|
|
std::vector<MB_DIR> m_dir;
|
|
|
|
CFileList filelist;
|
|
CFileList::iterator filelist_it;
|
|
P_MI_MOVIE_LIST movielist;
|
|
|
|
uint64_t old_EpgId;
|
|
std::string old_ChannelName;
|
|
|
|
int movieInfoUpdateAll[MB_INFO_MAX_NUMBER];
|
|
int movieInfoUpdateAllIfDestEmptyOnly;
|
|
|
|
std::vector<std::string> PicExts;
|
|
std::string getScreenshotName(std::string movie, bool is_dir = false);
|
|
|
|
int menu_ret;
|
|
|
|
cYTFeedParser ytparser;
|
|
int show_mode;
|
|
CMenuWidget *yt_menue;
|
|
CYTCacheSelectorTarget *ytcache_selector;
|
|
u_int yt_menue_end;
|
|
int yt_pending_offset;
|
|
int yt_completed_offset;
|
|
int yt_failed_offset;
|
|
int yt_pending_end;
|
|
int yt_completed_end;
|
|
int yt_failed_end;
|
|
std::vector<MI_MOVIE_INFO> yt_pending;
|
|
std::vector<MI_MOVIE_INFO> yt_completed;
|
|
std::vector<MI_MOVIE_INFO> yt_failed;
|
|
void loadYTitles(int mode, std::string search = "", std::string id = "");
|
|
bool showYTMenu(bool calledExternally = false);
|
|
void refreshYTMenu();
|
|
CIMDB *imdb;
|
|
|
|
public: // Functions //////////////////////////////////////////////////////////7
|
|
CMovieBrowser(); //P1
|
|
~CMovieBrowser(); //P1
|
|
int exec(const char* path); //P1
|
|
int exec(CMenuTarget* parent, const std::string & actionKey);
|
|
std::string getCurrentDir(void); //P1 for FileBrowser compatibility
|
|
CFile* getSelectedFile(void); //P1 for FileBrowser compatibility
|
|
bool getSelectedFiles(CFileList &flist, P_MI_MOVIE_LIST &mlist); //P1 for FileBrowser compatibility
|
|
MI_MOVIE_BOOKMARKS* getCurrentMovieBookmark(void){if(m_movieSelectionHandler == NULL) return NULL; return(&(m_movieSelectionHandler->bookmarks));};
|
|
int getCurrentStartPos(void){return(m_currentStartPos);}; //P1 return start position in [s]
|
|
MI_MOVIE_INFO* getCurrentMovieInfo(void){return(m_movieSelectionHandler);}; //P1 return start position in [s]
|
|
void fileInfoStale(void); // call this function to force the Moviebrowser to reload all movie information from HD
|
|
|
|
bool readDir(const std::string & dirname, CFileList* flist);
|
|
|
|
bool delFile(CFile& file);
|
|
int getMenuRet() { return menu_ret; }
|
|
int getMode() { return show_mode; }
|
|
void setMode(int mode) {
|
|
if (show_mode != mode)
|
|
m_file_info_stale = true;
|
|
show_mode = mode;
|
|
}
|
|
bool gotMovie(const char *rec_title);
|
|
|
|
private: //Functions
|
|
///// MovieBrowser init ///////////////
|
|
void init(void); //P1
|
|
void initGlobalSettings(void); //P1
|
|
void initGlobalStorageSettings(void);
|
|
void initFrames(void);
|
|
void initRows(void);
|
|
void reinit(void); //P1
|
|
|
|
///// MovieBrowser Main Window//////////
|
|
int paint(void); //P1
|
|
void refresh(void); //P1
|
|
void hide(void); //P1
|
|
void refreshLastPlayList(void); //P2
|
|
void refreshLastRecordList(void); //P2
|
|
void refreshBrowserList(void); //P1
|
|
void refreshFilterList(void); //P1
|
|
void refreshMovieInfo(void); //P1
|
|
void refreshChannelLogo(void); //P1
|
|
void initMovieCover(void); //P1
|
|
void refreshMovieCover(void); //P1
|
|
void hideMovieCover(void); //P1
|
|
int refreshFoot(bool show = true); //P2
|
|
void refreshTitle(void); //P2
|
|
void refreshInfo(void); // P2
|
|
void refreshLCD(void); // P2
|
|
void refreshDetailsLine(int pos);
|
|
void hideDetailsLine();
|
|
|
|
///// Events ///////////////////////////
|
|
bool onButtonPress(neutrino_msg_t msg); // P1
|
|
bool onButtonPressMainFrame(neutrino_msg_t msg); // P1
|
|
bool onButtonPressBrowserList(neutrino_msg_t msg); // P1
|
|
bool onButtonPressLastPlayList(neutrino_msg_t msg); // P2
|
|
bool onButtonPressLastRecordList(neutrino_msg_t msg); // P2
|
|
bool onButtonPressFilterList(neutrino_msg_t msg); // P2
|
|
bool onButtonPressMovieInfoList(neutrino_msg_t msg); // P2
|
|
void markItem(CListFrame *list);
|
|
void scrollBrowserItem(bool next, bool page);
|
|
void onSetFocus(MB_FOCUS new_focus); // P2
|
|
void onSetFocusNext(void); // P2
|
|
void onSetFocusPrev(void); // P2
|
|
void onSetGUIWindow(MB_GUI gui);
|
|
void onSetGUIWindowNext(void);
|
|
void onSetGUIWindowPrev(void);
|
|
bool onDelete(bool cursor_only = false);
|
|
std::string formatDeleteMsg(MI_MOVIE_INFO *movieinfo, int msgFont, const int boxWidth = 450);
|
|
bool onDeleteFile(MI_MOVIE_INFO *movieinfo, bool skipAsk = false); // P4
|
|
bool onSortMovieInfoHandleList(std::vector<MI_MOVIE_INFO*>& pv_handle_list, MB_INFO_ITEM sort_type, MB_DIRECTION direction);
|
|
|
|
///// parse Storage Directories /////////////
|
|
bool addDir(std::string& dirname, int* used);
|
|
void updateDir(void);
|
|
void loadAllTsFileNamesFromStorage(void); // P1
|
|
bool loadTsFileNamesFromDir(const std::string & dirname); // P1
|
|
void getStorageInfo(void); // P3
|
|
|
|
///// Menu ////////////////////////////////////
|
|
bool showMenu(bool calledExternally = false);
|
|
void initBookMarkMenu(CMenuWidget *BookmarkMenu, MI_MOVIE_INFO* movie_info, CIntInput* BookStartIntInput, CIntInput* BookLastIntInput, CIntInput* BookEndIntInput);
|
|
int showMovieInfoMenu(MI_MOVIE_INFO* movie_info); // P2
|
|
int showMovieCutMenu(); // P2
|
|
int showStartPosSelectionMenu(void); // P2
|
|
|
|
///// settings ///////////////////////////////////
|
|
bool loadSettings(MB_SETTINGS* settings); // P2
|
|
bool saveSettings(MB_SETTINGS* settings); // P2
|
|
void defaultSettings(MB_SETTINGS* settings);
|
|
|
|
///// EPG_DATA /XML ///////////////////////////////
|
|
void loadMovies(bool doRefresh = true);
|
|
void loadAllMovieInfo(void); // P1
|
|
void saveMovieInfo(std::string* filename, MI_MOVIE_INFO* movie_info); // P2
|
|
|
|
// misc
|
|
void showHelp(void);
|
|
bool isFiltered(MI_MOVIE_INFO& movie_info);
|
|
bool isParentalLock(MI_MOVIE_INFO& movie_info);
|
|
bool getMovieInfoItem(MI_MOVIE_INFO& movie_info, MB_INFO_ITEM item, std::string* item_string);
|
|
void updateMovieSelection(void);
|
|
void updateInfoSelection(void);
|
|
void updateFilterSelection(void);
|
|
void updateSerienames(void);
|
|
void autoFindSerie(void);
|
|
|
|
void info_hdd_level(bool paint_hdd=false);
|
|
|
|
neutrino_locale_t getFeedLocale(void);
|
|
void clearListLines();
|
|
void clearSelection();
|
|
bool supportedExtension(CFile &file);
|
|
bool addFile(CFile &file, int dirItNr);
|
|
|
|
void changeBrowserHeight(CMenuForwarder* fw1, CMenuForwarder* fw2);
|
|
};
|
|
|
|
// I tried a lot to use the menu.cpp as ListBox selection, and I got three solution which are all garbage.
|
|
//Might be replaced by somebody who is familiar with this stuff .
|
|
|
|
// CLass to verifiy a menu was selected by the user. There might be better ways to do so.
|
|
class CSelectedMenu : public CMenuTarget
|
|
{
|
|
public:
|
|
bool selected;
|
|
CSelectedMenu(void){selected = false;};
|
|
inline int exec(CMenuTarget* /*parent*/, const std::string & /*actionKey*/){selected = true; return menu_return::RETURN_EXIT;};
|
|
};
|
|
|
|
// This Class creates a menue item, which writes its caption to an given string (or an given int value to an given variable).
|
|
// The programm could use this class to verify, what menu was selected.
|
|
// A good listbox class might do the same. There might be better ways to do so.
|
|
#define BUFFER_MAX 20
|
|
class CMenuSelector : public CMenuItem
|
|
{
|
|
private:
|
|
const char * optionName;
|
|
char * optionValue;
|
|
std::string* optionValueString;
|
|
int returnIntValue;
|
|
int* returnInt;
|
|
int height;
|
|
char buffer[BUFFER_MAX];
|
|
public:
|
|
CMenuSelector(const char * OptionName, const bool Active = true, char * OptionValue = NULL, int* ReturnInt = NULL,int ReturnIntValue = 0);
|
|
CMenuSelector(const char * OptionName, const bool Active , std::string & OptionValue, int* ReturnInt = NULL,int ReturnIntValue = 0);
|
|
int exec(CMenuTarget* parent);
|
|
int paint(bool selected);
|
|
int getHeight(void) const{return height;};
|
|
bool isSelectable(void) const { return active;}
|
|
};
|
|
|
|
// CLass to get the menu line selected by the user. There might be better ways to do so.
|
|
class CMenuWidgetSelection : public CMenuWidget
|
|
{
|
|
public:
|
|
CMenuWidgetSelection(const neutrino_locale_t Name, const std::string & Icon = "", const int mwidth = 30) : CMenuWidget(Name, Icon, mwidth){;};
|
|
int getSelectedLine(void){return no_action ? -1 : selected;};
|
|
};
|
|
|
|
class CFileChooser : public CMenuWidget
|
|
{
|
|
private:
|
|
std::string* dirPath;
|
|
|
|
public:
|
|
CFileChooser(std::string* path){dirPath= path;};
|
|
int exec(CMenuTarget* parent, const std::string & actionKey);
|
|
};
|
|
|
|
class CDirMenu : public CMenuWidget
|
|
{
|
|
private:
|
|
std::vector<MB_DIR>* dirList;
|
|
DIR_STATE dirState[MB_MAX_DIRS];
|
|
std::string dirOptionText[MB_MAX_DIRS];
|
|
int dirNfsMountNr[MB_MAX_DIRS];
|
|
bool changed;
|
|
|
|
void updateDirState(void);
|
|
|
|
public:
|
|
CDirMenu(std::vector<MB_DIR>* dir_list);
|
|
int exec(CMenuTarget* parent, const std::string & actionKey);
|
|
int show(void);
|
|
bool isChanged(){return changed;};
|
|
};
|
|
|
|
#endif /*MOVIEBROWSER_H_*/
|