/******************************************************************************
* Copyright (C) 2012, 2013, 2014, 2015, 2016
* Younghyung Cho. <yhcting77@gmail.com>
* All rights reserved.
*
* This file is part of NetMBuddy
*
* This program is licensed under the FreeBSD license
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* The views and conclusions contained in the software and documentation
* are those of the authors and should not be interpreted as representing
* official policies, either expressed or implied, of the FreeBSD Project.
*****************************************************************************/
package free.yhc.netmbuddy.share;
import android.support.annotation.NonNull;
import java.io.File;
import java.util.concurrent.atomic.AtomicInteger;
import free.yhc.baselib.Logger;
// ============================================================================
//
// Interface class of this package.
//
// ============================================================================
public class Share {
private static final boolean DBG = Logger.DBG_DEFAULT;
private static final Logger P = Logger.create(Share.class, Logger.LOGLV_DEFAULT);
public interface OnProgressListener {
void onPreProgress(int maxProg);
void onProgress(int prog);
}
public interface ImporterI {
ImportPrepareResult prepare();
/**
* Synchronous call.
* @param arg user argument. It depends on share type.
* @param listener listener
*/
ImportResult execute(Object arg, OnProgressListener listener);
void cancel();
}
public interface ExporterI {
Err execute();
}
public enum Err {
NO_ERR,
IO_FILE,
IO_NET,
PARAMETER,
INTERRUPTED,
INVALID_SHARE,
UNSUPPORTED_VERSION,
DB_UNKNOWN,
UNKNOWN
}
public static class LocalException extends java.lang.Exception {
static final long serialVersionUID = 0; // to make compiler be happy
private final Err _mErr;
public LocalException(Err err) {
_mErr = err;
}
public Err
error() {
return _mErr;
}
}
// Sharing type
public enum Type {
PLAYLIST
}
public static class ImportPrepareResult {
public Err err = Err.UNKNOWN;
public Type type = Type.PLAYLIST; // type of importing data
// title of this import.
// Value has it's own meaning dependent on 'type'
public String message = "";
}
public static class ImportResult {
public Err err = Err.UNKNOWN; // result of import
public String message = "";
// # of successfully imported
public AtomicInteger success = new AtomicInteger(0);
// # of fails to import.
public AtomicInteger fail = new AtomicInteger(0);
}
@NonNull
public static ExporterI
buildPlayerlistExporter(File file, long plid) {
return new ExporterPlaylist(file, plid);
}
}