@Override public Boolean doInBackground(Void... params) { boolean success = false; Session session = LastFMApplication.getInstance().session; // Check our subscriber status LastFmServer server = AndroidLastFmServerFactory.getServer(); try { fetchRecentStations(); User user = server.getUserInfo(null, session.getKey()); if (user != null) { String subscriber = user.getSubscriber(); SharedPreferences settings = getSharedPreferences(LastFm.PREFS, 0); SharedPreferences.Editor editor = settings.edit(); editor.putString("lastfm_subscriber", subscriber); editor.commit(); session = new Session(session.getName(), session.getKey(), subscriber); LastFMApplication.getInstance().session = session; } } catch (WSError e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } try { if (mUsername == null) { mUser = mServer.getUserInfo(null, session.getKey()); } else { mUser = mServer.getUserInfo(mUsername, null); tasteometer = mServer.tasteometerCompare(mUsername, session.getName(), 8); } success = true; } catch (Exception e) { e.printStackTrace(); } return success; }
private static void performSync( Context context, Account account, Bundle extras, String authority, ContentProviderClient provider, SyncResult syncResult) throws OperationCanceledException { HashMap<Long, SyncEntry> localEvents = new HashMap<Long, SyncEntry>(); ArrayList<Long> lastfmEvents = new ArrayList<Long>(); mContentResolver = context.getContentResolver(); // If our app has requested a full sync, we're going to delete all our local contacts and start // over boolean is_full_sync = PreferenceManager.getDefaultSharedPreferences(LastFMApplication.getInstance()) .getBoolean("do_full_sync", false); // If our schema is out-of-date, do a fresh sync if (PreferenceManager.getDefaultSharedPreferences(LastFMApplication.getInstance()) .getInt("sync_schema", 0) < syncSchema) is_full_sync = true; long calendar_id = getCalendar(account); if (calendar_id == -1) { Log.e("CalendarSyncAdapter", "Unable to create Last.fm event calendar"); return; } Log.i("CalendarSyncAdapter", "Last.fm events calendar: " + calendar_id); // Load the local Last.fm events Uri eventsUri = Events.CONTENT_URI .buildUpon() .appendQueryParameter(Events.CALENDAR_ID, String.valueOf(calendar_id)) .build(); Cursor c1 = mContentResolver.query( eventsUri, new String[] {Events._ID, Events._SYNC_ID}, null, null, null); while (c1 != null && c1.moveToNext()) { if (is_full_sync) { deleteEvent(context, account, c1.getLong(0)); } else { SyncEntry entry = new SyncEntry(); entry.raw_id = c1.getLong(0); localEvents.put(c1.getLong(1), entry); } } c1.close(); Editor editor = PreferenceManager.getDefaultSharedPreferences(LastFMApplication.getInstance()).edit(); editor.remove("do_full_sync"); editor.putInt("sync_schema", syncSchema); editor.commit(); LastFmServer server = AndroidLastFmServerFactory.getServer(); try { Event[] events = server.getUserEvents(account.name); ArrayList<ContentProviderOperation> operationList = new ArrayList<ContentProviderOperation>(); for (Event event : events) { lastfmEvents.add(Long.valueOf(event.getId())); if (localEvents.containsKey(Long.valueOf(event.getId()))) { SyncEntry entry = localEvents.get(Long.valueOf(event.getId())); operationList.add(updateEvent(calendar_id, account, event, entry.raw_id)); } else { operationList.add(updateEvent(calendar_id, account, event, -1)); } if (operationList.size() >= 50) { try { mContentResolver.applyBatch(CalendarContract.AUTHORITY, operationList); } catch (Exception e) { e.printStackTrace(); } operationList.clear(); } } events = server.getPastUserEvents(account.name); for (Event event : events) { lastfmEvents.add(Long.valueOf(event.getId())); if (localEvents.containsKey(Long.valueOf(event.getId()))) { SyncEntry entry = localEvents.get(Long.valueOf(event.getId())); operationList.add(updateEvent(calendar_id, account, event, entry.raw_id)); } else { operationList.add(updateEvent(calendar_id, account, event, -1)); } if (operationList.size() >= 50) { try { mContentResolver.applyBatch(CalendarContract.AUTHORITY, operationList); } catch (Exception e) { e.printStackTrace(); } operationList.clear(); } } if (operationList.size() > 0) { try { mContentResolver.applyBatch(CalendarContract.AUTHORITY, operationList); } catch (Exception e) { e.printStackTrace(); } } } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } catch (WSError e1) { // TODO Auto-generated catch block e1.printStackTrace(); } Iterator<Long> i = localEvents.keySet().iterator(); while (i.hasNext()) { Long event = i.next(); if (!lastfmEvents.contains(event)) deleteEvent(context, account, localEvents.get(event).raw_id); } }