Search in sources :

Example 1 with SingleOnSubscribe

use of io.reactivex.SingleOnSubscribe in project kripton by xcesco.

the class BindKripton180RawInsertSelectDataSource method execute.

public <T> Single<T> execute(final SingleTransaction<T> transaction) {
    SingleOnSubscribe<T> emitter = new SingleOnSubscribe<T>() {

        @Override
        public void subscribe(SingleEmitter<T> emitter) {
            boolean needToOpened = !BindKripton180RawInsertSelectDataSource.this.isOpenInWriteMode();
            boolean success = false;
            @SuppressWarnings("resource") SQLiteDatabase connection = needToOpened ? openWritableDatabase() : database();
            DataSourceSingleThread currentDaoFactory = _daoFactorySingleThread.bindToThread();
            currentDaoFactory.onSessionOpened();
            try {
                connection.beginTransaction();
                if (transaction != null && TransactionResult.COMMIT == transaction.onExecute(currentDaoFactory, emitter)) {
                    connection.setTransactionSuccessful();
                    success = true;
                }
            // no onComplete;
            } catch (Throwable e) {
                Logger.error(e.getMessage());
                e.printStackTrace();
                emitter.onError(e);
                currentDaoFactory.onSessionClear();
            } finally {
                try {
                    connection.endTransaction();
                } catch (Throwable e) {
                }
                if (needToOpened) {
                    close();
                }
                if (success) {
                    currentDaoFactory.onSessionClosed();
                } else {
                    currentDaoFactory.onSessionClear();
                }
            }
            return;
        }
    };
    Single<T> result = Single.create(emitter);
    if (globalSubscribeOn != null)
        result.subscribeOn(globalSubscribeOn);
    if (globalObserveOn != null)
        result.observeOn(globalObserveOn);
    return result;
}
Also used : SQLiteDatabase(android.database.sqlite.SQLiteDatabase) SingleOnSubscribe(io.reactivex.SingleOnSubscribe) SingleEmitter(io.reactivex.SingleEmitter)

Example 2 with SingleOnSubscribe

use of io.reactivex.SingleOnSubscribe in project kripton by xcesco.

the class BindApp0DataSource method execute.

public <T> Single<T> execute(final SingleTransaction<T> transaction) {
    SingleOnSubscribe<T> emitter = new SingleOnSubscribe<T>() {

        @Override
        public void subscribe(SingleEmitter<T> emitter) {
            boolean needToOpened = !BindApp0DataSource.this.isOpenInWriteMode();
            boolean success = false;
            @SuppressWarnings("resource") SQLiteDatabase connection = needToOpened ? openWritableDatabase() : database();
            DataSourceSingleThread currentDaoFactory = _daoFactorySingleThread.bindToThread();
            currentDaoFactory.onSessionOpened();
            try {
                connection.beginTransaction();
                if (transaction != null && TransactionResult.COMMIT == transaction.onExecute(currentDaoFactory, emitter)) {
                    connection.setTransactionSuccessful();
                    success = true;
                }
            // no onComplete;
            } catch (Throwable e) {
                Logger.error(e.getMessage());
                e.printStackTrace();
                emitter.onError(e);
                currentDaoFactory.onSessionClear();
            } finally {
                try {
                    connection.endTransaction();
                } catch (Throwable e) {
                }
                if (needToOpened) {
                    close();
                }
                if (success) {
                    currentDaoFactory.onSessionClosed();
                } else {
                    currentDaoFactory.onSessionClear();
                }
            }
            return;
        }
    };
    Single<T> result = Single.create(emitter);
    if (globalSubscribeOn != null)
        result.subscribeOn(globalSubscribeOn);
    if (globalObserveOn != null)
        result.observeOn(globalObserveOn);
    return result;
}
Also used : SQLiteDatabase(android.database.sqlite.SQLiteDatabase) SingleOnSubscribe(io.reactivex.SingleOnSubscribe) SingleEmitter(io.reactivex.SingleEmitter)

Example 3 with SingleOnSubscribe

