예제 #1
0
파일: client.py 프로젝트: Naveengnn/one
def get_client(*info):
    ''' returns a mediafireapi.client object
  @email as first parameter
  @password as second parameter
  if no params are passed, then get_client
  pulls the account information from the user's
  saved credentials with the user file'''

    # Create Mediafire client
    try:
        client = MediaFireClient()
    except requests.exceptions.RequestException:
        logger.die('Network error, please check network status and try again')
    if (len(info) == 2):
        try:
            client.login(email=info[0],
                         password=info[1],
                         app_id=APP_ID,
                         api_key=API_KEY)
        except requests.exceptions.RequestException:
            logger.die(
                'Network error, please check network status and try again')
    else:
        try:
            auth = user.get_auth()
            client.login(email=auth[0],
                         password=auth[1],
                         app_id=APP_ID,
                         api_key=API_KEY)
        except requests.exceptions.RequestException:
            logger.die(
                'Network error, please check network status and try again')
    return client
예제 #2
0
파일: client.py 프로젝트: cdpetty/one
def get_client(*info):
  ''' returns a mediafireapi.client object
  @email as first parameter
  @password as second parameter
  if no params are passed, then get_client
  pulls the account information from the user's
  saved credentials with the user file'''

  # Create Mediafire client
  try:
    client = MediaFireClient()
  except requests.exceptions.RequestException:
    logger.die('Network error, please check network status and try again')
  if (len(info) == 2):
    try:
      client.login(email=info[0],
          password=info[1],
          app_id=APP_ID,
          api_key=API_KEY)
    except requests.exceptions.RequestException:
     logger.die('Network error, please check network status and try again') 
  else:
    try:
      auth = user.get_auth()
      client.login(email=auth[0],
          password=auth[1],
          app_id=APP_ID,
          api_key=API_KEY)
    except requests.exceptions.RequestException:
      logger.die('Network error, please check network status and try again')
  return client
예제 #3
0
def upload(filename,foldername):
    imagepath = '/home/xamforcrpf/imgdir/'
    imagepath+=filename+'.jpg'
    print(imagepath)
    print(filename)
    client = MediaFireClient()
    client.login( email='*****@*****.**',
        password='******',
        app_id='42511')

    result = client.upload_file(imagepath, f"mf:/{foldername}/")
    fileinfo = client.api.file_get_info(result.quickkey)

    hashcode = fileinfo['file_info']['hash']
    hashcode = hashcode[:4]

    link = fileinfo['file_info']['links']['normal_download']
    link = link.rstrip('/file')
    link = link.replace('/file','/convkey/'+hashcode)
    for i in range(1,len(link)+1):
        print(link[-i])
        if link[-i] == '/':
            point = -i
            break
        elif link[-i] == '.':
            ext = -i

    link = link[:point]+'6g'+link[ext:]
    return link
예제 #4
0
def upgrade_mediafire(version):
    """ Upgrade to the given version. The upgrades
    will be downloaded from mediafire.

    The version can be higher or lower than the current one.
    This allows to downgrade (in case of a failed upgrade)
    """

    codename = configuration.get("Globals", "codename")
    filename = "{}-{}.zip".format(codename, version)
    dest = os.path.join(get_data_dir(), filename)

    mainlog.info("Downloading a new version {} into {} proxyport={}".format(
        filename, dest, configuration.get("Proxy", "proxy_port")))

    client = MediaFireClient()
    client.login(email=configuration.get("MediaFire", "email"),
                 password=configuration.get("MediaFire", "password"),
                 app_id=configuration.get("MediaFire", "appid"),
                 api_key=configuration.get("MediaFire", "sessionkey"))
    client.download_file("mf:/" + filename, dest)

    configuration.set("DownloadSite", "current_version", str(version))
    configuration.set("DownloadSite", "client_path", dest)
    configuration.save()
    return
예제 #5
0
def uploadass(filename):
    imagepath = '/home/xamforcrpf/imgdir/'
    imagepath+=filename
    print(imagepath)
    print(filename)
    client = MediaFireClient()
    client.login( email='*****@*****.**',
        password='******',
        app_id='42511')

    print('login')
    link = ''
    for i in range(10):
        try:
            print('doing upload')
            result = client.upload_file(imagepath, f"mf:/")
            fileinfo = client.api.file_get_info(result.quickkey)
            link = fileinfo['file_info']['links']['normal_download']
            break
        except:
            print('retrying')
    return link
