// Path: app/src/main/java/com/projects/elad/hacklist/injection/modules/AppModule.java
// @Module
// public class AppModule {
//     protected final Application application;
//     public AppModule(Application application) {
//         this.application = application;
//     }
// 
//     @Provides
//     Application provideApplication(){
//         return application;
//     }
// 
//     @Provides
//     Context provideContext(){
//         return application;
//     }
// 
//     @Provides
//     @HacklistApplicationScope
//     public RealmBookmarksHelper provideRealmBookmarksHelper(Context context){
//         return new RealmBookmarksHelper(context);
//     }
// 
// 
// 
// 
// }
// 
// Path: app/src/main/java/com/projects/elad/hacklist/injection/modules/NetModule.java
// @Module
// public class NetModule {
//     private CurrDate currDate;
// 
//     public NetModule() {
//         currDate = new CurrDate();
//     }
// 
//     @Provides
//     @HacklistApplicationScope
//     public CurrDate provideCurrDate() {
//         return currDate;
//     }
// 
//     @Provides
//     @HacklistApplicationScope
//     public HacklistService provideHacklistService(){
//         return HacklistService.ServiceCreator.newHacklistService();
//     }
// 
// 
// }
// 
// Path: app/src/main/java/com/projects/elad/hacklist/presentation/presenters/BookmarksPresenter.java
// public class BookmarksPresenter extends BasePresenter<BookmarksMvpView> {
// 
//     @Inject
//     DataManager dataManager;
//     @Inject
//     Context context;
//     private Subscription subscription;
// 
//     public BookmarksPresenter() {
//     }
// 
// 
//     @Override
//     public void detachView() {
//         super.detachView();
//         RxUtil.unsubscribe(subscription);
//     }
// 
//     @Override
//     public void attachView(BookmarksMvpView mvpView) {
//         super.attachView(mvpView);
//         ((HacklistApplication) (((FragmentBookmarks) getMvpView()).getActivity().getApplication())).getComponent().inject(this);
// 
//     }
// 
// 
//     public void loadBookmarks() {
//         RxUtil.unsubscribe(subscription);
//         subscription = dataManager.getAllBookmarks()
//                 .map(dbEntities -> Mappers.mapBookmarkDbEntityToItem(dbEntities, context))
//                 .subscribeOn(AndroidSchedulers.mainThread())
//                 .observeOn(AndroidSchedulers.mainThread())
//                 .subscribe(new Subscriber<List<BookmarkItem>>() {
//                     @Override
//                     public void onCompleted() {
//                     }
// 
//                     @Override
//                     public void onError(Throwable e) {
//                         Toast.makeText(context, "Error when fetching bookmarks" + e.toString(), Toast.LENGTH_LONG).show();
//                     }
// 
//                     @Override
//                     public void onNext(List<BookmarkItem> bookmarkItems) {
//                         if (bookmarkItems.isEmpty()) {
//                             getMvpView().showEmpty();
//                         } else {
//                             getMvpView().showBookmarks(bookmarkItems);
//                         }
//                     }
//                 });
//     }
// 
// 
//     public void deleteBookmark(BookmarkItem bookmark) {
//         dataManager.deleteBookmark(bookmark.getBookmarkTitle());
//         loadBookmarks();
//     }
// }
// 
// Path: app/src/main/java/com/projects/elad/hacklist/presentation/presenters/HomePresenter.java
// public class HomePresenter extends BasePresenter<HomeMvpView> {
// 
//     @Inject DataManager dataManager;
//     private HashMap<Integer, Subscription> subscriptions;
//     @Inject Context context;
// 
//     public HomePresenter() {
//         subscriptions = new HashMap<>();
//     }
// 
// 
//     @Override
//     public void attachView(HomeMvpView mvpView) {
//         super.attachView(mvpView);
//         ((HacklistApplication)(((FragmentHome)getMvpView()).getActivity().getApplication())).getComponent().inject(this);
// 
//     }
// 
//     @Override
//     public void detachView() {
//         super.detachView();
//         unSubscribeAll();
//     }
// 
//     void unSubscribeAll() {
//         for (Subscription sub : subscriptions.values()) {
//             RxUtil.unsubscribe(sub);
//         }
//         subscriptions.clear();
//     }
// 
//     public void loadHackEvent() {
//         checkViewAttached();
//         unSubscribeAll();
// 
//         int month = dataManager.getDate().getCurrMonthInt();
//         String year = dataManager.getDate().getCurrentYear();
//         while (month < 12) {
//             subscriptions.put(month,
//                     dataManager.getHacklistService().getMonthObject(year, Utils.getStringForMonthInt(month))
//                             .observeOn(AndroidSchedulers.mainThread())
//                             .subscribeOn(Schedulers.newThread())
//                             .map(v -> v.entrySet().iterator().next().getValue())
//                             .subscribe(new Subscriber<List<HackEvent>>() {
//                                 @Override
//                                 public void onCompleted() {
//                                 }
// 
//                                 @Override
//                                 public void onError(Throwable e) {
// 
//                                 }
// 
//                                 @Override
//                                 public void onNext(List<HackEvent> events) {
//                                     getMvpView().showHackEvents(Mappers.mapHackEventsToListItems(events,context));
//                                 }
//                             }));
// 
//             month++;
//         }
// 
//     }
// 
// 
//     public void saveListItem(ListItem item) {
//         dataManager.saveBookmark(Mappers.mapHomeListItemToBookmarkDbEntity(item));
//     }
// 
//     public boolean isBookmarkSaved(String title) {
//         return dataManager.isSaved(title);
//     }
// 
// 
//     public void deleteBookmark(String title) {
//         dataManager.deleteBookmark(title);
//     }
// }


