00001 #include <iostream>
00002 #include <unistd.h>
00003
00004
00005 #include <QApplication>
00006
00007
00008 #include <mythcontext.h>
00009 #include <mythversion.h>
00010 #include <mythscreenstack.h>
00011 #include <mythmainwindow.h>
00012 #include <mythpluginapi.h>
00013
00014
00015 #include "bookmarkmanager.h"
00016 #include "browserdbutil.h"
00017 #include "mythbrowser.h"
00018 #include "mythflashplayer.h"
00019
00020 using namespace std;
00021
00022 static int handleMedia(const QString &url, const QString &directory, const QString &filename,
00023 const QString &, const QString &, int, int, const QString &, int,
00024 const QString &, const QString &, bool)
00025 {
00026 if (url.isEmpty())
00027 {
00028 LOG(VB_GENERAL, LOG_ERR, "MythBrowser: handleMedia got empty url!");
00029 return 1;
00030 }
00031
00032 QStringList urls = url.split(" ", QString::SkipEmptyParts);
00033 float zoom = gCoreContext->GetSetting("WebBrowserZoomLevel", "1.4").toFloat();
00034
00035 MythScreenStack *mainStack = GetMythMainWindow()->GetMainStack();
00036
00037 if (urls[0].startsWith("mythflash://"))
00038 {
00039 MythFlashPlayer *flashplayer = new MythFlashPlayer(mainStack, urls);
00040 if (flashplayer->Create())
00041 mainStack->AddScreen(flashplayer);
00042 else
00043 delete flashplayer;
00044 }
00045 else
00046 {
00047 MythBrowser *mythbrowser = new MythBrowser(mainStack, urls, zoom);
00048
00049 if (!directory.isEmpty())
00050 mythbrowser->setDefaultSaveDirectory(directory);
00051
00052 if (!filename.isEmpty())
00053 mythbrowser->setDefaultSaveFilename(filename);
00054
00055 if (mythbrowser->Create())
00056 mainStack->AddScreen(mythbrowser);
00057 else
00058 delete mythbrowser;
00059 }
00060
00061 return 0;
00062 }
00063
00064 static void setupKeys(void)
00065 {
00066 REG_KEY("Browser", "NEXTTAB", QT_TRANSLATE_NOOP("MythControls",
00067 "Move to next browser tab"), "P");
00068 REG_KEY("Browser", "PREVTAB", QT_TRANSLATE_NOOP("MythControls",
00069 "Move to previous browser tab"), "");
00070
00071 REG_MEDIAPLAYER("WebBrowser", QT_TRANSLATE_NOOP("MythControls",
00072 "Internal Web Browser"), handleMedia);
00073 }
00074
00075 int mythplugin_init(const char *libversion)
00076 {
00077 if (!gContext->TestPopupVersion("mythbrowser", libversion, MYTH_BINARY_VERSION))
00078 return -1;
00079
00080 UpgradeBrowserDatabaseSchema();
00081
00082 gCoreContext->ActivateSettingsCache(false);
00083
00084 if (gCoreContext->GetSetting("WebBrowserCommand").isEmpty())
00085 gCoreContext->SaveSetting("WebBrowserCommand", "Internal");
00086
00087 if (gCoreContext->GetSetting("WebBrowserZoomLevel").isEmpty())
00088 gCoreContext->SaveSetting("WebBrowserZoomLevel", "1.4");
00089
00090 gCoreContext->ActivateSettingsCache(true);
00091
00092 setupKeys();
00093
00094 return 0;
00095 }
00096
00097 int mythplugin_run(void)
00098 {
00099 MythScreenStack *mainStack = GetMythMainWindow()->GetMainStack();
00100
00101 BookmarkManager *manager = new BookmarkManager(mainStack, "bookmarkmanager");
00102
00103 if (manager->Create())
00104 {
00105 mainStack->AddScreen(manager);
00106 return 0;
00107 }
00108 else
00109 {
00110 delete manager;
00111 return -1;
00112 }
00113 }
00114
00115 int mythplugin_config(void)
00116 {
00117 MythScreenStack *mainStack = GetMythMainWindow()->GetMainStack();
00118
00119 BrowserConfig *config = new BrowserConfig(mainStack, "browserconfig");
00120
00121 if (config->Create())
00122 {
00123 mainStack->AddScreen(config);
00124 return 0;
00125 }
00126 else
00127 {
00128 delete config;
00129 return -1;
00130 }
00131 }