예제 #6
0
def main():
    """Main entry point"""
    parser = argparse.ArgumentParser(prog='mediafire-cli',
                                     description=__doc__)

    parser.add_argument('--debug', dest='debug', action='store_true',
                        default=False, help='Enable debug output')
    parser.add_argument('--email', dest='email', required=False)
    parser.add_argument('--password', dest='password', required=False)

    actions = parser.add_subparsers(title='Actions', dest='action')
    # http://bugs.python.org/issue9253#msg186387
    actions.required = True

    # ls
    subparser = actions.add_parser('ls',
                                   help=do_ls.__doc__)
    subparser.add_argument('uri', nargs='?',
                           help='MediaFire URI',
                           default='mediafire:/')

    # file-upload
    subparser = actions.add_parser('file-upload',
                                   help=do_file_upload.__doc__)
    subparser.add_argument('paths', nargs='+',
                           help='Path[s] to upload')
    subparser.add_argument('dest_uri', help='Destination MediaFire URI')

    # file-download
    subparser = actions.add_parser('file-download',
                                   help=do_file_download.__doc__)
    subparser.add_argument('uris', nargs='+',
                           help='MediaFire File URI[s] to download')
    subparser.add_argument('dest_path', help='Destination path')

    # file-show
    subparser = actions.add_parser('file-show',
                                   help=do_file_show.__doc__)
    subparser.add_argument('uris', nargs='+',
                           help='MediaFire File URI[s] to print out')

    # folder-create
    subparser = actions.add_parser('folder-create',
                                   help=do_folder_create.__doc__)
    subparser.add_argument('uri', help='MediaFire folder path URI')

    # resource-delete
    subparser = actions.add_parser('resource-delete',
                                   help=do_resource_delete.__doc__)
    subparser.add_argument('uri', help='MediaFire resource URI')
    subparser.add_argument('--purge', help="Purge, don't send to trash",
                           dest="purge", action="store_true", default=False)

    # file-update-metadata
    subparser = actions.add_parser('file-update-metadata',
                                   help=do_file_update_metadata.__doc__)
    subparser.add_argument('uri', help='MediaFire file URI')
    subparser.add_argument('--filename', help='Set file name',
                           default=None, dest='filename')
    subparser.add_argument('--privacy', help='Set file privacy',
                           choices=['public', 'private'],
                           default=None, dest='privacy')
    subparser.add_argument('--description',
                           help='Set file description',
                           dest='description', default=None)
    subparser.add_argument('--mtime', help="Set file modification time",
                           dest='mtime', default=None)

    # folder-update-metadata
    subparser = actions.add_parser('folder-update-metadata',
                                   help=do_folder_update_metadata.__doc__)
    subparser.add_argument('uri', help='MediaFire folder URI')
    subparser.add_argument('--foldername', help='Set folder name',
                           default=None, dest='foldername')
    subparser.add_argument('--privacy', help='Set folder privacy',
                           choices=['public', 'private'],
                           default=None, dest='privacy')
    subparser.add_argument('--recursive', help='Set privacy recursively',
                           action='store_true', default=None,
                           dest='recursive')
    subparser.add_argument('--description',
                           help='Set folder description',
                           dest='description', default=None)
    subparser.add_argument('--mtime', help='Set folder mtime',
                           default=None, dest='mtime')

    # debug-get-resource
    subparser = actions.add_parser('debug-get-resource',
                                   help=do_debug_get_resource.__doc__)
    subparser.add_argument('uri', help='MediaFire resource URI',
                           default='mediafire:/', nargs='?')

    args = parser.parse_args()

    if args.debug:
        logger = logging.getLogger()
        logger.setLevel(logging.DEBUG)

        logging.getLogger("mediafire.client").setLevel(logging.DEBUG)

    client = MediaFireClient()

    if args.email and args.password:
        client.login(args.email, args.password, app_id=APP_ID)

    router = {
        "file-upload": do_file_upload,
        "file-download": do_file_download,
        "file-show": do_file_show,
        "ls": do_ls,
        "folder-create": do_folder_create,
        "resource-delete": do_resource_delete,
        "file-update-metadata": do_file_update_metadata,
        "folder-update-metadata": do_folder_update_metadata,
        "debug-get-resource": do_debug_get_resource
    }

    if args.action in router:
        result = router[args.action](client, args)

        if not result:
            sys.exit(1)
    else:
        print('Unsupported action: {}'.format(args.action))
        sys.exit(1)
