mirror of
https://github.com/kiwix/kiwix-android.git
synced 2025-09-18 11:55:38 -04:00
Android local ZIM files are stored in Database #278
This commit is contained in:
parent
35a9749cf7
commit
cdc095c69c
@ -1,8 +1,35 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
android:id="@+id/progress_background"
|
android:id="@+id/progressbar_layout"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_centerInParent="true"
|
||||||
|
android:layout_marginTop="300dp">
|
||||||
|
<View
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="5dp"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="horizontal">
|
android:background="?android:attr/listDivider"
|
||||||
|
android:layout_marginTop="-1dp"
|
||||||
|
/>
|
||||||
|
|
||||||
</LinearLayout>
|
<ProgressBar
|
||||||
|
android:id="@+id/progressBar"
|
||||||
|
style="?android:attr/progressBarStyleLarge"
|
||||||
|
android:padding="20dp"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_centerHorizontal="true"></ProgressBar>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/progressbar_message"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_below="@id/progressBar"
|
||||||
|
android:layout_centerHorizontal="true"
|
||||||
|
android:layout_centerVertical="true"
|
||||||
|
android:paddingTop="10px"
|
||||||
|
android:text="@string/rescan_fs_warning"
|
||||||
|
android:textStyle="bold" />
|
||||||
|
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
|
@ -25,7 +25,8 @@
|
|||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_below="@id/toolbar"
|
android:layout_below="@id/toolbar"
|
||||||
android:paddingBottom="60dp">
|
android:paddingBottom="60dp"
|
||||||
|
android:footerDividersEnabled="false">
|
||||||
</ListView>
|
</ListView>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
@ -39,38 +40,6 @@
|
|||||||
android:paddingRight="10dp"
|
android:paddingRight="10dp"
|
||||||
android:text="@string/error_nozimfilesfound"
|
android:text="@string/error_nozimfilesfound"
|
||||||
android:visibility="gone"/>
|
android:visibility="gone"/>
|
||||||
|
|
||||||
<RelativeLayout
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="match_parent"
|
|
||||||
android:id="@+id/progressbar_layout"
|
|
||||||
android:visibility="gone"
|
|
||||||
android:layout_centerInParent="true"
|
|
||||||
android:layout_marginTop="300dp">
|
|
||||||
|
|
||||||
<ProgressBar
|
|
||||||
android:id="@+id/progressBar"
|
|
||||||
style="?android:attr/progressBarStyleLarge"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_centerHorizontal="true">
|
|
||||||
</ProgressBar>
|
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/progressbar_message"
|
|
||||||
android:layout_width="wrap_content"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:text="@string/rescan_fs_warning"
|
|
||||||
android:paddingTop="10px"
|
|
||||||
android:textStyle="bold"
|
|
||||||
android:layout_below="@id/progressBar"
|
|
||||||
android:layout_centerHorizontal="true"
|
|
||||||
android:layout_centerVertical="true"
|
|
||||||
/>
|
|
||||||
|
|
||||||
|
|
||||||
</RelativeLayout>
|
|
||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
@ -95,6 +95,7 @@
|
|||||||
<string name="menu_library">Download ZIM files</string>
|
<string name="menu_library">Download ZIM files</string>
|
||||||
<string name="local_zims">Local</string>
|
<string name="local_zims">Local</string>
|
||||||
<string name="remote_zims">Remote</string>
|
<string name="remote_zims">Remote</string>
|
||||||
|
<string name="zim_downloads">Downloads</string>
|
||||||
<string name="zim_manager">ZIM Management</string>
|
<string name="zim_manager">ZIM Management</string>
|
||||||
<string name="delete_specific_zim">Delete this ZIM?</string>
|
<string name="delete_specific_zim">Delete this ZIM?</string>
|
||||||
<string name="delete_specific_zim_toast">ZIM file deleted</string>
|
<string name="delete_specific_zim_toast">ZIM file deleted</string>
|
||||||
|
@ -189,7 +189,6 @@ public class LibraryFragment extends Fragment implements AdapterView.OnItemClick
|
|||||||
+ bytesToHuman(getSpaceAvailable()), Toast.LENGTH_LONG).show();
|
+ bytesToHuman(getSpaceAvailable()), Toast.LENGTH_LONG).show();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
bookDao.saveBook((LibraryNetworkEntity.Book) parent.getAdapter().getItem(position));
|
|
||||||
if (isWiFi()){
|
if (isWiFi()){
|
||||||
downloadFile((LibraryNetworkEntity.Book) parent.getAdapter().getItem(position));
|
downloadFile((LibraryNetworkEntity.Book) parent.getAdapter().getItem(position));
|
||||||
} else {
|
} else {
|
||||||
@ -259,7 +258,6 @@ public class LibraryFragment extends Fragment implements AdapterView.OnItemClick
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void downloadFile(LibraryNetworkEntity.Book book) {
|
public void downloadFile(LibraryNetworkEntity.Book book) {
|
||||||
bookDao.saveBook(book);
|
|
||||||
Toast.makeText(super.getActivity(), stringsGetter(R.string.download_started_library, super.getActivity()), Toast.LENGTH_LONG).show();
|
Toast.makeText(super.getActivity(), stringsGetter(R.string.download_started_library, super.getActivity()), Toast.LENGTH_LONG).show();
|
||||||
Intent service = new Intent(super.getActivity(), DownloadService.class);
|
Intent service = new Intent(super.getActivity(), DownloadService.class);
|
||||||
service.putExtra(DownloadIntent.DOWNLOAD_URL_PARAMETER, book.getUrl());
|
service.putExtra(DownloadIntent.DOWNLOAD_URL_PARAMETER, book.getUrl());
|
||||||
|
@ -64,6 +64,9 @@ import android.widget.TextView;
|
|||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.Comparator;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.kiwix.kiwixmobile.database.BookDao;
|
import org.kiwix.kiwixmobile.database.BookDao;
|
||||||
@ -85,17 +88,16 @@ public class ZimFileSelectFragment extends Fragment
|
|||||||
private static final int LOADER_ID = 0x02;
|
private static final int LOADER_ID = 0x02;
|
||||||
public static Context context;
|
public static Context context;
|
||||||
public RelativeLayout llLayout;
|
public RelativeLayout llLayout;
|
||||||
// Adapter of the Data populated by the MediaStore
|
|
||||||
private SimpleCursorAdapter mCursorAdapter;
|
|
||||||
// Adapter of the Data populated by recanning the Filesystem by ourselves
|
// Adapter of the Data populated by recanning the Filesystem by ourselves
|
||||||
private RescanDataAdapter mRescanAdapter;
|
private RescanDataAdapter mRescanAdapter;
|
||||||
private ArrayList<LibraryNetworkEntity.Book> mFiles;
|
private ArrayList<LibraryNetworkEntity.Book> mFiles;
|
||||||
private ListView mZimFileList;
|
private ListView mZimFileList;
|
||||||
private RelativeLayout mProgressBar;
|
private RelativeLayout progressBar;
|
||||||
private TextView mFileMessage;
|
private TextView mFileMessage;
|
||||||
private TextView mProgressBarMessage;
|
|
||||||
private BookDao bookDao;
|
private BookDao bookDao;
|
||||||
|
|
||||||
|
|
||||||
public static void finishResult(String path) {
|
public static void finishResult(String path) {
|
||||||
ZimManageActivity zimManageActivity = (ZimManageActivity) context;
|
ZimManageActivity zimManageActivity = (ZimManageActivity) context;
|
||||||
if (path != null) {
|
if (path != null) {
|
||||||
@ -110,42 +112,53 @@ public class ZimFileSelectFragment extends Fragment
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void refreshFragment(){
|
||||||
|
// Of course you will want to faActivity and llLayout in the class and not this method to access them in the rest of
|
||||||
|
// the class, just initialize them here
|
||||||
|
if (mZimFileList == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
mZimFileList.addFooterView(progressBar);
|
||||||
|
mZimFileList.setOnItemClickListener(this);
|
||||||
|
mZimFileList.setOnItemLongClickListener(this);
|
||||||
|
|
||||||
|
bookDao = new BookDao(new KiwixDatabase(context));
|
||||||
|
|
||||||
|
mFiles = bookDao.getBooks();
|
||||||
|
Collections.sort(mFiles, new fileComparator());
|
||||||
|
|
||||||
|
mRescanAdapter = new RescanDataAdapter(ZimFileSelectFragment.context, 0, mFiles);
|
||||||
|
|
||||||
|
mZimFileList.setAdapter(mRescanAdapter);
|
||||||
|
mRescanAdapter.notifyDataSetChanged();
|
||||||
|
checkPermissions();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
|
||||||
FragmentActivity faActivity = (FragmentActivity) super.getActivity();
|
FragmentActivity faActivity = (FragmentActivity) super.getActivity();
|
||||||
context = super.getActivity();
|
context = super.getActivity();
|
||||||
// Replace LinearLayout by the type of the root element of the layout you're trying to load
|
// Replace LinearLayout by the type of the root element of the layout you're trying to load
|
||||||
llLayout = (RelativeLayout) inflater.inflate(R.layout.zim_list, container, false);
|
llLayout = (RelativeLayout) inflater.inflate(R.layout.zim_list, container, false);
|
||||||
// Of course you will want to faActivity and llLayout in the class and not this method to access them in the rest of
|
|
||||||
// the class, just initialize them here
|
|
||||||
|
|
||||||
new LanguageUtils(super.getActivity()).changeFont(super.getActivity().getLayoutInflater());
|
new LanguageUtils(super.getActivity()).changeFont(super.getActivity().getLayoutInflater());
|
||||||
|
|
||||||
mFiles = new ArrayList<LibraryNetworkEntity.Book>();
|
|
||||||
|
|
||||||
mProgressBar = (RelativeLayout) llLayout.findViewById(R.id.progressbar_layout);
|
|
||||||
mFileMessage = (TextView) llLayout.findViewById(R.id.file_management_no_files);
|
mFileMessage = (TextView) llLayout.findViewById(R.id.file_management_no_files);
|
||||||
// mProgressBarMessage = (TextView) llLayout.findViewById(R.id.progressbar_message);
|
|
||||||
mZimFileList = (ListView) llLayout.findViewById(R.id.zimfilelist);
|
mZimFileList = (ListView) llLayout.findViewById(R.id.zimfilelist);
|
||||||
|
|
||||||
mZimFileList.setOnItemClickListener(this);
|
mFiles = new ArrayList<LibraryNetworkEntity.Book>();
|
||||||
mZimFileList.setOnItemLongClickListener(this);
|
progressBar = (RelativeLayout) super.getActivity().getLayoutInflater().inflate(R.layout.progress_bar, null);
|
||||||
mProgressBar.setVisibility(View.VISIBLE);
|
refreshFragment();
|
||||||
|
|
||||||
bookDao = new BookDao(new KiwixDatabase(context));
|
|
||||||
|
|
||||||
checkPermissions();
|
|
||||||
|
|
||||||
// Don't use this method, it's handled by inflater.inflate() above :
|
|
||||||
// setContentView(R.layout.activity_layout);
|
|
||||||
|
|
||||||
// The FragmentActivity doesn't contain the layout directly so we must use our instance of LinearLayout :
|
|
||||||
//llLayout.findViewById(R.id.someGuiElement);
|
|
||||||
// Instead of :
|
|
||||||
// findViewById(R.id.someGuiElement);
|
|
||||||
return llLayout; // We must return the loaded Layout
|
return llLayout; // We must return the loaded Layout
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private class fileComparator implements Comparator<LibraryNetworkEntity.Book> {
|
||||||
|
@Override
|
||||||
|
public int compare(LibraryNetworkEntity.Book b1, LibraryNetworkEntity.Book b2) {
|
||||||
|
return b1.getTitle().compareTo(b2.getTitle());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void checkPermissions(){
|
public void checkPermissions(){
|
||||||
if (ContextCompat.checkSelfPermission(super.getActivity(),
|
if (ContextCompat.checkSelfPermission(super.getActivity(),
|
||||||
Manifest.permission.READ_EXTERNAL_STORAGE)
|
Manifest.permission.READ_EXTERNAL_STORAGE)
|
||||||
@ -384,8 +397,6 @@ public class ZimFileSelectFragment extends Fragment
|
|||||||
@Override
|
@Override
|
||||||
protected void onPreExecute() {
|
protected void onPreExecute() {
|
||||||
|
|
||||||
mProgressBar.setVisibility(View.VISIBLE);
|
|
||||||
|
|
||||||
super.onPreExecute();
|
super.onPreExecute();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -393,6 +404,8 @@ public class ZimFileSelectFragment extends Fragment
|
|||||||
protected Void doInBackground(Void... params) {
|
protected Void doInBackground(Void... params) {
|
||||||
|
|
||||||
mFiles = new FileSearch().findFiles();
|
mFiles = new FileSearch().findFiles();
|
||||||
|
Collections.sort(mFiles, new fileComparator());
|
||||||
|
bookDao.saveBooks(mFiles);
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@Override
|
@Override
|
||||||
@ -401,12 +414,11 @@ public class ZimFileSelectFragment extends Fragment
|
|||||||
|
|
||||||
mZimFileList.setAdapter(mRescanAdapter);
|
mZimFileList.setAdapter(mRescanAdapter);
|
||||||
|
|
||||||
mProgressBar.setVisibility(View.GONE);
|
mZimFileList.removeFooterView(progressBar);
|
||||||
|
//mZimFileList.addFooterView(emptyView);
|
||||||
|
|
||||||
checkEmpty();
|
checkEmpty();
|
||||||
|
|
||||||
new FileWriter(ZimFileSelectFragment.context).saveArray(mFiles);
|
|
||||||
|
|
||||||
super.onPostExecute(result);
|
super.onPostExecute(result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@ import android.content.DialogInterface;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.database.DataSetObserver;
|
import android.database.DataSetObserver;
|
||||||
import android.support.design.widget.TabLayout;
|
import android.support.design.widget.TabLayout;
|
||||||
|
import android.support.v4.app.FragmentTransaction;
|
||||||
import android.support.v4.view.MenuItemCompat;
|
import android.support.v4.view.MenuItemCompat;
|
||||||
import android.support.v7.app.AlertDialog;
|
import android.support.v7.app.AlertDialog;
|
||||||
import android.support.v7.app.AppCompatActivity;
|
import android.support.v7.app.AppCompatActivity;
|
||||||
@ -63,6 +64,10 @@ public class ZimManageActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
public Toolbar toolbar;
|
public Toolbar toolbar;
|
||||||
|
|
||||||
|
public MenuItem refeshItem;
|
||||||
|
|
||||||
|
private MenuItem searchItem;
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
@ -82,11 +87,43 @@ public class ZimManageActivity extends AppCompatActivity {
|
|||||||
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
|
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
|
||||||
tabLayout.setupWithViewPager(mViewPager);
|
tabLayout.setupWithViewPager(mViewPager);
|
||||||
|
|
||||||
getIntent().getIntExtra(TAB_EXTRA,0);
|
|
||||||
mViewPager.setCurrentItem(getIntent().getIntExtra(TAB_EXTRA,0));
|
mViewPager.setCurrentItem(getIntent().getIntExtra(TAB_EXTRA,0));
|
||||||
|
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
|
||||||
|
@Override
|
||||||
|
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPageSelected(int position) {
|
||||||
|
updateMenu(position);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onPageScrollStateChanged(int state) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateMenu(int position){
|
||||||
|
if (searchItem == null)
|
||||||
|
return;
|
||||||
|
switch (position){
|
||||||
|
case 0:
|
||||||
|
refeshItem.setVisible(true);
|
||||||
|
searchItem.setVisible(false);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
refeshItem.setVisible(false);
|
||||||
|
searchItem.setVisible(true);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
refeshItem.setVisible(false);
|
||||||
|
searchItem.setVisible(false);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
private void setUpToolbar() {
|
private void setUpToolbar() {
|
||||||
toolbar = (Toolbar) findViewById(R.id.toolbar);
|
toolbar = (Toolbar) findViewById(R.id.toolbar);
|
||||||
setSupportActionBar(toolbar);
|
setSupportActionBar(toolbar);
|
||||||
@ -130,18 +167,14 @@ public class ZimManageActivity extends AppCompatActivity {
|
|||||||
// Inflate the menu; this adds items to the action bar if it is present.
|
// Inflate the menu; this adds items to the action bar if it is present.
|
||||||
getMenuInflater().inflate(R.menu.menu_zim_manager, menu);
|
getMenuInflater().inflate(R.menu.menu_zim_manager, menu);
|
||||||
mMenu = menu;
|
mMenu = menu;
|
||||||
SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();
|
refeshItem = (MenuItem) menu.findItem(R.id.menu_rescan_fs);
|
||||||
menu.findItem(R.id.action_search).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener(){
|
searchItem = (MenuItem) menu.findItem(R.id.action_search);
|
||||||
@Override
|
SearchView searchView = (SearchView) searchItem.getActionView();
|
||||||
public boolean onMenuItemClick(MenuItem v) {
|
updateMenu(mViewPager.getCurrentItem());
|
||||||
mViewPager.setCurrentItem(1);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
toolbar.setOnClickListener(new View.OnClickListener() {
|
toolbar.setOnClickListener(new View.OnClickListener() {
|
||||||
@Override
|
@Override
|
||||||
public void onClick(View v) {
|
public void onClick(View v) {
|
||||||
mViewPager.setCurrentItem(1);
|
if (mViewPager.getCurrentItem() == 1)
|
||||||
MenuItemCompat.expandActionView(menu.findItem(R.id.action_search));
|
MenuItemCompat.expandActionView(menu.findItem(R.id.action_search));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@ -173,10 +206,8 @@ public class ZimManageActivity extends AppCompatActivity {
|
|||||||
|
|
||||||
if (id == R.id.menu_rescan_fs){
|
if (id == R.id.menu_rescan_fs){
|
||||||
|
|
||||||
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
|
ZimFileSelectFragment fragment = (ZimFileSelectFragment) mSectionsPagerAdapter.getItem(0);
|
||||||
int position = mViewPager.getCurrentItem();
|
fragment.refreshFragment();
|
||||||
mViewPager.setAdapter(mSectionsPagerAdapter);
|
|
||||||
mViewPager.setCurrentItem(position);
|
|
||||||
// mViewPager.notify();
|
// mViewPager.notify();
|
||||||
}
|
}
|
||||||
//noinspection SimplifiableIfStatement
|
//noinspection SimplifiableIfStatement
|
||||||
@ -191,6 +222,12 @@ public class ZimManageActivity extends AppCompatActivity {
|
|||||||
*/
|
*/
|
||||||
public class SectionsPagerAdapter extends FragmentPagerAdapter {
|
public class SectionsPagerAdapter extends FragmentPagerAdapter {
|
||||||
|
|
||||||
|
private ZimFileSelectFragment zimFileSelectFragment = new ZimFileSelectFragment();
|
||||||
|
|
||||||
|
private LibraryFragment libraryFragment = new LibraryFragment();
|
||||||
|
|
||||||
|
private DownloadFragment downloadFragment = new DownloadFragment();
|
||||||
|
|
||||||
public SectionsPagerAdapter(FragmentManager fm) {
|
public SectionsPagerAdapter(FragmentManager fm) {
|
||||||
super(fm);
|
super(fm);
|
||||||
}
|
}
|
||||||
@ -200,11 +237,11 @@ public class ZimManageActivity extends AppCompatActivity {
|
|||||||
// getItem is called to instantiate the fragment for the given page.
|
// getItem is called to instantiate the fragment for the given page.
|
||||||
switch (position) {
|
switch (position) {
|
||||||
case 0:
|
case 0:
|
||||||
return new ZimFileSelectFragment();
|
return zimFileSelectFragment;
|
||||||
case 1:
|
case 1:
|
||||||
return new LibraryFragment();
|
return libraryFragment;
|
||||||
case 2:
|
case 2:
|
||||||
return new DownloadFragment();
|
return downloadFragment;
|
||||||
default:
|
default:
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@ -223,7 +260,7 @@ public class ZimManageActivity extends AppCompatActivity {
|
|||||||
case 1:
|
case 1:
|
||||||
return getResources().getString(R.string.remote_zims);
|
return getResources().getString(R.string.remote_zims);
|
||||||
case 2:
|
case 2:
|
||||||
return "Downloads";
|
return getResources().getString(R.string.zim_downloads);
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,10 @@ import org.kiwix.kiwixmobile.database.entity.BookDataSource;
|
|||||||
import org.kiwix.kiwixmobile.database.entity.BookDatabaseEntity;
|
import org.kiwix.kiwixmobile.database.entity.BookDatabaseEntity;
|
||||||
import org.kiwix.kiwixmobile.database.entity.Bookmarks;
|
import org.kiwix.kiwixmobile.database.entity.Bookmarks;
|
||||||
import org.kiwix.kiwixmobile.library.entity.LibraryNetworkEntity;
|
import org.kiwix.kiwixmobile.library.entity.LibraryNetworkEntity;
|
||||||
|
import org.kiwix.kiwixmobile.library.entity.LibraryNetworkEntity.Book;
|
||||||
|
|
||||||
|
|
||||||
|
import java.io.File;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -24,13 +27,13 @@ public class BookDao {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public LibraryNetworkEntity.Book getBook(String fileName) {
|
public ArrayList<Book> getBooks() {
|
||||||
SquidCursor<BookDatabaseEntity> bookCursor = mDb.query(
|
SquidCursor<BookDatabaseEntity> bookCursor = mDb.query(
|
||||||
BookDatabaseEntity.class,
|
BookDatabaseEntity.class,
|
||||||
Query.select());
|
Query.select());
|
||||||
LibraryNetworkEntity.Book book = new LibraryNetworkEntity.Book();
|
ArrayList<Book> books = new ArrayList<>();
|
||||||
while (bookCursor.moveToNext()){
|
while (bookCursor.moveToNext()){
|
||||||
if (bookCursor.get(BookDatabaseEntity.URL).contains("/" + fileName + ".")) {
|
Book book = new Book();
|
||||||
book.id = bookCursor.get(BookDatabaseEntity.BOOK_ID);
|
book.id = bookCursor.get(BookDatabaseEntity.BOOK_ID);
|
||||||
book.title = bookCursor.get(BookDatabaseEntity.TITLE);
|
book.title = bookCursor.get(BookDatabaseEntity.TITLE);
|
||||||
book.description = bookCursor.get(BookDatabaseEntity.DESCRIPTION);
|
book.description = bookCursor.get(BookDatabaseEntity.DESCRIPTION);
|
||||||
@ -38,38 +41,41 @@ public class BookDao {
|
|||||||
book.creator = bookCursor.get(BookDatabaseEntity.BOOK_CREATOR);
|
book.creator = bookCursor.get(BookDatabaseEntity.BOOK_CREATOR);
|
||||||
book.publisher = bookCursor.get(BookDatabaseEntity.PUBLISHER);
|
book.publisher = bookCursor.get(BookDatabaseEntity.PUBLISHER);
|
||||||
book.date = bookCursor.get(BookDatabaseEntity.DATE);
|
book.date = bookCursor.get(BookDatabaseEntity.DATE);
|
||||||
book.url = bookCursor.get(BookDatabaseEntity.URL);
|
book.file = new File(bookCursor.get(BookDatabaseEntity.URL));
|
||||||
book.articleCount = bookCursor.get(BookDatabaseEntity.ARTICLE_COUNT);
|
book.articleCount = bookCursor.get(BookDatabaseEntity.ARTICLE_COUNT);
|
||||||
book.mediaCount = bookCursor.get(BookDatabaseEntity.MEDIA_COUNT);
|
book.mediaCount = bookCursor.get(BookDatabaseEntity.MEDIA_COUNT);
|
||||||
book.size = bookCursor.get(BookDatabaseEntity.SIZE);
|
book.size = bookCursor.get(BookDatabaseEntity.SIZE);
|
||||||
book.favicon = bookCursor.get(BookDatabaseEntity.FAVICON);
|
book.favicon = bookCursor.get(BookDatabaseEntity.FAVICON);
|
||||||
book.downloaded = bookCursor.get(BookDatabaseEntity.DOWNLOADED);
|
if (book.file.exists()) {
|
||||||
bookCursor.close();
|
books.add(book);
|
||||||
return book;
|
} else {
|
||||||
|
String path = bookCursor.get(BookDatabaseEntity.URL);
|
||||||
|
mDb.deleteWhere(BookDatabaseEntity.class, BookDatabaseEntity.URL.eq(path));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bookCursor.close();
|
bookCursor.close();
|
||||||
return null;
|
return books;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void saveBook(LibraryNetworkEntity.Book book) {
|
public void saveBooks(ArrayList<Book> books) {
|
||||||
|
for (Book book : books){
|
||||||
BookDatabaseEntity bookDatabaseEntity = new BookDatabaseEntity();
|
BookDatabaseEntity bookDatabaseEntity = new BookDatabaseEntity();
|
||||||
bookDatabaseEntity.setBookId(book.getId());
|
bookDatabaseEntity.setBookId(book.getId());
|
||||||
bookDatabaseEntity.setTitle(book.getTitle());
|
bookDatabaseEntity.setTitle(book.getTitle());
|
||||||
bookDatabaseEntity.setDescription(book.getTitle());
|
bookDatabaseEntity.setDescription(book.getDescription());
|
||||||
bookDatabaseEntity.setLanguage(book.getLanguage());
|
bookDatabaseEntity.setLanguage(book.getLanguage());
|
||||||
bookDatabaseEntity.setBookCreator(book.getCreator());
|
bookDatabaseEntity.setBookCreator(book.getCreator());
|
||||||
bookDatabaseEntity.setPublisher(book.getPublisher());
|
bookDatabaseEntity.setPublisher(book.getPublisher());
|
||||||
bookDatabaseEntity.setDate(book.getDate());
|
bookDatabaseEntity.setDate(book.getDate());
|
||||||
bookDatabaseEntity.setUrl(book.getUrl());
|
bookDatabaseEntity.setUrl(book.file.getPath());
|
||||||
bookDatabaseEntity.setArticleCount(book.getArticleCount());
|
bookDatabaseEntity.setArticleCount(book.getArticleCount());
|
||||||
bookDatabaseEntity.setMediaCount(book.getMediaCount());
|
bookDatabaseEntity.setMediaCount(book.getMediaCount());
|
||||||
bookDatabaseEntity.setSize(book.getSize());
|
bookDatabaseEntity.setSize(book.getSize());
|
||||||
bookDatabaseEntity.setFavicon(book.getFavicon());
|
bookDatabaseEntity.setFavicon(book.getFavicon());
|
||||||
bookDatabaseEntity.setIsDownloaded(book.downloaded);
|
String filePath = book.file.getPath();
|
||||||
mDb.deleteWhere(BookDatabaseEntity.class, BookDatabaseEntity.URL.eq(book.getUrl()));
|
mDb.deleteWhere(BookDatabaseEntity.class, BookDatabaseEntity.URL.eq(filePath));
|
||||||
mDb.persist(bookDatabaseEntity);
|
mDb.persist(bookDatabaseEntity);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -51,7 +51,7 @@ import java.util.List;
|
|||||||
|
|
||||||
public class KiwixDatabase extends SquidDatabase {
|
public class KiwixDatabase extends SquidDatabase {
|
||||||
|
|
||||||
private static final int VERSION = 8;
|
private static final int VERSION = 9;
|
||||||
private Context context;
|
private Context context;
|
||||||
|
|
||||||
|
|
||||||
@ -113,6 +113,10 @@ public class KiwixDatabase extends SquidDatabase {
|
|||||||
if (newVersion >= 6) {
|
if (newVersion >= 6) {
|
||||||
tryCreateTable(Bookmarks.TABLE);
|
tryCreateTable(Bookmarks.TABLE);
|
||||||
}
|
}
|
||||||
|
if (newVersion >= 9) {
|
||||||
|
db.execSQL("DROP TABLE IF EXISTS book");
|
||||||
|
tryCreateTable(BookDatabaseEntity.TABLE);
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -154,7 +154,6 @@ public class DownloadService extends Service {
|
|||||||
target, PendingIntent.FLAG_CANCEL_CURRENT);
|
target, PendingIntent.FLAG_CANCEL_CURRENT);
|
||||||
book.downloaded = true;
|
book.downloaded = true;
|
||||||
notification.get(notificationID).setContentIntent(pendingIntent);
|
notification.get(notificationID).setContentIntent(pendingIntent);
|
||||||
bookDao.saveBook(book);
|
|
||||||
updateForeground();
|
updateForeground();
|
||||||
} else if (progress == 0) {
|
} else if (progress == 0) {
|
||||||
// Tells android to not kill the service
|
// Tells android to not kill the service
|
||||||
|
@ -52,23 +52,6 @@ public class FileWriter {
|
|||||||
mContext = context;
|
mContext = context;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Build a CSV list from the file paths
|
|
||||||
public void saveArray(ArrayList<LibraryNetworkEntity.Book> files) {
|
|
||||||
|
|
||||||
ArrayList<String> list = new ArrayList<>();
|
|
||||||
|
|
||||||
for (LibraryNetworkEntity.Book file : files) {
|
|
||||||
list.add(file.file.getPath());
|
|
||||||
}
|
|
||||||
|
|
||||||
StringBuilder sb = new StringBuilder();
|
|
||||||
for (String s : list) {
|
|
||||||
sb.append(s);
|
|
||||||
sb.append(",");
|
|
||||||
}
|
|
||||||
|
|
||||||
saveCsvToPrefrences(sb.toString());
|
|
||||||
}
|
|
||||||
|
|
||||||
// Read the locales.txt file in the assets folder, that has been created at compile time by the
|
// Read the locales.txt file in the assets folder, that has been created at compile time by the
|
||||||
// build script
|
// build script
|
||||||
@ -91,15 +74,6 @@ public class FileWriter {
|
|||||||
return readCsv(content);
|
return readCsv(content);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Split the CSV by the comma and return an ArrayList with the file paths
|
|
||||||
private ArrayList<String> readCsv() {
|
|
||||||
|
|
||||||
String csv = getCsvFromPrefrences();
|
|
||||||
|
|
||||||
return readCsv(csv);
|
|
||||||
}
|
|
||||||
|
|
||||||
private ArrayList<String> readCsv(String csv) {
|
private ArrayList<String> readCsv(String csv) {
|
||||||
|
|
||||||
String[] csvArray = csv.split(",");
|
String[] csvArray = csv.split(",");
|
||||||
@ -107,27 +81,6 @@ public class FileWriter {
|
|||||||
return new ArrayList<String>(Arrays.asList(csvArray));
|
return new ArrayList<String>(Arrays.asList(csvArray));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Save a CSV file to the prefrences
|
|
||||||
private void saveCsvToPrefrences(String csv) {
|
|
||||||
|
|
||||||
SharedPreferences preferences = mContext.getSharedPreferences(PREF_NAME, 0);
|
|
||||||
SharedPreferences.Editor editor = preferences.edit();
|
|
||||||
editor.putString(CSV_PREF_NAME, csv);
|
|
||||||
|
|
||||||
editor.apply();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Load the CSV from the prefrences
|
|
||||||
private String getCsvFromPrefrences() {
|
|
||||||
SharedPreferences preferences = mContext.getSharedPreferences(PREF_NAME, 0);
|
|
||||||
|
|
||||||
return preferences.getString(CSV_PREF_NAME, "");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Remove the file path and the extension and return a file name for the given file path
|
|
||||||
private String getTitleFromFilePath(String path) {
|
|
||||||
return new File(path).getName().replaceFirst("[.][^.]+$", "");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user