use of io.reactivex.SingleOnSubscribe in project AntennaPod by AntennaPod.

the class SpecialThanksFragment method onViewCreated.

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    getListView().setDivider(null);
    getListView().setSelector(android.R.color.transparent);
    translatorsLoader = Single.create((SingleOnSubscribe<ArrayList<SimpleIconListAdapter.ListItem>>) emitter -> {
        ArrayList<SimpleIconListAdapter.ListItem> translators = new ArrayList<>();
        BufferedReader reader = new BufferedReader(new InputStreamReader(getContext().getAssets().open("special_thanks.csv"), "UTF-8"));
        String line;
        while ((line = reader.readLine()) != null) {
            String[] info = line.split(";");
            translators.add(new SimpleIconListAdapter.ListItem(info[0], info[1], info[2]));
        }
        emitter.onSuccess(translators);
    }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(translators -> setListAdapter(new SimpleIconListAdapter<>(getContext(), translators)), error -> Toast.makeText(getContext(), error.getMessage(), Toast.LENGTH_LONG).show());
}
Also used : Bundle(android.os.Bundle) NonNull(androidx.annotation.NonNull) Single(io.reactivex.Single) AndroidSchedulers(io.reactivex.android.schedulers.AndroidSchedulers) InputStreamReader(java.io.InputStreamReader) SimpleIconListAdapter(de.danoeh.antennapod.adapter.SimpleIconListAdapter) ArrayList(java.util.ArrayList) Disposable(io.reactivex.disposables.Disposable) Nullable(androidx.annotation.Nullable) Toast(android.widget.Toast) View(android.view.View) ListFragment(androidx.fragment.app.ListFragment) Schedulers(io.reactivex.schedulers.Schedulers) BufferedReader(java.io.BufferedReader) SingleOnSubscribe(io.reactivex.SingleOnSubscribe) InputStreamReader(java.io.InputStreamReader) ArrayList(java.util.ArrayList) BufferedReader(java.io.BufferedReader) SimpleIconListAdapter(de.danoeh.antennapod.adapter.SimpleIconListAdapter)

Example 4 with SingleOnSubscribe

use of io.reactivex.SingleOnSubscribe in project AntennaPod by AntennaPod.

the class CombinedSearcher method search.

public Single<List<PodcastSearchResult>> search(String query) {
    ArrayList<Disposable> disposables = new ArrayList<>();
    List<List<PodcastSearchResult>> singleResults = new ArrayList<>(Collections.nCopies(PodcastSearcherRegistry.getSearchProviders().size(), null));
    CountDownLatch latch = new CountDownLatch(PodcastSearcherRegistry.getSearchProviders().size());
    for (int i = 0; i < PodcastSearcherRegistry.getSearchProviders().size(); i++) {
        PodcastSearcherRegistry.SearcherInfo searchProviderInfo = PodcastSearcherRegistry.getSearchProviders().get(i);
        PodcastSearcher searcher = searchProviderInfo.searcher;
        if (searchProviderInfo.weight <= 0.00001f || searcher.getClass() == CombinedSearcher.class) {
            latch.countDown();
            continue;
        }
        final int index = i;
        disposables.add(searcher.search(query).subscribe(e -> {
            singleResults.set(index, e);
            latch.countDown();
        }, throwable -> {
            Log.d(TAG, Log.getStackTraceString(throwable));
            latch.countDown();
        }));
    }
    return Single.create((SingleOnSubscribe<List<PodcastSearchResult>>) subscriber -> {
        latch.await();
        List<PodcastSearchResult> results = weightSearchResults(singleResults);
        subscriber.onSuccess(results);
    }).doOnDispose(() -> {
        for (Disposable disposable : disposables) {
            if (disposable != null) {
                disposable.dispose();
            }
        }
    }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread());
}
Also used : Disposable(io.reactivex.disposables.Disposable) TextUtils(android.text.TextUtils) HashMap(java.util.HashMap) Single(io.reactivex.Single) AndroidSchedulers(io.reactivex.android.schedulers.AndroidSchedulers) ArrayList(java.util.ArrayList) CountDownLatch(java.util.concurrent.CountDownLatch) Disposable(io.reactivex.disposables.Disposable) List(java.util.List) Map(java.util.Map) Schedulers(io.reactivex.schedulers.Schedulers) Collections(java.util.Collections) Log(android.util.Log) SingleOnSubscribe(io.reactivex.SingleOnSubscribe) ArrayList(java.util.ArrayList) SingleOnSubscribe(io.reactivex.SingleOnSubscribe) CountDownLatch(java.util.concurrent.CountDownLatch) ArrayList(java.util.ArrayList) List(java.util.List)