def main(argv):

	vnumber = "0.3"
	print('mfcmd.py v' + vnumber, file=sys.stderr)

	account = ''
	passphrase = ''
	filepath = ''
	filepathbase = ''
	filesize = ''
	localhash = ''
	uldir = ''

	try:
		opts, args = getopt.getopt(argv,"e:p:u:h:f:",["email=","password="******"upload-folder=","hash=","file="])
	except getopt.GetoptError:
		print('Error!', file=sys.stderr)
		return

	for opt, arg in opts:
		if opt in ("-e", "--email"):
			account = arg
		elif opt in ("-p", "--password"):
			passphrase = arg
		elif opt in ("-u", "--upload-folder"):
			uldir = arg
		elif opt in ("-s", "--size"):
			filesize = arg
		elif opt in ("-h", "--hash"):
			localhash = arg
		elif opt in ("-f", "--file"):
			filepath = arg

	if account == '':
		print('Error:credentials')
		return
	else:
		print('Email: ' + account, file=sys.stderr)

	if passphrase == '':
		print('Error:credentials')
		return
	else:
		print('Password: '******'':
		print('Error:filepath')
		return
	else:
		if os.path.exists(filepath):
			if os.path.isfile(filepath):
				print('Filepath: ' + filepath, file=sys.stderr)
				filepathbase = os.path.basename(filepath)
				print('Filename: ' + filepathbase, file=sys.stderr)
			else:
				print('Error:noregularfile')
				return
		else:
			print('Error:nofile')
			return

	if uldir == '':
		uldir = 'mfcmd'
	print('Upload folder: ' + uldir, file=sys.stderr)

	if localhash == '':
		print('No SHA-256 specified: calculating...', file=sys.stderr)
		sha256_hash = hashlib.sha256()
		with open(filepath,"rb") as f:
			for byte_block in iter(lambda: f.read(4096),b""):
				sha256_hash.update(byte_block)
			localhash = sha256_hash.hexdigest()
	print('Checksum: ' + localhash, file=sys.stderr)

	api = MediaFireApi()

	try:
		session = api.user_get_session_token(
			email=account,
			password=passphrase,
			app_id='42511')
		print('MediaFire API: connected', file=sys.stderr)
		api.session = session
	except:
		print('Error:login')

	try:
		userinfo = api.user_get_info()
		print("Account holder: " + userinfo['user_info']['display_name'], file=sys.stderr)
		maxstore = userinfo['user_info']['storage_limit']
		usedstore = userinfo['user_info']['used_storage_size']
		freestore = int(maxstore)-int(usedstore)
		freestore_str = str(freestore)
		print("Maximum storage: " + maxstore, file=sys.stderr)
		print("Used storage: " + usedstore, file=sys.stderr)
		print("Free storage: " + freestore_str, file=sys.stderr)
		localsize = os.path.getsize(filepath)
		localsize_str = str(localsize)
		print("Local file size: " + localsize_str, file=sys.stderr)
		if freestore <= localsize:
			print("Error: available space will not suffice!", file=sys.stderr)
			print("Error:space")
			return
		else:
			print("Available filespace will suffice", file=sys.stderr)
	except:
		print('Error getting or parsing user info', file=sys.stderr)

	client = MediaFireClient()

	try:
		client.login(email=account,
			password=passphrase,
			app_id='42511')
		print('MediaFire Client: logged in', file=sys.stderr)
	except:
		print('Error:login')
		return

	try:
		client.get_resource_by_path("/" + uldir + "/")
		print('Detected upload folder ./' + uldir, file=sys.stderr)
	except:
		print('Error: upload folder ./' + uldir, 'does not exist!', file=sys.stderr)
		try:
			client.create_folder("mf:/" + uldir)
		except:
			print('Could not create upload folder: defaulting to root', file=sys.stderr)
			uldir = ''

	try:
		if uldir == '':
			fileinfo = client.get_resource_by_path("/" + filepathbase)
			remotehash = fileinfo['hash']
			if localhash == remotehash:
				print('Same file already exists: no upload necessary!', file=sys.stderr)
				try:
					dlurl = fileinfo['links']['normal_download']
					dlurl = dlurl.replace('http://www.', 'https://')
					print(dlurl)
				except:
					print('Error:link')
				return
			else:
				print('Error: filename already exists in upload folder', file=sys.stderr)
				posixtime = int(time.time())
				posixtext = str(posixtime)
				uldir = posixtext
				print('Creating root subfolder: /' + uldir, file=sys.stderr)
				try:
					client.create_folder("mf:/" + uldir)
				except:
					print('Error:folder')
					return
		else:
			fileinfo = client.get_resource_by_path("/" + uldir + "/" + filepathbase)
			remotehash = fileinfo['hash']
			if localhash == remotehash:
				print('Same file already exists: no upload necessary!', file=sys.stderr)
				try:
					dlurl = fileinfo['links']['normal_download']
					dlurl = dlurl.replace('http://www.', 'https://')
					print(dlurl)
				except:
					print('Error:link')
				return
			else:
				print('Error: filename already exists in upload folder', file=sys.stderr)
				posixtime = int(time.time())
				posixtext = str(posixtime)
				uldir = uldir + '/' + posixtext
				print('Creating subfolder: ./' + uldir, file=sys.stderr)
				try:
					client.create_folder("mf:/" + uldir)
				except:
					print('Could not create upload folder: defaulting to root', file=sys.stderr)
					uldir = ''
	except:
		print('File does not exist in upload folder', file=sys.stderr)

	try:
		if uldir == '':
			client.upload_file(filepath, "mf:/")
		else:
			client.upload_file(filepath, "mf:/" + uldir + "/")
	except:
		print('Error: upload function', file=sys.stderr)

	try:
		if uldir == '':
			fileinfo = client.get_resource_by_path("/" + filepathbase)
		else:
			fileinfo = client.get_resource_by_path("/" + uldir + "/" + filepathbase)
		dlurl = fileinfo['links']['normal_download']
		dlurl = dlurl.replace('http://www.', 'https://')
		print(dlurl)
	except:
		print('Error:upload')
		return
예제 #8
0
class MediaFireConnection:
    def __init__(self,
                 api=MediaFireApi(),
                 email=properties.email,
                 password=properties.password,
                 app_id=properties.app_id):
        self.__api = api
        self.session = api.user_get_session_token(email=email,
                                                  password=password,
                                                  app_id=app_id)
        self.__api.session = self.session
        self.uploader = MediaFireUploader(self.__api)
        self.client = MediaFireClient()
        self.client.login(email=email, password=password, app_id=app_id)
        self.ROOT = ROOT

    def get_info(self):
        res = self.__api.system_get_info()
        return res

    def get_user_info(self):
        res = self.__api.user_get_info()
        return res

    def get_file_info(self, uploadresult):
        return self.__api.file_get_info(uploadresult.quickkey)['result']

    def upload_file(self, source_path, source_filename, target_path,
                    target_filename):
        result = None
        while not result:
            try:
                result = self.client.upload_file(
                    os.path.join(source_path, source_filename),
                    target_path + "/" + target_filename)
            except IsADirectoryError:
                result = None  # Todo: idk why we need this...
            except ResourceNotFoundError:
                logging.info("%s path not found, lets create it." %
                             target_path)
                self.client.create_folder(target_path, recursive=True)
        result = self.client.get_resource_by_key(result.quickkey)
        return result

    def do_ls(self, client, args):
        """List directory"""

        for item in client.get_folder_contents_iter(args.uri):
            # privacy flag
            if item['privacy'] == 'public':
                item['pf'] = '@'
            else:
                item['pf'] = '-'

            if isinstance(item, Folder):
                # type flag
                item['tf'] = 'd'
                item['key'] = item['folderkey']
                item['size'] = ''
            else:
                item['tf'] = '-'
                item['key'] = item['quickkey']
                item['name'] = item['filename']

            print("{tf}{pf} {key:>15} {size:>10} {created} {name}".format(
                **item))

        return True

    def to_mongo(self, db, folder_pair):
        path = folder_pair['mf']
        ftp_root = folder_pair['ftp']
        coll_name = folder_pair['name']

        logging.info("Processing path: %s" % path)
        try:
            for item in self.client.get_folder_contents_iter(path):
                if type(item) is File:
                    mf_path = (path + item['filename'])
                    ftp_path = (ftp_root + item['filename'])
                    logging.debug("Checking in Mongo for %s  ==>  %s" %
                                  (mf_path, ftp_path))
                    existing = db.find_by_ftp_path(ftp_path,
                                                   coll_name=coll_name)
                    if existing:
                        logging.debug("updating Mongo")
                        item['path'] = path
                        item["mf_root"] = folder_pair['mf']
                        db.update_item(existing,
                                       properties={"mf": item},
                                       coll_name=coll_name)
                    else:
                        logging.debug("inserting into Mongo")
                        item['path'] = path
                        db.insert_one({"mf": item}, coll_name=coll_name)
                elif type(item) is Folder:
                    self.to_mongo(
                        db, {
                            "mf": path + item['name'] + '/',
                            "ftp": folder_pair['ftp'] + item['name'] + '/',
                            "name": coll_name
                        })
        except ResourceNotFoundError as rne:
            logging.error("Resource NOT Found: %s", exc_info=rne)
            return
        except Exception as e:
            logging.error("Error: %s", exc_info=e)
def main():  # pylint: disable=too-many-statements
    """Main entry point"""
    parser = argparse.ArgumentParser(prog='mediafire-cli', description=__doc__)

    parser.add_argument('--debug',
                        dest='debug',
                        action='store_true',
                        default=False,
                        help='Enable debug output')
    parser.add_argument('--email',
                        dest='email',
                        required=False,
                        default=os.environ.get('MEDIAFIRE_EMAIL', None))
    parser.add_argument('--password',
                        dest='password',
                        required=False,
                        default=os.environ.get('MEDIAFIRE_PASSWORD', None))

    actions = parser.add_subparsers(title='Actions', dest='action')
    # http://bugs.python.org/issue9253#msg186387
    actions.required = True

    # ls
    subparser = actions.add_parser('ls', help=do_ls.__doc__)
    subparser.add_argument('uri',
                           nargs='?',
                           help='MediaFire URI',
                           default='mf:///')

    # file-upload
    subparser = actions.add_parser('file-upload', help=do_file_upload.__doc__)
    subparser.add_argument('paths', nargs='+', help='Path[s] to upload')
    subparser.add_argument('dest_uri', help='Destination MediaFire URI')

    # file-download
    subparser = actions.add_parser('file-download',
                                   help=do_file_download.__doc__)
    subparser.add_argument('uris',
                           nargs='+',
                           help='MediaFire File URI[s] to download')
    subparser.add_argument('dest_path', help='Destination path')

    # file-show
    subparser = actions.add_parser('file-show', help=do_file_show.__doc__)
    subparser.add_argument('uris',
                           nargs='+',
                           help='MediaFire File URI[s] to print out')
    # folder-download
    subparser = actions.add_parser('folder-download',
                                   help=do_folder_download.__doc__)
    subparser.add_argument('uri',
                           nargs='?',
                           help='MediaFire URI',
                           default='mf:///')
    subparser.add_argument('dest_path', help='Destination path')

    # folder-create
    subparser = actions.add_parser('folder-create',
                                   help=do_folder_create.__doc__)
    subparser.add_argument('uris',
                           nargs='+',
                           help='MediaFire folder path URI[s]')

    # resource-delete
    subparser = actions.add_parser('resource-delete',
                                   help=do_resource_delete.__doc__)
    subparser.add_argument('uris', nargs='+', help='MediaFire resource URI[s]')
    subparser.add_argument('--purge',
                           help="Purge, don't send to trash",
                           dest="purge",
                           action="store_true",
                           default=False)

    # file-update-metadata
    subparser = actions.add_parser('file-update-metadata',
                                   help=do_file_update_metadata.__doc__)
    subparser.add_argument('uri', help='MediaFire file URI')
    subparser.add_argument('--filename',
                           help='Set file name',
                           default=None,
                           dest='filename')
    subparser.add_argument('--privacy',
                           help='Set file privacy',
                           choices=['public', 'private'],
                           default=None,
                           dest='privacy')
    subparser.add_argument('--description',
                           help='Set file description',
                           dest='description',
                           default=None)
    subparser.add_argument('--mtime',
                           help="Set file modification time",
                           dest='mtime',
                           default=None)

    # folder-update-metadata
    subparser = actions.add_parser('folder-update-metadata',
                                   help=do_folder_update_metadata.__doc__)
    subparser.add_argument('uri', help='MediaFire folder URI')
    subparser.add_argument('--foldername',
                           help='Set folder name',
                           default=None,
                           dest='foldername')
    subparser.add_argument('--privacy',
                           help='Set folder privacy',
                           choices=['public', 'private'],
                           default=None,
                           dest='privacy')
    subparser.add_argument('--recursive',
                           help='Set privacy recursively',
                           action='store_true',
                           default=None,
                           dest='recursive')
    subparser.add_argument('--description',
                           help='Set folder description',
                           dest='description',
                           default=None)
    subparser.add_argument('--mtime',
                           help='Set folder mtime',
                           default=None,
                           dest='mtime')

    # debug-get-resource
    subparser = actions.add_parser('debug-get-resource',
                                   help=do_debug_get_resource.__doc__)
    subparser.add_argument('uri',
                           help='MediaFire resource URI',
                           default='mediafire:/',
                           nargs='?')

    args = parser.parse_args()

    if args.debug:
        logger = logging.getLogger()
        logger.setLevel(logging.DEBUG)

        logging.getLogger("mediafire.client").setLevel(logging.DEBUG)

    client = MediaFireClient()

    if args.email and args.password:
        client.login(args.email, args.password, app_id=APP_ID)

    router = {
        "file-upload": do_file_upload,
        "file-download": do_file_download,
        "file-show": do_file_show,
        "ls": do_ls,
        'folder-download': do_folder_download,
        "folder-create": do_folder_create,
        "resource-delete": do_resource_delete,
        "file-update-metadata": do_file_update_metadata,
        "folder-update-metadata": do_folder_update_metadata,
        "debug-get-resource": do_debug_get_resource
    }

    if args.action in router:
        result = router[args.action](client, args)

        if not result:
            sys.exit(1)
    else:
        print('Unsupported action: {}'.format(args.action))
        sys.exit(1)
 def __get_client(self, user, password):
     client = MediaFireClient()
     client.login(email=user, password=password, app_id='42511')
     return client
예제 #11
0
파일: getit.py 프로젝트: ewa/sims-package
#!/usr/bin/env python3

from mediafire.client import (MediaFireClient, File, Folder)

client = MediaFireClient()

client.login(app_id='45211')
client.download_file("mf:/i547ewwpknmh41l","thing")
예제 #12
0
def createfolder(foldername):
    client = MediaFireClient()
    client.login( email='*****@*****.**',
        password='******',
        app_id='42511')
    client.create_folder('/'+foldername)
예제 #13
0
import subprocess
import time

from django.conf import settings
from celery import group, chord, chain
from celery.decorators import task
from PIL import Image
import requests
from mediafire.client import MediaFireClient, File, Folder

from .utils import url2filename, extract_images_url
from .models import Manga, Volume, Chapter

client = MediaFireClient()
client.login(email=settings.MEDIAFIRE_EMAIL,
             password=settings.MEDIAFIRE_PASSWORD,
             app_id='42511')
UPLOAD_FOLDER = settings.MEDIAFIRE_FOLDER

# https://stackoverflow.com/questions/31784484/how-to-parallelized-file-downloads
logging.basicConfig(level=logging.INFO, format='%(asctime)s %(message)s')


def download(chapter_id, index, path, url):
    filename = url2filename(url, chapter_id, index)
    logging.debug('downloading %s', filename)
    r = requests.get(url, stream=True)
    if r.status_code == 200:
        with open(os.path.join(path, filename), 'wb') as f:
            for chunk in r:
                f.write(chunk)
예제 #14
0
#!/usr/bin/python3

import os
import logging

logging.basicConfig()
logging.getLogger().setLevel(logging.DEBUG)

from mediafire.client import MediaFireClient

APP_ID = '42511'
MEDIAFIRE_EMAIL = os.environ['MEDIAFIRE_EMAIL']
MEDIAFIRE_PASSWORD = os.environ['MEDIAFIRE_PASSWORD']

client = MediaFireClient()
client.login(app_id=APP_ID, email=MEDIAFIRE_EMAIL, password=MEDIAFIRE_PASSWORD)

print("Use 'client' object to interact with MediaFireClient")