Esempio n. 1
0
        void useSendFile(File file, string contents)
        {
            Note remoteNote = new Note();

            if(file.Path.EndsWith(".note") && contents.StartsWith("<?xml")) { // xml note file

                try {
                    // Parsing
                    // XML
                    // Get a SAXParser from the SAXPArserFactory
                    SAXParserFactory spf = SAXParserFactory.newInstance();
                    SAXParser sp = spf.newSAXParser();

                    // Get the XMLReader of the SAXParser we created
                    XMLReader xr = sp.getXMLReader();

                    // Create a new ContentHandler, send it this note to fill and apply it to the XML-Reader
                    NoteHandler xmlHandler = new NoteHandler(remoteNote);
                    xr.setContentHandler(xmlHandler);

                    // Create the proper input source
                    stringReader sr = new stringReader(contents);
                    InputSource inputSource = new InputSource(sr);

                    TLog.d(TAG, "parsing note");
                    xr.parse(inputSource);

                // TODO wrap and throw a new exception here
                } catch (Exception e) {
                    e.PrintStackTrace();
                    if(e as TimeFormatException) TLog.e(TAG, "Problem parsing the note's date and time");
                    Finish();
                }
                // the note guid is not stored in the xml but in the filename
                remoteNote.setGuid(file.Name.Replace(".note", ""));
                Java.Util.Regex.Pattern note_content = Java.Util.Regex.Pattern.Compile("<note-content[^>]+>(.*)<\\/note-content>", Pattern.CASE_INSENSITIVE+Pattern.DOTALL);

                // FIXME here we are re-reading the whole note just to grab note-content out, there is probably a better way to do this (I'm talking to you xmlpull.org!)
                Matcher m = note_content.Matcher(contents);
                if (m.Find()) {
                    remoteNote.setXmlContent(NoteManager.stripTitleFromContent(m.Group(1),remoteNote.getTitle()));
                } else {
                    TLog.w(TAG, "Something went wrong trying to grab the note-content out of a note");
                    return;
                }
            }
            else { // ordinary text file
                remoteNote = NewNote.createNewNote(this, file.getName().replaceFirst("\\.[^.]+$", ""), XmlUtils.escape(contents));
            }

            remoteNote.setFileName(file.AbsolutePath);

            // check and see if the note already Exists; if so, send to conflict resolver
            Note localNote = NoteManager.getNoteByGuid(this, remoteNote.getGuid());

            if(localNote != null) {
                int compareBoth = Time.Compare(localNote.getLastChangeDate(), remoteNote.getLastChangeDate());

                TLog.v(TAG, "note conflict... showing resolution dialog TITLE:{0} GUID:{1}", localNote.getTitle(), localNote.getGuid());

                // send everything to Tomdroid so it can show Sync Dialog

                Bundle bundle = new Bundle();
                bundle.PutString("title",remoteNote.getTitle());
                bundle.PutString("file",remoteNote.getFileName());
                bundle.PutString("guid",remoteNote.getGuid());
                bundle.PutString("date",remoteNote.getLastChangeDate().Format3339(false));
                bundle.PutString("content", remoteNote.getXmlContent());
                bundle.PutString("tags", remoteNote.getTags());
                bundle.PutInt("datediff", compareBoth);
                bundle.PutBoolean("noRemote", true);

                Intent cintent = new Intent(ApplicationContext, typeof(CompareNotes));
                cintent.PutExtras(bundle);

                StartActivityForResult(cintent, 0);
                return;
            }

            // note doesn't exist, just give it a new title if necessary
            remoteNote.setTitle(NoteManager.validateNoteTitle(this, remoteNote.getTitle(), remoteNote.getGuid()));

            // add to content provider
            Android.Net.Uri uri = NoteManager.putNote(this, remoteNote);

            // view new note
            Intent i = new Intent(Intent.ActionView, uri, this, typeof(Tomdroid));
            i.PutExtra("view_note", true);
            i.AddFlags(ActivityFlags.ClearTop);
            StartActivity(i);
            Finish();
        }
Esempio n. 2
0
        private void showNoteInPane(int position)
        {
            if(rightPane == null)
                return;

            if(position == -1)
                position = 0;

            title.SetText("");
            content.SetText("");

             // save index and top position

            int index = ListView.FirstVisiblePosition;
            View v = ListView.GetChildAt(0);
            int top = (v == null) ? 0 : v.getTop();

            updateNotesList(Query, position);

            // restore

            ListView.SetSelectionFromTop(index, top);

            if(position >= adapter.getCount())
                position = 0;

            ICursor item = (ICursor) adapter.GetItem(position);
            if (item == null || item.getCount() == 0) {
                TLog.d(TAG, "Index {0} not found in list", position);
                return;
            }
            TLog.d(TAG, "Getting note {0}", position);

            long noteId = item.GetInt(item.getColumnIndexOrThrow(Note.ID));
            uri = Uri.Parse(CONTENT_URI + "/" + noteId);

            note = NoteManager.getNote(this, uri);
            TLog.v(TAG, "Note guid: {0}", note.getGuid());

            if(note != null) {
                TLog.d(TAG, "note {0} found", position);
                noteContent = new NoteContentBuilder().setCaller(noteContentHandler).setInputSource(note.getXmlContent()).setTitle(note.getTitle()).build();
                lastIndex = position;
            } else {
                TLog.d(TAG, "The note {0} doesn't exist", uri);
                bool proposeShortcutRemoval;
                bool calledFromShortcut = Intent.GetBooleanExtra(CALLED_FROM_SHORTCUT_EXTRA, false);
                string shortcutName = Intent.GetStringExtra(SHORTCUT_NAME);
                proposeShortcutRemoval = calledFromShortcut && uri != null && shortcutName != null;

                if (proposeShortcutRemoval) {
                    dialogstring = shortcutName;
                    ShowDialog(DIALOG_NOT_FOUND_SHORTCUT);
                }
                else
                    ShowDialog(DIALOG_NOT_FOUND);

            }
        }