Example 5 with SingleOnSubscribe

use of io.reactivex.SingleOnSubscribe in project AntennaPod by AntennaPod.

the class GpodnetPodcastSearcher method search.

public Single<List<PodcastSearchResult>> search(String query) {
    return Single.create((SingleOnSubscribe<List<PodcastSearchResult>>) subscriber -> {
        try {
            GpodnetService service = new GpodnetService(AntennapodHttpClient.getHttpClient(), SynchronizationCredentials.getHosturl(), SynchronizationCredentials.getDeviceID(), SynchronizationCredentials.getUsername(), SynchronizationCredentials.getPassword());
            List<GpodnetPodcast> gpodnetPodcasts = service.searchPodcasts(query, 0);
            List<PodcastSearchResult> results = new ArrayList<>();
            for (GpodnetPodcast podcast : gpodnetPodcasts) {
                results.add(PodcastSearchResult.fromGpodder(podcast));
            }
            subscriber.onSuccess(results);
        } catch (GpodnetServiceException e) {
            e.printStackTrace();
            subscriber.onError(e);
        }
    }).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread());
}
Also used : GpodnetService(de.danoeh.antennapod.net.sync.gpoddernet.GpodnetService) List(java.util.List) SynchronizationCredentials(de.danoeh.antennapod.core.sync.SynchronizationCredentials) GpodnetPodcast(de.danoeh.antennapod.net.sync.gpoddernet.model.GpodnetPodcast) Schedulers(io.reactivex.schedulers.Schedulers) AntennapodHttpClient(de.danoeh.antennapod.core.service.download.AntennapodHttpClient) GpodnetServiceException(de.danoeh.antennapod.net.sync.gpoddernet.GpodnetServiceException) Single(io.reactivex.Single) AndroidSchedulers(io.reactivex.android.schedulers.AndroidSchedulers) SingleOnSubscribe(io.reactivex.SingleOnSubscribe) ArrayList(java.util.ArrayList) GpodnetPodcast(de.danoeh.antennapod.net.sync.gpoddernet.model.GpodnetPodcast) GpodnetServiceException(de.danoeh.antennapod.net.sync.gpoddernet.GpodnetServiceException) GpodnetService(de.danoeh.antennapod.net.sync.gpoddernet.GpodnetService) List(java.util.List) ArrayList(java.util.ArrayList)

Aggregations

SingleOnSubscribe (io.reactivex.SingleOnSubscribe)10 Single (io.reactivex.Single)6 AndroidSchedulers (io.reactivex.android.schedulers.AndroidSchedulers)6 Schedulers (io.reactivex.schedulers.Schedulers)6 ArrayList (java.util.ArrayList)5 SQLiteDatabase (android.database.sqlite.SQLiteDatabase)4 SingleEmitter (io.reactivex.SingleEmitter)4 Disposable (io.reactivex.disposables.Disposable)4 Bundle (android.os.Bundle)3 View (android.view.View)3 Toast (android.widget.Toast)3 NonNull (androidx.annotation.NonNull)3 Nullable (androidx.annotation.Nullable)3 ListFragment (androidx.fragment.app.ListFragment)3 SimpleIconListAdapter (de.danoeh.antennapod.adapter.SimpleIconListAdapter)3 BufferedReader (java.io.BufferedReader)3 InputStreamReader (java.io.InputStreamReader)3 List (java.util.List)3 TextUtils (android.text.TextUtils)2 Log (android.util.Log)2