import com.projects.elad.hacklist.injection.modules.AppModule;
import com.projects.elad.hacklist.injection.modules.NetModule;
import com.projects.elad.hacklist.injection.scopes.HacklistApplicationScope;
import com.projects.elad.hacklist.presentation.presenters.BookmarksPresenter;
import com.projects.elad.hacklist.presentation.presenters.HomePresenter;
import dagger.Component;
package com.projects.elad.hacklist.injection.components;



/**
 * Created by EladKeyshawn on 25/02/2017.
 */
@HacklistApplicationScope
@Component(modules = {AppModule.class, NetModule.class})
public interface AppComponent {
// Path: app/src/main/java/com/projects/elad/hacklist/injection/modules/AppModule.java
// @Module
// public class AppModule {
//     protected final Application application;
//     public AppModule(Application application) {
//         this.application = application;
//     }
// 
//     @Provides
//     Application provideApplication(){
//         return application;
//     }
// 
//     @Provides
//     Context provideContext(){
//         return application;
//     }
// 
//     @Provides
//     @HacklistApplicationScope
//     public RealmBookmarksHelper provideRealmBookmarksHelper(Context context){
//         return new RealmBookmarksHelper(context);
//     }
// 
// 
// 
// 
// }
// 
// Path: app/src/main/java/com/projects/elad/hacklist/injection/modules/NetModule.java
// @Module
// public class NetModule {
//     private CurrDate currDate;
// 
//     public NetModule() {
//         currDate = new CurrDate();
//     }
// 
//     @Provides
//     @HacklistApplicationScope
//     public CurrDate provideCurrDate() {
//         return currDate;
//     }
// 
//     @Provides
//     @HacklistApplicationScope
//     public HacklistService provideHacklistService(){
//         return HacklistService.ServiceCreator.newHacklistService();
//     }
// 
// 
// }
// 
// Path: app/src/main/java/com/projects/elad/hacklist/presentation/presenters/BookmarksPresenter.java
// public class BookmarksPresenter extends BasePresenter<BookmarksMvpView> {
// 
//     @Inject
//     DataManager dataManager;
//     @Inject
//     Context context;
//     private Subscription subscription;
// 
//     public BookmarksPresenter() {
//     }
// 
// 
//     @Override
//     public void detachView() {
//         super.detachView();
//         RxUtil.unsubscribe(subscription);
//     }
// 
//     @Override
//     public void attachView(BookmarksMvpView mvpView) {
//         super.attachView(mvpView);
//         ((HacklistApplication) (((FragmentBookmarks) getMvpView()).getActivity().getApplication())).getComponent().inject(this);
// 
//     }
// 
// 
//     public void loadBookmarks() {
//         RxUtil.unsubscribe(subscription);
//         subscription = dataManager.getAllBookmarks()
//                 .map(dbEntities -> Mappers.mapBookmarkDbEntityToItem(dbEntities, context))
//                 .subscribeOn(AndroidSchedulers.mainThread())
//                 .observeOn(AndroidSchedulers.mainThread())
//                 .subscribe(new Subscriber<List<BookmarkItem>>() {
//                     @Override
//                     public void onCompleted() {
//                     }
// 
//                     @Override
//                     public void onError(Throwable e) {
//                         Toast.makeText(context, "Error when fetching bookmarks" + e.toString(), Toast.LENGTH_LONG).show();
//                     }
// 
//                     @Override
//                     public void onNext(List<BookmarkItem> bookmarkItems) {
//                         if (bookmarkItems.isEmpty()) {
//                             getMvpView().showEmpty();
//                         } else {
//                             getMvpView().showBookmarks(bookmarkItems);
//                         }
//                     }
//                 });
//     }
// 
// 
//     public void deleteBookmark(BookmarkItem bookmark) {
//         dataManager.deleteBookmark(bookmark.getBookmarkTitle());
//         loadBookmarks();
//     }
// }
// 
// Path: app/src/main/java/com/projects/elad/hacklist/presentation/presenters/HomePresenter.java
// public class HomePresenter extends BasePresenter<HomeMvpView> {
// 
//     @Inject DataManager dataManager;
//     private HashMap<Integer, Subscription> subscriptions;
//     @Inject Context context;
// 
//     public HomePresenter() {
//         subscriptions = new HashMap<>();
//     }
// 
// 
//     @Override
//     public void attachView(HomeMvpView mvpView) {
//         super.attachView(mvpView);
//         ((HacklistApplication)(((FragmentHome)getMvpView()).getActivity().getApplication())).getComponent().inject(this);
// 
//     }
// 
//     @Override
//     public void detachView() {
//         super.detachView();
//         unSubscribeAll();
//     }
// 
//     void unSubscribeAll() {
//         for (Subscription sub : subscriptions.values()) {
//             RxUtil.unsubscribe(sub);
//         }
//         subscriptions.clear();
//     }
// 
//     public void loadHackEvent() {
//         checkViewAttached();
//         unSubscribeAll();
// 
//         int month = dataManager.getDate().getCurrMonthInt();
//         String year = dataManager.getDate().getCurrentYear();
//         while (month < 12) {
//             subscriptions.put(month,
//                     dataManager.getHacklistService().getMonthObject(year, Utils.getStringForMonthInt(month))
//                             .observeOn(AndroidSchedulers.mainThread())
//                             .subscribeOn(Schedulers.newThread())
//                             .map(v -> v.entrySet().iterator().next().getValue())
//                             .subscribe(new Subscriber<List<HackEvent>>() {
//                                 @Override
//                                 public void onCompleted() {
//                                 }
// 
//                                 @Override
//                                 public void onError(Throwable e) {
// 
//                                 }
// 
//                                 @Override
//                                 public void onNext(List<HackEvent> events) {
//                                     getMvpView().showHackEvents(Mappers.mapHackEventsToListItems(events,context));
//                                 }
//                             }));
// 
//             month++;
//         }
// 
//     }
// 
// 
//     public void saveListItem(ListItem item) {
//         dataManager.saveBookmark(Mappers.mapHomeListItemToBookmarkDbEntity(item));
//     }
// 
//     public boolean isBookmarkSaved(String title) {
//         return dataManager.isSaved(title);
//     }
// 
// 
//     public void deleteBookmark(String title) {
//         dataManager.deleteBookmark(title);
//     }
// }


// Path: app/src/main/java/com/projects/elad/hacklist/injection/components/AppComponent.java
import com.projects.elad.hacklist.injection.modules.AppModule;
import com.projects.elad.hacklist.injection.modules.NetModule;
import com.projects.elad.hacklist.injection.scopes.HacklistApplicationScope;
import com.projects.elad.hacklist.presentation.presenters.BookmarksPresenter;
import com.projects.elad.hacklist.presentation.presenters.HomePresenter;
import dagger.Component;

package com.projects.elad.hacklist.injection.components;



/**
 * Created by EladKeyshawn on 25/02/2017.
 */
@HacklistApplicationScope
@Component(modules = {AppModule.class, NetModule.class})
public interface AppComponent {
    void inject(HomePresenter homePresenter);