# -*- coding: utf-8 -*- # # gPodder - A media aggregator and podcast client # Copyright (c) 2005-2018 The gPodder Team # # gPodder 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 3 of the License, or # (at your option) any later version. # # gPodder 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 . # # This metadata block gets parsed by setup.py - use single quotes only __tagline__ = 'Media aggregator and podcast client' __author__ = 'Thomas Perl ' __version__ = '3.11.2+1' __date__ = '2023-08-18' __copyright__ = '© 2005-2023 The gPodder Team' __license__ = 'GNU General Public License, version 3 or later' __url__ = 'http://gpodder.org/' # Use public version part for __version_info__, see PEP 440 __public_version__, __local_version__ = next( (v[0], v[1] if len(v) > 1 else '') for v in (__version__.split('+'),)) __version_info__ = tuple(int(x) for x in __public_version__.split('.')) import gettext import locale import os import platform import socket import sys from gpodder.build_info import BUILD_TYPE # Check if real hard dependencies are available try: import podcastparser except ImportError: print(""" Error: Module "podcastparser" (python-podcastparser) not found. The podcastparser module can be downloaded from http://gpodder.org/podcastparser/ From a source checkout, see https://gpodder.github.io/docs/run-from-git.html """) sys.exit(1) del podcastparser try: import mygpoclient except ImportError: print(""" Error: Module "mygpoclient" (python-mygpoclient) not found. The mygpoclient module can be downloaded from http://gpodder.org/mygpoclient/ From a source checkout, see https://gpodder.github.io/docs/run-from-git.html """) sys.exit(1) del mygpoclient try: import sqlite3 except ImportError: print(""" Error: Module "sqlite3" not found. Build Python with SQLite 3 support or get it from http://code.google.com/p/pysqlite/ """) sys.exit(1) del sqlite3 # Is gpodder running in verbose mode? verbose = False # Is gpodder running in quiet mode? quiet = False # The User-Agent string for downloads user_agent = 'gPodder/%s (+%s) %s' % (__version__, __url__, platform.system()) # Are we running in GUI or console mode? class UI(object): def __init__(self): self.gtk = False self.cli = False ui = UI() # D-Bus specific interface names dbus_bus_name = 'org.gpodder' dbus_gui_object_path = '/gui' dbus_podcasts_object_path = '/podcasts' dbus_interface = 'org.gpodder.interface' dbus_podcasts = 'org.gpodder.podcasts' dbus_session_bus = None # Set "win32" to True if we are on Windows ui.win32 = (platform.system() == 'Windows') # Set "osx" to True if we are on Mac OS X ui.osx = (platform.system() == 'Darwin') # We assume it's a freedesktop.org system if it's not Windows or OS X ui.freedesktop = not ui.win32 and not ui.osx # i18n setup (will result in "gettext" to be available) # Use _ = gpodder.gettext in modules to enable string translations textdomain = 'gpodder' locale_dir = gettext.bindtextdomain(textdomain) if ui.win32: # this must be done prior to gettext.translation to set the locale (see #484) from gpodder.utilwin32locale import install install(textdomain, locale_dir) t = gettext.translation(textdomain, locale_dir, fallback=True) gettext = t.gettext ngettext = t.ngettext del t # Set up textdomain for Gtk.Builder (this accesses the C library functions) if hasattr(locale, 'bindtextdomain'): locale.bindtextdomain(textdomain, locale_dir) del locale_dir # Set up socket timeouts to fix bug 174 SOCKET_TIMEOUT = 60 socket.setdefaulttimeout(SOCKET_TIMEOUT) del socket SOCKET_TIMEOUT # Variables reserved for GUI-specific use (will be set accordingly) ui_folders = [] icon_file = None images_folder = None user_extensions = None # Episode states used in the database STATE_NORMAL, STATE_DOWNLOADED, STATE_DELETED = list(range(3)) # Paths (gPodder's home folder, config, db, download and data prefix) home = None config_file = None database_file = None downloads = None prefix = None ENV_HOME, ENV_DOWNLOADS = 'GPODDER_HOME', 'GPODDER_DOWNLOAD_DIR' no_update_check_file = None # Function to set a new gPodder home folder def set_home(new_home): global home, config_file, database_file, downloads home = os.path.abspath(new_home) config_file = os.path.join(home, 'Settings.json') database_file = os.path.join(home, 'Database') if ENV_DOWNLOADS not in os.environ: downloads = os.path.join(home, 'Downloads') def fixup_home(old_home): if ui.osx or ui.win32: if ui.osx: new_home = os.path.expanduser(os.path.join('~', 'Library', 'Application Support', 'gPodder')) elif BUILD_TYPE == 'windows-portable': new_home = os.path.normpath(os.path.join(os.path.dirname(sys.executable), "..", "..", "config")) old_home = new_home # force to config directory print("D: windows-portable build; forcing home to config directory %s" % new_home, file=sys.stderr) else: # ui.win32, not portable build from gpodder.utilwin32ctypes import ( get_documents_folder, get_reg_current_user_string_value) try: # from old launcher, see # https://github.com/gpodder/gpodder/blob/old/gtk2/tools/win32-launcher/folderselector.c new_home = get_reg_current_user_string_value("Software\\gpodder.org\\gPodder", "GPODDER_HOME") print("D: windows build; registry home = %s" % new_home, file=sys.stderr) except Exception as e: print("E: can't get GPODDER_HOME from registry: %s" % e, file=sys.stderr) new_home = None if new_home is None: try: new_home = os.path.join(get_documents_folder(), "gPodder") print("D: windows build; documents home = %s" % new_home, file=sys.stderr) except Exception as e: print("E: can't get user's Documents folder: %s" % e, file=sys.stderr) new_home = old_home # Users who do not have the old home directory, or who have it but also # have the new home directory (to cater to situations where the user # might for some reason or the other have a ~/gPodder/ directory) get # to use the new, more OS X-ish home. if not os.path.exists(old_home) or os.path.exists(new_home): return new_home return old_home # Default locations for configuration and data files default_home = os.path.expanduser(os.path.join('~', 'gPodder')) default_home = fixup_home(default_home) set_home(os.environ.get(ENV_HOME, default_home)) if home != default_home: print('Storing data in', home, '(GPODDER_HOME is set)', file=sys.stderr) if ENV_DOWNLOADS in os.environ: # Allow to relocate the downloads folder (pull request 4, bug 466) downloads = os.environ[ENV_DOWNLOADS] print('Storing downloads in %s (%s is set)' % (downloads, ENV_DOWNLOADS), file=sys.stderr) # Plugins to load by default DEFAULT_PLUGINS = [ 'gpodder.plugins.soundcloud', ] def load_plugins(): """Load (non-essential) plugin modules This loads a default set of plugins, but you can use the environment variable "GPODDER_PLUGINS" to modify the list of plugins.""" PLUGINS = os.environ.get('GPODDER_PLUGINS', None) if PLUGINS is None: PLUGINS = DEFAULT_PLUGINS else: PLUGINS = PLUGINS.split() for plugin in PLUGINS: try: __import__(plugin) except Exception as e: print('Cannot load plugin: %s (%s)' % (plugin, e), file=sys.stderr)