/*check if modules directory has changed in the config file */ static void check_modules_dir(GF_Config *cfg) { char path[GF_MAX_PATH]; #ifdef GPAC_IPHONE char *cfg_path; if ( get_default_install_path(path, GF_PATH_GUI) ) { char *sep; char shader_path[GF_MAX_PATH]; strcat(path, "/gui.bt"); gf_cfg_set_key(cfg, "General", "StartupFile", path); //get rid of "/gui/gui.bt" sep = strrchr(path, '/'); sep[0] = 0; sep = strrchr(path, '/'); sep[0] = 0; sprintf(shader_path, "%s%cshaders%cvertex.glsl", path, GF_PATH_SEPARATOR, GF_PATH_SEPARATOR); gf_cfg_set_key(cfg, "Compositor", "VertexShader", shader_path); sprintf(shader_path, "%s%cshaders%cfragment.glsl", path, GF_PATH_SEPARATOR, GF_PATH_SEPARATOR); gf_cfg_set_key(cfg, "Compositor", "FragmentShader", shader_path); } cfg_path = gf_cfg_get_filename(cfg); gf_ios_refresh_cache_directory(cfg, cfg_path); gf_free(cfg_path); #else const char *opt; if ( get_default_install_path(path, GF_PATH_MODULES) ) { opt = gf_cfg_get_key(cfg, "General", "ModulesDirectory"); //for OSX, we can have an install in /usr/... and an install in /Applications/Osmo4.app - always change #if defined(__DARWIN__) || defined(__APPLE__) if (!opt || strcmp(opt, path)) gf_cfg_set_key(cfg, "General", "ModulesDirectory", path); #else //otherwise only check we didn't switch between a 64 bit version and a 32 bit version if (!opt) { gf_cfg_set_key(cfg, "General", "ModulesDirectory", path); } else { Bool erase_modules_dir = GF_FALSE; const char *opt64 = gf_cfg_get_key(cfg, "Systems", "64bits"); if (!opt64) { //first run or old versions, erase erase_modules_dir = GF_TRUE; } else if (!strcmp(opt64, "yes") ) { #ifndef GPAC_64_BITS erase_modules_dir = GF_TRUE; #endif } else { #ifdef GPAC_64_BITS erase_modules_dir = GF_TRUE; #endif } #ifdef GPAC_64_BITS opt64 = "yes"; #else opt64 = "no"; #endif gf_cfg_set_key(cfg, "Systems", "64bits", opt64); if (erase_modules_dir) { gf_cfg_set_key(cfg, "General", "ModulesDirectory", path); } } #endif } /*if startup file was disabled, do not attempt to correct it*/ if (gf_cfg_get_key(cfg, "General", "StartupFile")==NULL) return; if ( get_default_install_path(path, GF_PATH_GUI) ) { opt = gf_cfg_get_key(cfg, "General", "StartupFile"); if (strstr(opt, "gui.bt") && strcmp(opt, path) && strstr(path, ".app") ) { #if defined(__DARWIN__) || defined(__APPLE__) strcat(path, "/gui.bt"); gf_cfg_set_key(cfg, "General", "StartupFile", path); #endif } } #endif }
GF_Err gf_cache_delete_entry ( const DownloadedCacheEntry entry ) { if ( !entry ) return GF_OK; GF_LOG(GF_LOG_DEBUG, GF_LOG_NETWORK, ("[CACHE] gf_cache_delete_entry:%d, entry=%p\n", __LINE__, entry)); if (entry->writeFilePtr) { /** Cache should have been close before, abornormal situation */ GF_LOG(GF_LOG_WARNING, GF_LOG_NETWORK, ("[CACHE] gf_cache_delete_entry:%d, entry=%p, cache has not been closed properly\n", __LINE__, entry)); fclose(entry->writeFilePtr); } #ifdef ENABLE_WRITE_MX if (entry->write_mutex) { gf_mx_del(entry->write_mutex); } #endif if (entry->file_exists && entry->deletableFilesOnDelete) { GF_LOG(GF_LOG_INFO, GF_LOG_NETWORK, ("[CACHE] url %s cleanup, deleting %s...\n", entry->url, entry->cache_filename)); if (GF_OK != gf_delete_file(entry->cache_filename)) GF_LOG(GF_LOG_WARNING, GF_LOG_NETWORK, ("[CACHE] gf_cache_delete_entry:%d, failed to delete file %s\n", __LINE__, entry->cache_filename)); } #ifdef ENABLE_WRITE_MX entry->write_mutex = NULL; #endif entry->write_session = NULL; entry->writeFilePtr = NULL; if (entry->serverETag) gf_free(entry->serverETag); entry->serverETag = NULL; if (entry->diskETag) gf_free(entry->diskETag); entry->diskETag = NULL; if (entry->serverLastModified) gf_free(entry->serverLastModified); entry->serverLastModified = NULL; if (entry->diskLastModified) gf_free(entry->diskLastModified); entry->diskLastModified = NULL; if ( entry->hash ) { gf_free ( entry->hash ); entry->hash = NULL; } if ( entry->url ) { gf_free ( entry->url ); entry->url = NULL; } if ( entry->mimeType ) { gf_free ( entry->mimeType ); entry->mimeType = NULL; } if (entry->mem_storage) { gf_free(entry->mem_storage); } if ( entry->cache_filename ) { gf_free ( entry->cache_filename ); entry->cache_filename = NULL; } if ( entry->properties ) { char * propfile; if (entry->deletableFilesOnDelete) propfile = gf_cfg_get_filename(entry->properties); else propfile = NULL; gf_cfg_del ( entry->properties ); entry->properties = NULL; if (propfile) { if (GF_OK != gf_delete_file( propfile )) GF_LOG(GF_LOG_WARNING, GF_LOG_NETWORK, ("[CACHE] gf_cache_delete_entry:%d, failed to delete file %s\n", __LINE__, propfile)); gf_free ( propfile ); } } entry->dm = NULL; if (entry->sessions) { assert( gf_list_count(entry->sessions) == 0); gf_list_del(entry->sessions); entry->sessions = NULL; } gf_free (entry); return GF_OK; }
BOOL Osmo4::InitInstance() { CCommandLineInfo cmdInfo; m_logs = NULL; m_term = NULL; memset(&m_user, 0, sizeof(GF_User)); /*get Osmo4.exe path*/ strcpy((char *) szApplicationPath, AfxGetApp()->m_pszHelpFilePath); while (szApplicationPath[strlen((char *) szApplicationPath)-1] != '\\') szApplicationPath[strlen((char *) szApplicationPath)-1] = 0; if (szApplicationPath[strlen((char *) szApplicationPath)-1] != '\\') strcat(szApplicationPath, "\\"); gf_sys_init(0); /*setup user*/ memset(&m_user, 0, sizeof(GF_User)); Bool first_launch = 0; /*init config and modules*/ m_user.config = gf_cfg_init(NULL, &first_launch); if (!m_user.config) { MessageBox(NULL, "GPAC Configuration file not found", "Fatal Error", MB_OK); m_pMainWnd->PostMessage(WM_CLOSE); } char *name = gf_cfg_get_filename(m_user.config); char *sep = strrchr(name, '\\'); if (sep) sep[0] = 0; strcpy(szUserPath, name); if (sep) sep[0] = '\\'; gf_free(name); const char *opt = gf_cfg_get_key(m_user.config, "General", "SingleInstance"); m_SingleInstance = (opt && !stricmp(opt, "yes")) ? 1 : 0; m_hMutex = NULL; if (m_SingleInstance) { m_hMutex = CreateMutex(NULL, FALSE, "Osmo4_GPAC_INSTANCE"); if ( GetLastError() == ERROR_ALREADY_EXISTS ) { char szDIR[1024]; if (m_hMutex) CloseHandle(m_hMutex); m_hMutex = NULL; if (!static_gpac_hwnd || !IsWindow(static_gpac_hwnd) ) { ::MessageBox(NULL, "Osmo4 ghost process detected", "Error at last shutdown" , MB_OK); } else { ::SetForegroundWindow(static_gpac_hwnd); if (m_lpCmdLine && strlen(m_lpCmdLine)) { DWORD res; u32 len; char *the_url, *cmd; GetCurrentDirectory(1024, szDIR); if (szDIR[strlen(szDIR)-1] != '\\') strcat(szDIR, "\\"); cmd = (char *)(const char *) m_lpCmdLine; strcpy(static_szCmdLine, ""); if (cmd[0]=='"') cmd+=1; if (!strnicmp(cmd, "-queue ", 7)) { strcat(static_szCmdLine, "-queue "); cmd += 7; } the_url = gf_url_concatenate(szDIR, cmd); if (!the_url) { strcat(static_szCmdLine, cmd); } else { strcat(static_szCmdLine, the_url); gf_free(the_url); } while ( (len = strlen(static_szCmdLine)) ) { char s = static_szCmdLine[len-1]; if ((s==' ') || (s=='"')) static_szCmdLine[len-1]=0; else break; } ::SendMessageTimeout(static_gpac_hwnd, WM_NEWINSTANCE, 0, 0, 0, 1000, &res); } } return FALSE; } } #if 0 // Standard initialization #ifdef _AFXDLL Enable3dControls(); // Call this when using MFC in a shared DLL #else Enable3dControlsStatic(); // Call this when linking to MFC statically #endif #endif SetRegistryKey(_T("GPAC")); CMainFrame* pFrame = new CMainFrame; m_pMainWnd = pFrame; pFrame->LoadFrame(IDR_MAINFRAME, WS_OVERLAPPEDWINDOW | FWS_ADDTOTITLE, NULL, NULL); m_pMainWnd->DragAcceptFiles(); if (m_SingleInstance) static_gpac_hwnd = m_pMainWnd->m_hWnd; const char *str = gf_cfg_get_key(m_user.config, "General", "ModulesDirectory"); m_user.modules = gf_modules_new(str, m_user.config); if (!m_user.modules || ! gf_modules_get_count(m_user.modules) ) { MessageBox(NULL, "No modules available - system cannot work", "Fatal Error", MB_OK); m_pMainWnd->PostMessage(WM_CLOSE); } else if (first_launch) { /*first launch, register all files ext*/ u32 i; for (i=0; i<gf_modules_get_count(m_user.modules); i++) { GF_InputService *ifce = (GF_InputService *) gf_modules_load_interface(m_user.modules, i, GF_NET_CLIENT_INTERFACE); if (!ifce) continue; if (ifce) { ifce->CanHandleURL(ifce, "test.test"); gf_modules_close_interface((GF_BaseInterface *)ifce); } } /*set some shortcuts*/ gf_cfg_set_key(m_user.config, "Shortcuts", "VolumeUp", "ctrl+Up"); gf_cfg_set_key(m_user.config, "Shortcuts", "VolumeDown", "ctrl+Down"); gf_cfg_set_key(m_user.config, "Shortcuts", "FastRewind", "ctrl+Left"); gf_cfg_set_key(m_user.config, "Shortcuts", "FastForward", "ctrl+Right"); gf_cfg_set_key(m_user.config, "Shortcuts", "Play", "ctrl+ "); } /*check log file*/ str = gf_cfg_get_key(m_user.config, "General", "LogFile"); if (str) { m_logs = gf_f64_open(str, "wt"); gf_log_set_callback(m_logs, osmo4_do_log); } else m_logs = NULL; /*set log level*/ if (gf_log_set_tools_levels(gf_cfg_get_key(m_user.config, "General", "Logs")) != GF_OK) fprintf(stdout, "osmo4: invalid log level specified\n"); m_user.opaque = this; m_user.os_window_handler = pFrame->m_pWndView->m_hWnd; m_user.EventProc = Osmo4_EventProc; m_reset = 0; orig_width = 320; orig_height = 240; gf_set_progress_callback(this, Osmo4_progress_cbk); m_term = gf_term_new(&m_user); if (! m_term) { MessageBox(NULL, "Cannot load GPAC Terminal", "Fatal Error", MB_OK); m_pMainWnd->PostMessage(WM_CLOSE); return TRUE; } SetOptions(); UpdateRenderSwitch(); pFrame->SendMessage(WM_SETSIZE, orig_width, orig_height); pFrame->m_Address.ReloadURLs(); pFrame->m_Sliders.SetVolume(); m_reconnect_time = 0; ParseCommandLine(cmdInfo); start_mode = 0; if (! cmdInfo.m_strFileName.IsEmpty()) { pFrame->m_pPlayList->QueueURL(cmdInfo.m_strFileName); pFrame->m_pPlayList->RefreshList(); pFrame->m_pPlayList->PlayNext(); } else { char sPL[MAX_PATH]; strcpy((char *) sPL, szUserPath); strcat(sPL, "gpac_pl.m3u"); pFrame->m_pPlayList->OpenPlayList(sPL); const char *sOpt = gf_cfg_get_key(GetApp()->m_user.config, "General", "PLEntry"); if (sOpt) { s32 count = (s32)gf_list_count(pFrame->m_pPlayList->m_entries); pFrame->m_pPlayList->m_cur_entry = atoi(sOpt); if (pFrame->m_pPlayList->m_cur_entry>=count) pFrame->m_pPlayList->m_cur_entry = count-1; } else { pFrame->m_pPlayList->m_cur_entry = -1; } #if 0 if (pFrame->m_pPlayList->m_cur_entry>=0) { start_mode = 1; pFrame->m_pPlayList->Play(); } #endif sOpt = gf_cfg_get_key(GetApp()->m_user.config, "General", "StartupFile"); if (sOpt) gf_term_connect(m_term, sOpt); } pFrame->SetFocus(); pFrame->SetForegroundWindow(); return TRUE; }